X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a23477eb9bd7d1af5f66a171041bf72af932488e..29db9a64a:/uip/mhbuildsbr.c?ds=sidebyside diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index 62df410d..e34dd978 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -18,9 +18,15 @@ #include #include #include +#include #include #include #include +#include "../sbr/m_mktemp.h" +#include "../sbr/message_id.h" +#include "../sbr/mime_type.h" +#include "mhfree.h" +#include "mhshowsbr.h" #ifdef HAVE_SYS_TIME_H # include @@ -34,10 +40,6 @@ extern int listsw; extern int rfc934sw; extern int contentidsw; -/* cache policies */ -extern int rcachesw; /* mhcachesbr.c */ -extern int wcachesw; /* mhcachesbr.c */ - static char prefix[] = "----- =_aaaaaaaaaa"; struct attach_list { @@ -59,12 +61,6 @@ void content_error (char *, CT, char *, ...); /* mhcachesbr.c */ int find_cache (CT, int, int *, char *, char *, int); -/* mhfree.c */ -extern CT *cts; -void freects_done (int) NORETURN; -void free_ctinfo (CT); -void free_encoding (CT, int); - /* * static prototypes */ @@ -335,7 +331,7 @@ finish_field: case BODY: fseek (in, (long) (-strlen (buf)), SEEK_CUR); - /* FALLTHRU */ + break; case FILEEOF: break; @@ -649,7 +645,7 @@ user_content (FILE *in, char *buf, CT *ctp, const char *infilename) { int extrnal, vrsn; char *cp, **ap; - char buffer[BUFSIZ]; + char buffer[NMH_BUFSIZ]; struct multipart *m; struct part **pp; struct stat st; @@ -1772,7 +1768,7 @@ skip_headers: */ if (checksw) { np = mh_xstrdup(MD5_FIELD); - vp = calculate_digest (ct, (ct->c_encoding == CE_QUOTED) ? 1 : 0); + vp = calculate_digest (ct, ct->c_encoding == CE_QUOTED); add_header (ct, np, vp); } @@ -1922,7 +1918,7 @@ calculate_digest (CT ct, int asciiP) unsigned char *ep; fprintf (stderr, "MD5 digest="); - for (ep = (dp = digest) + sizeof(digest) / sizeof(digest[0]); + for (ep = (dp = digest) + sizeof digest; dp < ep; dp++) fprintf (stderr, "%02x", *dp & 0xff); fprintf (stderr, "\n"); @@ -1930,7 +1926,7 @@ calculate_digest (CT ct, int asciiP) /* encode the digest using base64 */ for (dp = digest, op = (char *) outbuf, - cc = sizeof(digest) / sizeof(digest[0]); + cc = sizeof digest; cc > 0; cc -= 3, op += 4) { unsigned long bits; char *bp; @@ -2066,7 +2062,7 @@ set_disposition (CT ct) { "continuing...", invo_name, ct->c_ctinfo.ci_type, ct->c_ctinfo.ci_subtype ? "/" : "", - ct->c_ctinfo.ci_subtype ? ct->c_ctinfo.ci_subtype : "", + FENDNULL(ct->c_ctinfo.ci_subtype), cp); } @@ -2209,7 +2205,6 @@ expand_pseudoheader (CT ct, CT *text_plain_ct, struct multipart *m, struct str2init *s2i; CT reply_ct; struct part *part; - int eightbit = 0; int status; type_p = getcpy (type); @@ -2224,15 +2219,13 @@ expand_pseudoheader (CT ct, CT *text_plain_ct, struct multipart *m, free (type_p); if (! (convert)) { - /* No mhbuild-convert- entry in mhn.defaults or profile - for type. */ + /* No mhbuild-convert- entry in mhn.defaults or profile for type. */ return; } /* reply_file is used to pass the output of the convert. */ reply_file = getcpy (m_mktemp2 (NULL, invo_name, NULL, NULL)); convert_command = - concat (convert, " ", argstring ? argstring : "", " >", reply_file, - NULL); + concat (convert, " ", FENDNULL(argstring), " >", reply_file, NULL); /* Convert here . . . */ ct->c_storeproc = mh_xstrdup(convert_command); @@ -2255,19 +2248,6 @@ expand_pseudoheader (CT ct, CT *text_plain_ct, struct multipart *m, return; } - /* For text content only, see if it is 8-bit text. */ - if (reply_ct->c_type == CT_TEXT) { - int fd; - - if ((fd = open (reply_file, O_RDONLY)) == NOTOK || - scan_input (fd, &eightbit) == NOTOK) { - free (reply_file); - inform("failed to read %s, continuing...", reply_file); - return; - } - (void) close (fd); - } - /* This sets reply_ct->c_ctparams, and reply_ct->c_termproc if the charset can't be handled natively. */ for (s2i = str2cts; s2i->si_key; s2i++) { @@ -2280,45 +2260,22 @@ expand_pseudoheader (CT ct, CT *text_plain_ct, struct multipart *m, (*reply_ct->c_ctinitfnx)(reply_ct); } - if ((cp = - get_param (reply_ct->c_ctinfo.ci_first_pm, "charset", '?', 1))) { + if ((cp = get_param (reply_ct->c_ctinfo.ci_first_pm, "charset", '?', 1))) { /* The reply Content-Type had the charset. */ charset = cp; } else { set_charset (reply_ct, -1); charset = get_param (reply_ct->c_ctinfo.ci_first_pm, "charset", '?', 1); - if (reply_ct->c_reqencoding == CE_UNKNOWN && - reply_ct->c_type == CT_TEXT) { - /* Assume that 8bit is sufficient (for text). In other words, - don't allow it to be encoded as quoted printable if lines - are too long. This also sidesteps the check for whether - it needs to be encoded as binary; instead, it relies on - the applicable mhbuild-convert-text directive to ensure - that the resultant text is not binary. */ - reply_ct->c_reqencoding = eightbit ? CE_8BIT : CE_7BIT; - } } /* Concatenate text/plain parts. */ - if (reply_ct->c_type == CT_TEXT && - reply_ct->c_subtype == TEXT_PLAIN) { + if (reply_ct->c_type == CT_TEXT && reply_ct->c_subtype == TEXT_PLAIN) { if (! *text_plain_ct && m->mp_parts && m->mp_parts->mp_part && m->mp_parts->mp_part->c_type == CT_TEXT && m->mp_parts->mp_part->c_subtype == TEXT_PLAIN) { *text_plain_ct = m->mp_parts->mp_part; - /* Make sure that the charset is set in the text/plain - part. */ + /* Make sure that the charset is set in the text/plain part. */ set_charset (*text_plain_ct, -1); - if ((*text_plain_ct)->c_reqencoding == CE_UNKNOWN) { - /* Assume that 8bit is sufficient (for text). In other words, - don't allow it to be encoded as quoted printable if lines - are too long. This also sidesteps the check for whether - it needs to be encoded as binary; instead, it relies on - the applicable mhbuild-convert-text directive to ensure - that the resultant text is not binary. */ - (*text_plain_ct)->c_reqencoding = - eightbit ? CE_8BIT : CE_7BIT; - } } if (*text_plain_ct) {