X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/2c5098fd3abe23a163c487f175e84c045d4bd21a..a2806483a53fcdb62ca8e2bec4f4e023355f4470:/uip/mhbuild.c diff --git a/uip/mhbuild.c b/uip/mhbuild.c index 624cf4b9..85bfef47 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -41,9 +41,11 @@ X("nocontentid", 0, NCONTENTIDSW) \ X("headerencoding encoding-algorithm", 0, HEADERENCSW) \ X("autoheaderencoding", 0, AUTOHEADERENCSW) \ + X("maxunencoded", 0, MAXUNENCSW) \ X("version", 0, VERSIONSW) \ X("help", 0, HELPSW) \ X("debug", -5, DEBUGSW) \ + X("dist", -4, DISTSW) \ #define X(sw, minchars, id) id, DEFINE_SWITCH_ENUM(MHBUILD); @@ -100,7 +102,8 @@ int list_all_messages (CT *, int, int, int, int); int main (int argc, char **argv) { - int sizesw = 1, headsw = 1, directives = 1, autobuild = 0; + int sizesw = 1, headsw = 1, directives = 1, autobuild = 0, dist = 0; + size_t maxunencoded = MAXTEXTPERLN; int *icachesw; char *cp, buf[BUFSIZ]; char buffer[BUFSIZ], *compfile = NULL; @@ -110,15 +113,9 @@ main (int argc, char **argv) FILE *fp_out = NULL; int header_encoding = CE_UNKNOWN; - done=unlink_done; - -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex (argv[0], '/'); + if (nmh_init(argv[0], 1)) { return 1; } - /* read user profile/context */ - context_read(); + done=unlink_done; arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -258,6 +255,15 @@ main (int argc, char **argv) header_encoding = CE_UNKNOWN; continue; + case MAXUNENCSW: + if (!(cp = *argp++) || *cp == '-') + adios (NULL, "missing argument to %s", argp[-2]); + if ((maxunencoded = atoi(cp)) < 1) + adios (NULL, "Invalid argument for %s: %s", argp[-2], cp); + if (maxunencoded > 998) + adios (NULL, "limit of -maxunencoded is 998"); + continue; + case VERBSW: verbosw++; continue; @@ -267,6 +273,9 @@ main (int argc, char **argv) case DEBUGSW: debugsw = 1; continue; + case DISTSW: + dist = 1; + continue; } } if (compfile) @@ -315,15 +324,21 @@ main (int argc, char **argv) * Process the composition file from standard input. */ if (compfile[0] == '-' && compfile[1] == '\0') { + if ((cp = m_mktemp2(NULL, invo_name, NULL, &fp)) == NULL) { + adios(NULL, "unable to create temporary file in %s", + get_temp_dir()); + } + /* copy standard input to temporary file */ - strncpy (infile, m_mktemp2(NULL, invo_name, NULL, &fp), sizeof(infile)); + strncpy (infile, cp, sizeof(infile)); while (fgets (buffer, BUFSIZ, stdin)) fputs (buffer, fp); fclose (fp); unlink_infile = 1; /* build the content structures for MIME message */ - ct = build_mime (infile, autobuild, directives, header_encoding); + ct = build_mime (infile, autobuild, dist, directives, header_encoding, + maxunencoded); /* * If ct == NULL, that means that -auto was set and a MIME version @@ -342,7 +357,7 @@ main (int argc, char **argv) free_content (ct); } - unlink (infile); + (void) m_unlink (infile); unlink_infile = 0; done (0); @@ -353,7 +368,8 @@ main (int argc, char **argv) */ /* build the content structures for MIME message */ - ct = build_mime (compfile, autobuild, directives, header_encoding); + ct = build_mime (compfile, autobuild, dist, directives, header_encoding, + maxunencoded); /* * If ct == NULL, that means -auto was set and we found a MIME version @@ -367,8 +383,10 @@ main (int argc, char **argv) cts[1] = NULL; /* output MIME message to this temporary file */ - strncpy(outfile, m_mktemp2(compfile, invo_name, NULL, &fp_out), - sizeof(outfile)); + if ((cp = m_mktemp2(compfile, invo_name, NULL, &fp_out)) == NULL) { + adios(NULL, "unable to create temporary file in %s", get_temp_dir()); + } + strncpy(outfile, cp, sizeof(outfile)); unlink_outfile = 1; /* output the message */ @@ -409,9 +427,9 @@ unlink_done (int status) * temporary files. */ if (unlink_infile) - unlink (infile); + (void) m_unlink (infile); if (unlink_outfile) - unlink (outfile); + (void) m_unlink (outfile); exit (status); }