X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/92c3b05ef3e582d64b3cecfc261fdd66ef13a4ef..4fb142af4ad2ca73d141cc04af24e7c1b62f8a77:/uip/mhbuildsbr.c?ds=sidebyside diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index fdf59929..b8b28f24 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -21,6 +21,7 @@ #include #include #include +#include "h/done.h" #include #include "h/mhcachesbr.h" #include "mhmisc.h" @@ -38,9 +39,9 @@ extern int debugsw; -extern int listsw; -extern int rfc934sw; -extern int contentidsw; +extern bool listsw; +extern bool rfc934sw; +extern bool contentidsw; static char prefix[] = "----- =_aaaaaaaaaa"; @@ -176,7 +177,7 @@ build_mime (char *infile, int autobuild, int dist, int directives, free (ct); return NULL; } - adios (NULL, "draft shouldn't contain %s: field", name); + die("draft shouldn't contain %s: field", name); } /* ignore any Content-Type fields in the header */ @@ -258,7 +259,7 @@ build_mime (char *infile, int autobuild, int dist, int directives, if (convert) { if (convert->filename && strcasecmp (convert->filename, filename)) { - adios (NULL, "Multiple %s headers with different files" + die("Multiple %s headers with different files" " not allowed", type); } else { convert->filename = mh_xstrdup(filename); @@ -298,7 +299,7 @@ build_mime (char *infile, int autobuild, int dist, int directives, if (convert) { if (convert->argstring && strcasecmp (convert->argstring, argstring)) { - adios (NULL, "Multiple %s headers with different " + die("Multiple %s headers with different " "argstrings not allowed", type); } else { convert->argstring = mh_xstrdup(argstring); @@ -334,10 +335,10 @@ finish_field: 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; } @@ -351,7 +352,7 @@ finish_field: for (hp = ct->c_first_hf; hp != NULL; hp = hp->next) { if (encode_rfc2047(hp->name, &hp->value, header_encoding, NULL)) { - adios(NULL, "Unable to encode header \"%s\"", hp->name); + die("Unable to encode header \"%s\"", hp->name); } } } @@ -445,7 +446,7 @@ finish_field: CT *ctp; convert_list *next; - done = freects_done; + set_done(freects_done); /* In case there are multiple calls that land here, prevent leak. */ for (ctp = cts; ctp && *ctp; ++ctp) { free_content (*ctp); } @@ -454,7 +455,7 @@ finish_field: /* Extract the type part (as a CT) from filename. */ cts = mh_xcalloc(2, sizeof *cts); if (! (cts[0] = parse_mime (convert_head->filename))) { - adios (NULL, "failed to parse %s", convert_head->filename); + die("failed to parse %s", convert_head->filename); } expand_pseudoheaders (cts[0], m, infile, convert_head); @@ -542,7 +543,7 @@ finish_field: compose_content (ct, verbose); if ((cp = strchr(prefix, 'a')) == NULL) - adios (NULL, "internal error(4)"); + die("internal error(4)"); /* * If using EAI, force 8-bit charset. @@ -561,7 +562,7 @@ finish_field: (*cp)++; } else { if (*++cp == 0) - adios (NULL, "giving up trying to find a unique delimiter string"); + die("giving up trying to find a unique delimiter string"); (*cp)++; } } @@ -676,7 +677,7 @@ user_content (FILE *in, char *buf, CT *ctp, const char *infilename) */ if (!do_direct() || buf[0] != '#' || buf[1] == '#' || buf[1] == '<') { int headers; - int inlineD; + bool inlineD; long pos; char content[BUFSIZ]; FILE *out; @@ -693,10 +694,10 @@ user_content (FILE *in, char *buf, CT *ctp, const char *infilename) if (do_direct() && (buf[0] == '#' && buf[1] == '<')) { strncpy (content, buf + 2, sizeof(content)); - inlineD = 1; + inlineD = true; goto rock_and_roll; } - inlineD = 0; + inlineD = false; /* the directive is implicit */ strncpy (content, "text/plain", sizeof(content)); @@ -712,7 +713,7 @@ user_content (FILE *in, char *buf, CT *ctp, const char *infilename) again_descr: ct->c_descr = add (buffer + i + 1, ct->c_descr); if (!fgetstr (buffer, sizeof(buffer) - 1, in)) - adios (NULL, "end-of-file after %s: field in plaintext", DESCR_FIELD); + die("end-of-file after %s: field in plaintext", DESCR_FIELD); switch (buffer[0]) { case ' ': case '\t': @@ -720,7 +721,7 @@ again_descr: goto again_descr; case '#': - adios (NULL, "#-directive after %s: field in plaintext", DESCR_FIELD); + die("#-directive after %s: field in plaintext", DESCR_FIELD); /* NOTREACHED */ default: @@ -735,7 +736,7 @@ again_descr: again_dispo: ct->c_dispo = add (buffer + i + 1, ct->c_dispo); if (!fgetstr (buffer, sizeof(buffer) - 1, in)) - adios (NULL, "end-of-file after %s: field in plaintext", DISPO_FIELD); + die("end-of-file after %s: field in plaintext", DISPO_FIELD); switch (buffer[0]) { case ' ': case '\t': @@ -743,7 +744,7 @@ again_dispo: goto again_dispo; case '#': - adios (NULL, "#-directive after %s: field in plaintext", DISPO_FIELD); + die("#-directive after %s: field in plaintext", DISPO_FIELD); /* NOTREACHED */ default: @@ -795,7 +796,7 @@ rock_and_roll: } /* FALLTHRU */ case CT_MULTIPART: - adios (NULL, "it doesn't make sense to define an in-line %s content", + die("it doesn't make sense to define an in-line %s content", ct->c_type == CT_MESSAGE ? "message" : "multipart"); /* NOTREACHED */ @@ -837,24 +838,23 @@ call_init: */ if (s2i->si_key) { if (!ci->ci_subtype) - adios (NULL, "missing subtype in \"#%s\"", ci->ci_type); + die("missing subtype in \"#%s\"", ci->ci_type); switch (ct->c_type = s2i->si_val) { case CT_MULTIPART: - adios (NULL, "use \"#begin ... #end\" instead of \"#%s/%s\"", + die("use \"#begin ... #end\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); /* NOTREACHED */ case CT_MESSAGE: if (!strcasecmp (ci->ci_subtype, "partial")) - adios (NULL, "sorry, \"#%s/%s\" isn't supported", + die("sorry, \"#%s/%s\" isn't supported", ci->ci_type, ci->ci_subtype); if (!strcasecmp (ci->ci_subtype, "external-body")) - adios (NULL, "use \"#@type/subtype ... [] ...\" instead of \"#%s/%s\"", + die("use \"#@type/subtype ... [] ...\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); use_forw: - adios (NULL, - "use \"#forw [+folder] [msgs]\" instead of \"#%s/%s\"", + die( "use \"#forw [+folder] [msgs]\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); /* NOTREACHED */ @@ -872,7 +872,7 @@ use_forw: CT p; if (!ci->ci_magic) - adios (NULL, "need external information for \"#@%s/%s\"", + die("need external information for \"#@%s/%s\"", ci->ci_type, ci->ci_subtype); p = ct; @@ -914,7 +914,7 @@ use_forw: for (cp = ci->ci_magic + 1; isspace ((unsigned char) *cp); cp++) continue; if (!*cp) - adios (NULL, "empty pipe command for #%s directive", ci->ci_type); + die("empty pipe command for #%s directive", ci->ci_type); cp = mh_xstrdup(cp); free (ci->ci_magic); ci->ci_magic = cp; @@ -944,7 +944,7 @@ use_forw: } if (extrnal) - adios (NULL, "external definition not allowed for \"#%s\"", ci->ci_type); + die("external definition not allowed for \"#%s\"", ci->ci_type); /* * Message directive @@ -969,7 +969,7 @@ use_forw: cp = *ap; if (*cp == '+' || *cp == '@') { if (folder) - adios (NULL, "only one folder per #forw directive"); + die("only one folder per #forw directive"); folder = pluspath (cp); } } @@ -979,7 +979,7 @@ use_forw: folder = mh_xstrdup(getfolder(1)); if (!(mp = folder_read (folder, 0))) - adios (NULL, "unable to read folder %s", folder); + die("unable to read folder %s", folder); for (ap = arguments; *ap; ap++) { cp = *ap; if (*cp != '+' && *cp != '@') @@ -1095,7 +1095,7 @@ use_forw: if (user_content (in, buffer, &p, infilename) == DONE) { if (!m->mp_parts) - adios (NULL, "empty \"#begin ... #end\" sequence"); + die("empty \"#begin ... #end\" sequence"); return OK; } if (!p) @@ -1113,7 +1113,7 @@ use_forw: /* * Unknown directive */ - adios (NULL, "unknown directive \"#%s\"", ci->ci_type); + die("unknown directive \"#%s\"", ci->ci_type); return NOTOK; /* NOT REACHED */ } @@ -1181,13 +1181,13 @@ compose_content (CT ct, int verbose) * subparts with the rfc934 compatibility mode flag. */ if (rfc934sw && ct->c_subtype == MULTI_DIGEST) { - int is934 = 1; + bool is934 = true; for (part = m->mp_parts; part; part = part->mp_next) { CT p = part->mp_part; if (p->c_subtype != MESSAGE_RFC822) { - is934 = 0; + is934 = false; break; } } @@ -1221,7 +1221,8 @@ compose_content (CT ct, int verbose) default: if (!ce->ce_file) { pid_t child_id; - int xstdout, len, buflen; + bool xstdout; + int len, buflen; char *bp, *cp; char *vec[4], buffer[BUFSIZ]; FILE *out; @@ -1229,7 +1230,7 @@ compose_content (CT ct, int verbose) char *tfile = NULL; if (!(cp = ci->ci_magic)) - adios (NULL, "internal error(5)"); + die("internal error(5)"); if ((tfile = m_mktemp2(NULL, invo_name, NULL, NULL)) == NULL) { adios("mhbuildsbr", "unable to create temporary file in %s", @@ -1238,7 +1239,7 @@ compose_content (CT ct, int verbose) ce->ce_file = mh_xstrdup(tfile); ce->ce_unlink = 1; - xstdout = 0; + xstdout = false; /* Get buffer ready to go */ bp = buffer; @@ -1270,7 +1271,7 @@ compose_content (CT ct, int verbose) case 'F': /* %f, and stdout is not-redirected */ - xstdout = 1; + xstdout = true; /* FALLTHRU */ case 'f': @@ -1334,7 +1335,7 @@ raw: execvp ("/bin/sh", vec); fprintf (stderr, "unable to exec "); perror ("/bin/sh"); - _exit (-1); + _exit(1); /* NOTREACHED */ default: @@ -1376,12 +1377,12 @@ static int scan_content (CT ct, size_t maxunencoded) { int prefix_len; - int check8bit = 0, contains8bit = 0; /* check if contains 8bit data */ - int checknul = 0, containsnul = 0; /* check if contains NULs */ - int checklinelen = 0, linelen = 0; /* check for long lines */ - int checkllinelen = 0; /* check for extra-long lines */ - int checkboundary = 0, boundaryclash = 0; /* check if clashes with multipart boundary */ - int checklinespace = 0, linespace = 0; /* check if any line ends with space */ + bool check8bit = false, contains8bit = false; /* check if contains 8bit data */ + bool checknul = false, containsnul = false; /* check if contains NULs */ + bool checklinelen = false, linelen = false; /* check for long lines */ + bool checkllinelen = false; /* check for extra-long lines */ + bool checkboundary = false, boundaryclash = false; /* check if clashes with multipart boundary */ + bool checklinespace = false, linespace = false; /* check if any line ends with space */ char *cp = NULL; char *bufp = NULL; size_t buflen; @@ -1429,18 +1430,18 @@ scan_content (CT ct, size_t maxunencoded) if (ct->c_type == CT_TEXT) { t = (struct text *) ct->c_ctparams; if (t->tx_charset == CHARSET_UNSPECIFIED) { - checknul = 1; + checknul = true; } - check8bit = 1; + check8bit = true; } switch (ct->c_reqencoding) { case CE_8BIT: - checkllinelen = 1; - checkboundary = 1; + checkllinelen = true; + checkboundary = true; break; case CE_QUOTED: - checkboundary = 1; + checkboundary = true; break; case CE_BASE64: break; @@ -1448,34 +1449,34 @@ scan_content (CT ct, size_t maxunencoded) /* Use the default rules based on content-type */ switch (ct->c_type) { case CT_TEXT: - checkboundary = 1; - checklinelen = 1; + checkboundary = true; + checklinelen = true; if (ct->c_subtype == TEXT_PLAIN) { - checklinespace = 0; + checklinespace = false; } else { - checklinespace = 1; + checklinespace = true; } break; case CT_APPLICATION: - check8bit = 1; - checknul = 1; - checklinelen = 1; - checklinespace = 1; - checkboundary = 1; + check8bit = true; + checknul = true; + checklinelen = true; + checklinespace = true; + checkboundary = true; break; case CT_MESSAGE: - checklinelen = 0; - checklinespace = 0; + checklinelen = false; + checklinespace = false; /* don't check anything for message/external */ if (ct->c_subtype == MESSAGE_EXTERNAL) { - checkboundary = 0; - check8bit = 0; + checkboundary = false; + check8bit = false; } else { - checkboundary = 1; - check8bit = 1; + checkboundary = true; + check8bit = true; } break; @@ -1487,10 +1488,10 @@ scan_content (CT ct, size_t maxunencoded) * since we are forcing use of base64, unless * the content-type was specified by a mhbuild directive. */ - check8bit = 0; - checklinelen = 0; - checklinespace = 0; - checkboundary = 0; + check8bit = false; + checklinelen = false; + checklinespace = false; + checkboundary = false; break; } } @@ -1511,12 +1512,12 @@ scan_content (CT ct, size_t maxunencoded) for (cp = bufp; (check8bit || checknul) && cp < bufp + gotlen; cp++) { if (!isascii ((unsigned char) *cp)) { - contains8bit = 1; - check8bit = 0; /* no need to keep checking */ + contains8bit = true; + check8bit = false; /* no need to keep checking */ } if (!*cp) { - containsnul = 1; - checknul = 0; /* no need to keep checking */ + containsnul = true; + checknul = false; /* no need to keep checking */ } } @@ -1524,8 +1525,8 @@ scan_content (CT ct, size_t maxunencoded) * Check line length. */ if (checklinelen && ((size_t)gotlen > maxunencoded + 1)) { - linelen = 1; - checklinelen = 0; /* no need to keep checking */ + linelen = true; + checklinelen = false; /* no need to keep checking */ } /* @@ -1536,7 +1537,7 @@ scan_content (CT ct, size_t maxunencoded) if (checkllinelen && !linelen && (gotlen > MAXLONGLINE + 1)) { - adios(NULL, "Line in content exceeds maximum line limit (%d)", + die("Line in content exceeds maximum line limit (%d)", MAXLONGLINE); } @@ -1545,8 +1546,8 @@ scan_content (CT ct, size_t maxunencoded) */ if (checklinespace && (cp = bufp + gotlen - 2) > bufp && isspace ((unsigned char) *cp)) { - linespace = 1; - checklinespace = 0; /* no need to keep checking */ + linespace = true; + checklinespace = false; /* no need to keep checking */ } /* @@ -1560,8 +1561,8 @@ scan_content (CT ct, size_t maxunencoded) *++cp = '\0'; if (!strncmp(bufp + 2, prefix, prefix_len) && isdigit((unsigned char) bufp[2 + prefix_len])) { - boundaryclash = 1; - checkboundary = 0; /* no need to keep checking */ + boundaryclash = true; + checkboundary = false; /* no need to keep checking */ } } } @@ -1620,7 +1621,7 @@ scan_content (CT ct, size_t maxunencoded) } } - return (boundaryclash ? NOTOK : OK); + return boundaryclash ? NOTOK : OK; } @@ -1680,7 +1681,7 @@ build_headers (CT ct, int header_encoding) char *s = output_params(len, ci->ci_first_pm, &len, mailbody); if (!s) - adios(NULL, "Internal error: failed outputting Content-Type " + die("Internal error: failed outputting Content-Type " "parameters"); vp = add (s, vp); @@ -1724,7 +1725,7 @@ build_headers (CT ct, int header_encoding) vp = concat (" ", ct->c_descr, NULL); if (header_encoding != CE_8BIT) { if (encode_rfc2047(DESCR_FIELD, &vp, header_encoding, NULL)) { - adios(NULL, "Unable to encode %s header", DESCR_FIELD); + die("Unable to encode %s header", DESCR_FIELD); } } add_header (ct, np, vp); @@ -1787,7 +1788,7 @@ skip_headers: case CE_QUOTED: if (ct->c_type == CT_MESSAGE || ct->c_type == CT_MULTIPART) - adios (NULL, "internal error, invalid encoding"); + die("internal error, invalid encoding"); np = mh_xstrdup(ENCODING_FIELD); vp = concat (" ", "quoted-printable", "\n", NULL); @@ -1796,7 +1797,7 @@ skip_headers: case CE_BASE64: if (ct->c_type == CT_MESSAGE || ct->c_type == CT_MULTIPART) - adios (NULL, "internal error, invalid encoding"); + die("internal error, invalid encoding"); np = mh_xstrdup(ENCODING_FIELD); vp = concat (" ", "base64", "\n", NULL); @@ -1805,7 +1806,7 @@ skip_headers: case CE_BINARY: if (ct->c_type == CT_MESSAGE) - adios (NULL, "internal error, invalid encoding"); + die("internal error, invalid encoding"); np = mh_xstrdup(ENCODING_FIELD); vp = concat (" ", "binary", "\n", NULL); @@ -1813,7 +1814,7 @@ skip_headers: break; default: - adios (NULL, "unknown transfer encoding in content"); + die("unknown transfer encoding in content"); break; } @@ -1962,7 +1963,7 @@ setup_attach_content(CT ct, char *filename) PM pm; if (! (type = mime_type(filename))) { - adios(NULL, "Unable to determine MIME type of \"%s\"", filename); + die("Unable to determine MIME type of \"%s\"", filename); } /* @@ -1989,15 +1990,15 @@ setup_attach_content(CT ct, char *filename) switch (ct->c_type = s2i->si_val) { case CT_MULTIPART: - adios (NULL, "multipart types must be specified by mhbuild directives"); + die("multipart types must be specified by mhbuild directives"); /* NOTREACHED */ case CT_MESSAGE: if (strcasecmp(ct->c_ctinfo.ci_subtype, "partial") == 0) - adios(NULL, "Sorry, %s/%s isn't supported", ct->c_ctinfo.ci_type, + die("Sorry, %s/%s isn't supported", ct->c_ctinfo.ci_type, ct->c_ctinfo.ci_subtype); if (strcasecmp(ct->c_ctinfo.ci_subtype, "external-body") == 0) - adios(NULL, "external-body messages must be specified " + die("external-body messages must be specified " "by mhbuild directives"); /* FALLTHRU */ @@ -2093,7 +2094,7 @@ set_charset (CT ct, int contains8bit) { if (contains8bit == 1 && strcasecmp (eightbitcharset, "US-ASCII") == 0) { - adios (NULL, "Text content contains 8 bit characters, but " + die("Text content contains 8 bit characters, but " "character set is US-ASCII"); } @@ -2125,7 +2126,7 @@ expand_pseudoheaders (CT ct, struct multipart *m, const char *infile, struct part *part; if (ct->c_subtype == MULTI_ALTERNATE) { - int matched = 0; + bool matched = false; /* The parts are in descending priority order (defined by RFC 2046 Sec. 5.1.4) because they were reversed by @@ -2148,7 +2149,7 @@ expand_pseudoheaders (CT ct, struct multipart *m, const char *infile, expand_pseudoheader (part->mp_part, &text_plain_ct, m, infile, c->type, c->argstring); - matched = 1; + matched = true; break; } } @@ -2340,7 +2341,7 @@ expand_pseudoheader (CT ct, CT *text_plain_ct, struct multipart *m, int extract_headers (CT ct, char *reply_file, FILE **reply_fp) { char *buffer = NULL, *cp, *end_of_header; - int found_header = 0; + bool found_header = false; struct stat statbuf; /* Read the convert reply from the file to memory. */ @@ -2364,10 +2365,10 @@ extract_headers (CT ct, char *reply_file, FILE **reply_fp) { buffer[LEN(TYPE_FIELD)] == ':') { if ((end_of_header = strstr (buffer, "\r\n\r\n"))) { end_of_header += 2; - found_header = 1; + found_header = true; } else if ((end_of_header = strstr (buffer, "\n\n"))) { ++end_of_header; - found_header = 1; + found_header = true; } } @@ -2429,7 +2430,7 @@ extract_headers (CT ct, char *reply_file, FILE **reply_fp) { ct->c_subtype = TEXT_PLAIN; if (get_ctinfo ("text/plain", ct, 0) == NOTOK) { /* This never should fail, but just in case. */ - adios (NULL, "unable to get content info for reply"); + die("unable to get content info for reply"); } }