X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d1ab2a841c12403193ea057e55326be22b766b08..af32d40a8ca0b341c082066b2f1e3e83005c1a89:/uip/mhparse.c diff --git a/uip/mhparse.c b/uip/mhparse.c index efa88480..9b8eb973 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -5,16 +5,20 @@ * complete copyright information. */ -#include +#include "h/mh.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 "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 +#include "h/mhcachesbr.h" #include "sbr/m_mktemp.h" #include "mhfree.h" #ifdef HAVE_ICONV @@ -361,10 +365,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 */ @@ -1082,7 +1086,7 @@ InitText (CT ct) static int InitMultiPart (CT ct) { - int inout; + bool inout; long last, pos; char *cp, *dp; PM pm; @@ -1175,7 +1179,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) @@ -1202,10 +1206,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); @@ -1377,7 +1381,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; @@ -1511,7 +1516,7 @@ invalid_param: adios ("failed", "fread"); case OK: - adios (NULL, "unexpected EOF from fread"); + die("unexpected EOF from fread"); default: bp += cc, size -= cc; @@ -1745,7 +1750,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; @@ -1780,7 +1786,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 { @@ -1789,7 +1795,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); @@ -1801,7 +1807,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); @@ -1810,7 +1816,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); @@ -1928,7 +1934,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; @@ -1965,7 +1972,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 { @@ -1974,7 +1981,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); @@ -1986,14 +1993,14 @@ 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)) @@ -2100,7 +2107,7 @@ 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"); @@ -2148,7 +2155,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; @@ -2181,7 +2189,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 { @@ -2190,7 +2198,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); @@ -2239,14 +2247,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); @@ -2437,7 +2445,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]; @@ -2522,14 +2532,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; } } @@ -2540,7 +2550,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); @@ -2725,7 +2735,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); @@ -2769,7 +2779,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; @@ -2798,14 +2810,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; } } @@ -2816,7 +2828,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); @@ -2936,7 +2948,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; @@ -2981,11 +2993,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; } } @@ -3039,7 +3051,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"; @@ -3064,7 +3077,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) { @@ -3119,7 +3133,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) { @@ -3136,7 +3151,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) { @@ -3176,7 +3192,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) { @@ -3189,7 +3206,8 @@ get_ct_init (int type) { } const char * -ce_str (int encoding) { +ce_str (int encoding) +{ switch (encoding) { case CE_BASE64: return "base64"; @@ -3212,7 +3230,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) { @@ -3266,7 +3285,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)) @@ -3316,11 +3337,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; @@ -3632,7 +3653,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); @@ -3867,7 +3889,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) @@ -4121,7 +4143,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);