X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/92c3b05ef3e582d64b3cecfc261fdd66ef13a4ef..9291a5f82480f2458e04cb9ea7e6749bc952b308:/uip/mhparse.c diff --git a/uip/mhparse.c b/uip/mhparse.c index 1dc44e7a..9b72d91f 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -5,16 +5,26 @@ * complete copyright information. */ -#include +#include "h/mh.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 "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 +371,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 +1092,7 @@ InitText (CT ct) static int InitMultiPart (CT ct) { - int inout; + bool inout; long last, pos; char *cp, *dp; PM pm; @@ -1175,7 +1185,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 +1212,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 +1387,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 +1522,7 @@ invalid_param: adios ("failed", "fread"); case OK: - adios (NULL, "unexpected EOF from fread"); + die("unexpected EOF from fread"); default: bp += cc, size -= cc; @@ -1714,11 +1725,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; @@ -1745,7 +1756,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 +1792,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 +1801,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 +1813,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 +1822,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 +1940,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 +1978,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 +1987,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,23 +1999,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) { @@ -2103,7 +2113,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"); @@ -2151,7 +2161,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; @@ -2184,7 +2195,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 { @@ -2193,7 +2204,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); @@ -2242,14 +2253,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); @@ -2440,7 +2451,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]; @@ -2525,14 +2538,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; } } @@ -2543,7 +2556,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); @@ -2583,7 +2596,7 @@ openFTP (CT ct, char **file) execvp (ftp, vec); fprintf (stderr, "unable to exec "); perror (ftp); - _exit (-1); + _exit(1); /* NOTREACHED */ default: @@ -2716,7 +2729,7 @@ openMail (CT ct, char **file) execvp (mailproc, vec); fprintf (stderr, "unable to exec "); perror (mailproc); - _exit (-1); + _exit(1); /* NOTREACHED */ default: @@ -2728,7 +2741,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); @@ -2772,7 +2785,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; @@ -2801,14 +2816,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; } } @@ -2819,7 +2834,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); @@ -2844,7 +2859,7 @@ openURL (CT ct, char **file) execvp(program, args.msgs); fprintf(stderr, "Unable to exec "); perror(program); - _exit(-1); + _exit(1); /* NOTREACHED */ default: @@ -2939,7 +2954,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; @@ -2984,11 +2999,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; } } @@ -3042,7 +3057,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"; @@ -3067,7 +3083,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) { @@ -3122,7 +3139,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) { @@ -3139,7 +3157,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) { @@ -3179,7 +3198,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) { @@ -3192,7 +3212,8 @@ get_ct_init (int type) { } const char * -ce_str (int encoding) { +ce_str (int encoding) +{ switch (encoding) { case CE_BASE64: return "base64"; @@ -3215,7 +3236,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) { @@ -3269,7 +3291,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)) @@ -3319,11 +3343,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; @@ -3635,7 +3659,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); @@ -3870,7 +3895,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) @@ -4124,7 +4149,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);