X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/485fa064f8388272fe00ebfd29e4babf6dfed019..b22bcbc2adddca14cc1889b1eee37643e0b88489:/uip/mhparse.c?ds=sidebyside diff --git a/uip/mhparse.c b/uip/mhparse.c index 76dd7f71..c1eec406 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -5,20 +5,36 @@ * complete copyright information. */ -#include +#include "h/mh.h" +#include "sbr/m_gmprot.h" +#include "sbr/m_getfld.h" +#include "sbr/read_yes_or_no_if_tty.h" +#include "sbr/concat.h" +#include "sbr/r1bindex.h" +#include "sbr/ruserpass.h" +#include "sbr/fmt_rfc2047.h" +#include "sbr/uprf.h" +#include "sbr/check_charset.h" +#include "sbr/getcpy.h" +#include "sbr/context_find.h" +#include "sbr/pidstatus.h" +#include "sbr/arglist.h" +#include "sbr/error.h" #include -#include -#include -#include -#include -#include -#include -#include -#include "../sbr/m_mktemp.h" +#include "h/md5.h" +#include "h/mts.h" +#include "h/tws.h" +#include "h/mime.h" +#include "h/mhparse.h" +#include "h/utils.h" +#include "mhmisc.h" +#include "h/mhcachesbr.h" +#include "sbr/m_mktemp.h" #include "mhfree.h" #ifdef HAVE_ICONV # include #endif /* HAVE_ICONV */ +#include "sbr/base64.h" extern int debugsw; @@ -33,19 +49,18 @@ int checksw = 0; /* check Content-MD5 field */ * 3) Suppress the warning about extraneous trailing ';' in header parameter * lists. */ -int skip_mp_cte_check; -int suppress_bogus_mp_content_warning; -int bogus_mp_content; -int suppress_extraneous_trailing_semicolon_warning; +bool skip_mp_cte_check; +bool suppress_bogus_mp_content_warning; +bool bogus_mp_content; +bool suppress_extraneous_trailing_semicolon_warning; /* * By default, suppress warning about multiple MIME-Version header fields. */ -int suppress_multiple_mime_version_warning = 1; +bool suppress_multiple_mime_version_warning = true; /* list of preferred type/subtype pairs, for -prefer */ -char *preferred_types[NPREFS], - *preferred_subtypes[NPREFS]; +mime_type_subtype mime_preference[NPREFS]; int npreferred; @@ -106,11 +121,6 @@ static struct k2v EncodingType[] = { }; -/* mhmisc.c */ -int part_ok (CT); -int type_ok (CT, int); -void content_error (char *, CT, char *, ...); - /* * static prototypes */ @@ -173,7 +183,7 @@ struct str2init str2ces[] = { /* * NOTE WELL: si_key MUST NOT have value of NOTOK * - * si_key is 1 if access method is anonymous. + * si_val is 1 if access method is anonymous. */ struct str2init str2methods[] = { { "afs", 1, InitFile }, @@ -202,7 +212,7 @@ parse_mime (char *file) size_t n; struct stat statbuf; - bogus_mp_content = 0; + bogus_mp_content = false; /* * Check if file is actually standard input @@ -295,22 +305,23 @@ get_content (FILE *in, char *file, int toplevel) char *np, *vp; CT ct; HF hp; - m_getfld_state_t gstate = 0; + m_getfld_state_t gstate; /* allocate the content structure */ NEW0(ct); ct->c_fp = in; - ct->c_file = add (file, NULL); + ct->c_file = mh_xstrdup(FENDNULL(file)); ct->c_begin = ftell (ct->c_fp) + 1; /* * Parse the header fields for this * content into a linked list. */ - m_getfld_track_filepos (&gstate, in); + gstate = m_getfld_state_init(in); + m_getfld_track_filepos2(&gstate); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) { + switch (state = m_getfld2(&gstate, name, buf, &bufsz)) { case FLD: case FLDPLUS: compnum++; @@ -322,7 +333,7 @@ get_content (FILE *in, char *file, int toplevel) /* if necessary, get rest of field */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (&gstate, name, buf, &bufsz, in); + state = m_getfld2(&gstate, name, buf, &bufsz); vp = add (buf, vp); /* add to previous value */ } @@ -364,10 +375,10 @@ get_content (FILE *in, char *file, int toplevel) case LENERR: case FMTERR: - adios (NULL, "message format error in component #%d", compnum); + die("message format error in component #%d", compnum); default: - adios (NULL, "getfld() returned %d", state); + die("getfld() returned %d", state); } /* break out of the loop */ @@ -390,7 +401,7 @@ get_content (FILE *in, char *file, int toplevel) char c, *cp, *dp; char *vrsn; - vrsn = add (hp->value, NULL); + vrsn = mh_xstrdup(FENDNULL(hp->value)); /* Now, cleanup this field */ cp = vrsn; @@ -473,7 +484,7 @@ get_content (FILE *in, char *file, int toplevel) } /* get copy of this field */ - ct->c_celine = cp = add (hp->value, NULL); + ct->c_celine = cp = mh_xstrdup(FENDNULL(hp->value)); while (isspace ((unsigned char) *cp)) cp++; @@ -511,7 +522,7 @@ get_content (FILE *in, char *file, int toplevel) goto next_header; } - ep = cp = add (hp->value, NULL); /* get a copy */ + ep = cp = mh_xstrdup(FENDNULL(hp->value)); /* get a copy */ while (isspace ((unsigned char) *cp)) cp++; @@ -641,7 +652,7 @@ get_ctinfo (char *cp, CT ct, int magic) ci = &ct->c_ctinfo; /* store copy of Content-Type line */ - cp = ct->c_ctline = add (cp, NULL); + cp = ct->c_ctline = mh_xstrdup(FENDNULL(cp)); while (isspace ((unsigned char) *cp)) /* trim leading spaces */ cp++; @@ -732,7 +743,7 @@ magic_skip: * Get any given in buffer */ if (magic && *cp == '<') { - mh_xfree(ct->c_id); + free(ct->c_id); ct->c_id = NULL; if (!(dp = strchr(ct->c_id = ++cp, '>'))) { inform("invalid ID in message %s", ct->c_file); @@ -890,7 +901,7 @@ get_dispo (char *cp, CT ct, int buildflag) * time. */ - dispoheader = cp = add(cp, NULL); + dispoheader = cp = mh_xstrdup(FENDNULL(cp)); while (isspace ((unsigned char) *cp)) /* trim leading spaces */ cp++; @@ -1085,7 +1096,7 @@ InitText (CT ct) static int InitMultiPart (CT ct) { - int inout; + bool inout; long last, pos; char *cp, *dp; PM pm; @@ -1111,7 +1122,7 @@ InitMultiPart (CT ct) bp = cte + strlen (cte) - 1; while (bp >= cte && isspace ((unsigned char) *bp)) *bp-- = '\0'; - for (bp = cte; *bp && isblank ((unsigned char) *bp); ++bp) continue; + for (bp = cte; isblank((unsigned char)*bp); ++bp) continue; inform("\"%s/%s\" type in message %s must be encoded in\n" "7bit, 8bit, or binary, per RFC 2045 (6.4). " @@ -1178,7 +1189,7 @@ InitMultiPart (CT ct) last = ct->c_end; next = &m->mp_parts; part = NULL; - inout = 1; + inout = true; while ((gotlen = getline(&bufp, &buflen, fp)) != -1) { if (pos > last) @@ -1205,10 +1216,10 @@ next_part: part->mp_part = p; pos = p->c_begin; fseek (fp, pos, SEEK_SET); - inout = 0; + inout = false; } else { if (strcmp (bufp + 2, m->mp_start) == 0) { - inout = 1; + inout = true; end_part: p = part->mp_part; p->c_end = ftell(fp) - (gotlen + 1); @@ -1226,7 +1237,7 @@ end_part: if (! suppress_bogus_mp_content_warning) { inform("bogus multipart content in message %s", ct->c_file); } - bogus_mp_content = 1; + bogus_mp_content = true; if (!inout && part) { p = part->mp_part; @@ -1319,7 +1330,7 @@ reverse_parts (CT ct) } static void -move_preferred_part (CT ct, char *type, char *subtype) +move_preferred_part(CT ct, mime_type_subtype *pref) { struct multipart *m = (struct multipart *) ct->c_ctparams; struct part *part, *prev, *head, *nhead, *ntail; @@ -1343,8 +1354,9 @@ move_preferred_part (CT ct, char *type, char *subtype) part = head->mp_next; while (part != NULL) { ci = &part->mp_part->c_ctinfo; - if (!strcasecmp(ci->ci_type, type) && - (!subtype || !strcasecmp(ci->ci_subtype, subtype))) { + if (!strcasecmp(ci->ci_type, pref->type) && + (!pref->subtype || + !strcasecmp(ci->ci_subtype, pref->subtype))) { prev->mp_next = part->mp_next; part->mp_next = NULL; ntail->mp_next = part; @@ -1357,7 +1369,6 @@ move_preferred_part (CT ct, char *type, char *subtype) } ntail->mp_next = head->mp_next; m->mp_parts = nhead->mp_next; - } /* @@ -1369,8 +1380,8 @@ static void prefer_parts(CT ct) { int i; - for (i = npreferred-1; i >= 0; i--) - move_preferred_part(ct, preferred_types[i], preferred_subtypes[i]); + for (i = 0; i < npreferred; i++) + move_preferred_part(ct, mime_preference + i); } @@ -1380,7 +1391,8 @@ prefer_parts(CT ct) example, a text/plain part before a text/html part in a multipart/alternative part, for example, where it belongs. */ void -reverse_alternative_parts (CT ct) { +reverse_alternative_parts (CT ct) +{ if (ct->c_type == CT_MULTIPART) { struct multipart *m = (struct multipart *) ct->c_ctparams; struct part *part; @@ -1435,7 +1447,7 @@ InitMessage (CT ct) /* scan for parameters "id", "number", and "total" */ for (pm = ci->ci_first_pm; pm; pm = pm->pm_next) { if (!strcasecmp (pm->pm_name, "id")) { - p->pm_partid = add (pm->pm_value, NULL); + p->pm_partid = mh_xstrdup(FENDNULL(pm->pm_value)); continue; } if (!strcasecmp (pm->pm_name, "number")) { @@ -1514,7 +1526,7 @@ invalid_param: adios ("failed", "fread"); case OK: - adios (NULL, "unexpected EOF from fread"); + die("unexpected EOF from fread"); default: bp += cc, size -= cc; @@ -1717,11 +1729,11 @@ size_encoding (CT ct) } if (ct->c_encoding == CE_EXTERNAL) - return (ct->c_end - ct->c_begin); + return ct->c_end - ct->c_begin; file = NULL; if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK) - return (ct->c_end - ct->c_begin); + return ct->c_end - ct->c_begin; if (fstat (fd, &st) != NOTOK) size = (long) st.st_size; @@ -1748,7 +1760,8 @@ static int openBase64 (CT ct, char **file) { ssize_t cc, len; - int fd, own_ct_fp = 0; + int fd; + bool own_ct_fp = false; char *cp, *buffer = NULL; /* sbeck -- handle suffixes */ CI ci; @@ -1783,7 +1796,7 @@ openBase64 (CT ct, char **file) if (ce->ce_unlink) { /* Create temporary file with filename extension. */ if ((ce->ce_file = m_mktemps(invo_name, cp, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } } else { @@ -1792,7 +1805,7 @@ openBase64 (CT ct, char **file) } else if (*file == NULL) { char *tempfile; if ((tempfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } ce->ce_file = mh_xstrdup(tempfile); @@ -1804,7 +1817,7 @@ openBase64 (CT ct, char **file) } if ((len = ct->c_end - ct->c_begin) < 0) - adios (NULL, "internal error(1)"); + die("internal error(1)"); buffer = mh_xmalloc (len + 1); @@ -1813,7 +1826,7 @@ openBase64 (CT ct, char **file) content_error (ct->c_file, ct, "unable to open for reading"); return NOTOK; } - own_ct_fp = 1; + own_ct_fp = true; } lseek (fd = fileno (ct->c_fp), (off_t) ct->c_begin, SEEK_SET); @@ -1840,7 +1853,10 @@ openBase64 (CT ct, char **file) *cp = '\0'; if (decodeBase64 (buffer, &decoded, &decoded_len, ct->c_type == CT_TEXT, - ct->c_digested ? digest : NULL) == OK) { + ct->c_digested ? digest : NULL) != OK) + goto clean_up; + + { size_t i; unsigned char *decoded_p = decoded; for (i = 0; i < decoded_len; ++i) { @@ -1863,8 +1879,6 @@ openBase64 (CT ct, char **file) } } } - } else { - goto clean_up; } fseek (ct->c_fp, 0L, SEEK_SET); @@ -1930,7 +1944,8 @@ InitQuoted (CT ct) static int openQuoted (CT ct, char **file) { - int cc, digested, len, quoted, own_ct_fp = 0; + int cc, digested, len, quoted; + bool own_ct_fp = false; char *cp, *ep; char *bufp = NULL; size_t buflen; @@ -1967,7 +1982,7 @@ openQuoted (CT ct, char **file) if (ce->ce_unlink) { /* Create temporary file with filename extension. */ if ((ce->ce_file = m_mktemps(invo_name, cp, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } } else { @@ -1976,7 +1991,7 @@ openQuoted (CT ct, char **file) } else if (*file == NULL) { char *tempfile; if ((tempfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } ce->ce_file = mh_xstrdup(tempfile); @@ -1988,23 +2003,20 @@ openQuoted (CT ct, char **file) } if ((len = ct->c_end - ct->c_begin) < 0) - adios (NULL, "internal error(2)"); + die("internal error(2)"); if (! ct->c_fp) { if ((ct->c_fp = fopen (ct->c_file, "r")) == NULL) { content_error (ct->c_file, ct, "unable to open for reading"); return NOTOK; } - own_ct_fp = 1; + own_ct_fp = true; } if ((digested = ct->c_digested)) MD5Init (&mdContext); quoted = 0; -#ifdef lint - mask = 0; -#endif fseek (ct->c_fp, ct->c_begin, SEEK_SET); while (len > 0) { @@ -2105,13 +2117,12 @@ openQuoted (CT ct, char **file) unsigned char digest[16]; MD5Final (digest, &mdContext); - if (memcmp((char *) digest, (char *) ct->c_digest, + if (memcmp(digest, ct->c_digest, sizeof digest)) content_error (NULL, ct, "content integrity suspect (digest mismatch) -- continuing"); - else - if (debugsw) - fprintf (stderr, "content integrity confirmed\n"); + else if (debugsw) + fprintf (stderr, "content integrity confirmed\n"); } fseek (ce->ce_fp, 0L, SEEK_SET); @@ -2154,7 +2165,8 @@ Init7Bit (CT ct) int open7Bit (CT ct, char **file) { - int cc, fd, len, own_ct_fp = 0; + int cc, fd, len; + bool own_ct_fp = false; char buffer[BUFSIZ]; /* sbeck -- handle suffixes */ char *cp; @@ -2187,7 +2199,7 @@ open7Bit (CT ct, char **file) if (ce->ce_unlink) { /* Create temporary file with filename extension. */ if ((ce->ce_file = m_mktemps(invo_name, cp, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } } else { @@ -2196,7 +2208,7 @@ open7Bit (CT ct, char **file) } else if (*file == NULL) { char *tempfile; if ((tempfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } ce->ce_file = mh_xstrdup(tempfile); @@ -2213,7 +2225,7 @@ open7Bit (CT ct, char **file) len = 0; fprintf (ce->ce_fp, "%s: %s/%s", TYPE_FIELD, ci->ci_type, ci->ci_subtype); - len += strlen (TYPE_FIELD) + 2 + strlen (ci->ci_type) + len += LEN(TYPE_FIELD) + 2 + strlen (ci->ci_type) + 1 + strlen (ci->ci_subtype); buffer = output_params(len, ci->ci_first_pm, &len, 0); @@ -2245,14 +2257,14 @@ open7Bit (CT ct, char **file) } if ((len = ct->c_end - ct->c_begin) < 0) - adios (NULL, "internal error(3)"); + die("internal error(3)"); if (! ct->c_fp) { if ((ct->c_fp = fopen (ct->c_file, "r")) == NULL) { content_error (ct->c_file, ct, "unable to open for reading"); return NOTOK; } - own_ct_fp = 1; + own_ct_fp = true; } lseek (fd = fileno (ct->c_fp), (off_t) ct->c_begin, SEEK_SET); @@ -2329,7 +2341,7 @@ openExternal (CT ct, CT cb, CE ce, char **file, int *fd) goto ready_already; } - if (find_cache (ct, rcachesw, (int *) 0, cb->c_id, + if (find_cache(ct, rcachesw, NULL, cb->c_id, cachefile, sizeof(cachefile)) != NOTOK) { if ((ce->ce_fp = fopen (cachefile, "r"))) { ce->ce_file = mh_xstrdup(cachefile); @@ -2339,7 +2351,7 @@ openExternal (CT ct, CT cb, CE ce, char **file, int *fd) admonish (cachefile, "unable to fopen for reading"); } - *fd = fileno (ce->ce_fp); + *fd = ce->ce_fp ? fileno (ce->ce_fp) : -1; return OK; ready_already: @@ -2415,12 +2427,10 @@ openFile (CT ct, char **file) if (ferror (gp)) { admonish (ce->ce_file, "error reading"); (void) m_unlink (cachefile); - } - else - if (ferror (fp)) { - admonish (cachefile, "error writing"); - (void) m_unlink (cachefile); - } + } else if (ferror (fp)) { + admonish (cachefile, "error writing"); + (void) m_unlink (cachefile); + } fclose (fp); } umask (mask); @@ -2445,7 +2455,9 @@ InitFTP (CT ct) static int openFTP (CT ct, char **file) { - int cachetype, caching, fd; + int cachetype; + bool caching; + int fd; int len, buflen; char *bp, *ftp, *user, *pass; char buffer[BUFSIZ], cachefile[BUFSIZ]; @@ -2530,14 +2542,14 @@ openFTP (CT ct, char **file) } ce->ce_unlink = (*file == NULL); - caching = 0; + caching = false; cachefile[0] = '\0'; if ((!e->eb_permission || strcasecmp (e->eb_permission, "read-write")) && find_cache (NULL, wcachesw, &cachetype, e->eb_content->c_id, cachefile, sizeof(cachefile)) != NOTOK) { if (*file == NULL) { ce->ce_unlink = 0; - caching = 1; + caching = true; } } @@ -2548,7 +2560,7 @@ openFTP (CT ct, char **file) else { char *tempfile; if ((tempfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } ce->ce_file = mh_xstrdup(tempfile); @@ -2560,7 +2572,7 @@ openFTP (CT ct, char **file) } { - int child_id, i, vecp; + int child_id, vecp; char *vec[9]; vecp = 0; @@ -2577,8 +2589,7 @@ openFTP (CT ct, char **file) fflush (stdout); - for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) - sleep (5); + child_id = fork(); switch (child_id) { case NOTOK: adios ("fork", "unable to"); @@ -2589,7 +2600,7 @@ openFTP (CT ct, char **file) execvp (ftp, vec); fprintf (stderr, "unable to exec "); perror (ftp); - _exit (-1); + _exit(1); /* NOTREACHED */ default: @@ -2626,12 +2637,10 @@ openFTP (CT ct, char **file) if (ferror (gp)) { admonish (ce->ce_file, "error reading"); (void) m_unlink (cachefile); - } - else - if (ferror (fp)) { - admonish (cachefile, "error writing"); - (void) m_unlink (cachefile); - } + } else if (ferror (fp)) { + admonish (cachefile, "error writing"); + (void) m_unlink (cachefile); + } fclose (fp); } umask (mask); @@ -2658,7 +2667,7 @@ InitMail (CT ct) static int openMail (CT ct, char **file) { - int child_id, fd, i, vecp; + int child_id, fd, vecp; int len, buflen; char *bp, buffer[BUFSIZ], *vec[7]; struct exbody *e = ct->c_ctexbody; @@ -2714,8 +2723,7 @@ openMail (CT ct, char **file) vec[vecp++] = e->eb_body; vec[vecp] = NULL; - for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) - sleep (5); + child_id = fork(); switch (child_id) { case NOTOK: advise ("fork", "unable to"); @@ -2725,7 +2733,7 @@ openMail (CT ct, char **file) execvp (mailproc, vec); fprintf (stderr, "unable to exec "); perror (mailproc); - _exit (-1); + _exit(1); /* NOTREACHED */ default: @@ -2737,7 +2745,7 @@ openMail (CT ct, char **file) if (*file == NULL) { char *tempfile; if ((tempfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } ce->ce_file = mh_xstrdup(tempfile); @@ -2754,7 +2762,7 @@ openMail (CT ct, char **file) /* showproc is for mhshow and mhstore, though mhlist -debug * prints it, too. */ - mh_xfree(ct->c_showproc); + free(ct->c_showproc); ct->c_showproc = mh_xstrdup("true"); fseek (ce->ce_fp, 0L, SEEK_SET); @@ -2781,7 +2789,9 @@ openURL (CT ct, char **file) CE ce = &ct->c_cefile; char *urlprog, *program; char buffer[BUFSIZ], cachefile[BUFSIZ]; - int fd, caching, cachetype; + int fd; + bool caching; + int cachetype; struct msgs_array args = { 0, 0, NULL}; pid_t child_id; @@ -2810,14 +2820,14 @@ openURL (CT ct, char **file) } ce->ce_unlink = (*file == NULL); - caching = 0; + caching = false; cachefile[0] = '\0'; if (find_cache(NULL, wcachesw, &cachetype, e->eb_content->c_id, cachefile, sizeof(cachefile)) != NOTOK) { if (*file == NULL) { ce->ce_unlink = 0; - caching = 1; + caching = true; } } @@ -2828,7 +2838,7 @@ openURL (CT ct, char **file) else { char *tempfile; if ((tempfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { - adios(NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } ce->ce_file = mh_xstrdup(tempfile); @@ -2853,7 +2863,7 @@ openURL (CT ct, char **file) execvp(program, args.msgs); fprintf(stderr, "Unable to exec "); perror(program); - _exit(-1); + _exit(1); /* NOTREACHED */ default: @@ -2896,7 +2906,7 @@ openURL (CT ct, char **file) fseeko(ce->ce_fp, 0, SEEK_SET); *file = ce->ce_file; - return fd; + return fileno(ce->ce_fp); } @@ -2948,7 +2958,7 @@ get_leftover_mp_content (CT ct, int before /* or after */) { struct multipart *m = (struct multipart *) ct->c_ctparams; char *boundary; - int found_boundary = 0; + bool found_boundary = false; int max = BUFSIZ; char *bufp = NULL; size_t buflen; @@ -2993,11 +3003,11 @@ get_leftover_mp_content (CT ct, int before /* or after */) if (before) { if (! strcmp (bufp, boundary)) { - found_boundary = 1; + found_boundary = true; } } else { if (! found_boundary && ! strcmp (bufp, boundary)) { - found_boundary = 1; + found_boundary = true; continue; } } @@ -3051,7 +3061,8 @@ get_leftover_mp_content (CT ct, int before /* or after */) char * -ct_type_str (int type) { +ct_type_str (int type) +{ switch (type) { case CT_APPLICATION: return "application"; @@ -3076,7 +3087,8 @@ ct_type_str (int type) { char * -ct_subtype_str (int type, int subtype) { +ct_subtype_str (int type, int subtype) +{ switch (type) { case CT_APPLICATION: switch (subtype) { @@ -3131,7 +3143,8 @@ ct_subtype_str (int type, int subtype) { int -ct_str_type (const char *type) { +ct_str_type (const char *type) +{ struct str2init *s2i; for (s2i = str2cts; s2i->si_key; ++s2i) { @@ -3148,7 +3161,8 @@ ct_str_type (const char *type) { int -ct_str_subtype (int type, const char *subtype) { +ct_str_subtype (int type, const char *subtype) +{ struct k2v *kv; switch (type) { @@ -3188,7 +3202,8 @@ ct_str_subtype (int type, const char *subtype) { /* Find the content type and InitFunc for the CT. */ const struct str2init * -get_ct_init (int type) { +get_ct_init (int type) +{ const struct str2init *sp; for (sp = str2cts; sp->si_key; ++sp) { @@ -3201,7 +3216,8 @@ get_ct_init (int type) { } const char * -ce_str (int encoding) { +ce_str (int encoding) +{ switch (encoding) { case CE_BASE64: return "base64"; @@ -3224,7 +3240,8 @@ ce_str (int encoding) { /* Find the content type and InitFunc for the content encoding method. */ const struct str2init * -get_ce_method (const char *method) { +get_ce_method (const char *method) +{ struct str2init *sp; for (sp = str2ces; sp->si_key; ++sp) { @@ -3278,7 +3295,9 @@ parse_header_attrs (const char *filename, const char *fieldname, while (*cp == ';') { char *dp, *vp, *up, *nameptr, *valptr, *charset = NULL, *lang = NULL; - int encoded = 0, partial = 0, len = 0, index = 0; + bool encoded = false; + bool partial = false; + int len = 0, index = 0; cp++; while (isspace ((unsigned char) *cp)) @@ -3328,11 +3347,11 @@ parse_header_attrs (const char *filename, const char *fieldname, for (vp = cp; vp < up; vp++) { if (*vp == '*' && vp < up - 1) { - partial = 1; + partial = true; continue; } if (*vp == '*' && vp == up - 1) { - encoded = 1; + encoded = true; } else if (partial) { if (isdigit((unsigned char) *vp)) index = *vp - '0' + index * 10; @@ -3405,7 +3424,7 @@ parse_header_attrs (const char *filename, const char *fieldname, inform("missing language tag in message %s's %s: field\n" " (parameter %s)", filename, fieldname, nameptr); free(nameptr); - mh_xfree(charset); + free(charset); return NOTOK; } @@ -3428,8 +3447,8 @@ parse_header_attrs (const char *filename, const char *fieldname, inform("invalid encoded sequence in message %s's %s: field\n" " (parameter %s)", filename, fieldname, nameptr); free(nameptr); - mh_xfree(charset); - mh_xfree(lang); + free(charset); + free(lang); return NOTOK; } vp += 2; @@ -3469,8 +3488,8 @@ bad_quote: inform("invalid quoted-string in message %s's %s: field\n" " (parameter %s)", filename, fieldname, nameptr); free(nameptr); - mh_xfree(charset); - mh_xfree(lang); + free(charset); + free(lang); return NOTOK; case '"': break; @@ -3577,9 +3596,9 @@ bad_quote: */ if (index == 0 && encoded) { - mh_xfree(pp->charset); + free(pp->charset); pp->charset = charset; - mh_xfree(pp->lang); + free(pp->lang); pp->lang = lang; } } else { @@ -3644,7 +3663,8 @@ bad_quote: */ char * -content_charset (CT ct) { +content_charset (CT ct) +{ char *ret_charset = NULL; ret_charset = get_param(ct->c_ctinfo.ci_first_pm, "charset", '?', 0); @@ -3678,7 +3698,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external) if (strlen(params->pm_name) > CPERLIN) { inform("Parameter name \"%s\" is too long", params->pm_name); - mh_xfree(paramout); + free(paramout); return NULL; } @@ -3715,7 +3735,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external) numchars, valoff); if (i == 0) { - mh_xfree(paramout); + free(paramout); return NULL; } @@ -3778,7 +3798,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external) strlen(params->pm_value + valoff), valoff); if (i == 0) { - mh_xfree(paramout); + free(paramout); return NULL; } @@ -3879,7 +3899,7 @@ param_len(PM pm, int index, size_t valueoff, int *encode, int *cont, if (! pm->pm_charset) { pm->pm_charset = mh_xstrdup(write_charset_8bit()); if (strcasecmp(pm->pm_charset, "US-ASCII") == 0) - adios(NULL, "8-bit characters in parameter \"%s\", but " + die("8-bit characters in parameter \"%s\", but " "local character set is US-ASCII", pm->pm_name); } if (! pm->pm_lang) @@ -4133,7 +4153,8 @@ get_param(PM first, const char *name, char replace, int fetchonly) * necessary */ -char *get_param_value(PM pm, char replace) +char * +get_param_value(PM pm, char replace) { static char buffer[4096]; /* I hope no parameters are larger */ size_t bufsize = sizeof(buffer);