X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/f93ce652c5d1361b00a28db7bbb9e638197a6676..f345b9b480296b4b6a8469d6221752893c5d1420:/uip/mhbuild.c?ds=inline diff --git a/uip/mhbuild.c b/uip/mhbuild.c index 85bfef47..58b37c4e 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -9,7 +9,6 @@ #include #include -#include #include #include #include @@ -35,6 +34,8 @@ X("norfc934mode", 0, NRFC934SW) \ X("verbose", 0, VERBSW) \ X("noverbose", 0, NVERBSW) \ + X("disposition", 0, DISPOSW) \ + X("nodisposition", 0, NDISPOSW) \ X("rcache policy", 0, RCACHESW) \ X("wcache policy", 0, WCACHESW) \ X("contentid", 0, CONTENTIDSW) \ @@ -74,7 +75,6 @@ extern char *cache_public; extern char *cache_private; int debugsw = 0; -int verbosw = 0; int listsw = 0; int rfc934sw = 0; @@ -95,14 +95,12 @@ static void unlink_done (int) NORETURN; int output_message (CT, char *); int output_message_fp (CT, FILE *, char*); -/* mhlistsbr.c */ -int list_all_messages (CT *, int, int, int, int); - int main (int argc, char **argv) { int sizesw = 1, headsw = 1, directives = 1, autobuild = 0, dist = 0; + int verbosw = 0, dispo = 0; size_t maxunencoded = MAXTEXTPERLN; int *icachesw; char *cp, buf[BUFSIZ]; @@ -112,6 +110,7 @@ main (int argc, char **argv) FILE *fp = NULL; FILE *fp_out = NULL; int header_encoding = CE_UNKNOWN; + size_t n; if (nmh_init(argv[0], 1)) { return 1; } @@ -270,6 +269,12 @@ main (int argc, char **argv) case NVERBSW: verbosw = 0; continue; + case DISPOSW: + dispo = 1; + continue; + case NDISPOSW: + dispo = 0; + continue; case DEBUGSW: debugsw = 1; continue; @@ -329,16 +334,21 @@ main (int argc, char **argv) get_temp_dir()); } - /* copy standard input to temporary file */ + /* save a copy of the name for later removal */ strncpy (infile, cp, sizeof(infile)); - while (fgets (buffer, BUFSIZ, stdin)) - fputs (buffer, fp); - fclose (fp); unlink_infile = 1; + /* copy standard input to temporary file */ + while ((n = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { + if (fwrite(buffer, 1, n, fp) != n) { + adios (NULL, "error copying to temporary file"); + } + } + fclose (fp); + /* build the content structures for MIME message */ ct = build_mime (infile, autobuild, dist, directives, header_encoding, - maxunencoded); + maxunencoded, verbosw); /* * If ct == NULL, that means that -auto was set and a MIME version @@ -349,17 +359,17 @@ main (int argc, char **argv) if (! (fp = fopen(infile, "r"))) { adios(NULL, "Unable to open %s for reading", infile); } - while (fgets(buffer, BUFSIZ, fp)) - fputs(buffer, stdout); + while ((n = fread(buffer, 1, sizeof(buffer), fp)) > 0) { + if (fwrite(buffer, 1, n, stdout) != n) { + adios(NULL, "error copying %s to stdout", infile); + } + } } else { /* output the message */ output_message_fp (ct, stdout, NULL); free_content (ct); } - (void) m_unlink (infile); - unlink_infile = 0; - done (0); } @@ -369,7 +379,7 @@ main (int argc, char **argv) /* build the content structures for MIME message */ ct = build_mime (compfile, autobuild, dist, directives, header_encoding, - maxunencoded); + maxunencoded, verbosw); /* * If ct == NULL, that means -auto was set and we found a MIME version @@ -397,7 +407,7 @@ main (int argc, char **argv) * List the message info */ if (listsw) - list_all_messages (cts, headsw, sizesw, verbosw, debugsw); + list_all_messages (cts, headsw, sizesw, verbosw, debugsw, dispo); /* Rename composition draft */ snprintf (buffer, sizeof(buffer), "%s.orig", m_backup (compfile));