X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/28c3595a77a8c942bee1057085776dad0b3d53f4..c3238c0e:/uip/mhbuild.c diff --git a/uip/mhbuild.c b/uip/mhbuild.c index 06577740..cdbf50f2 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -1,6 +1,4 @@ - -/* - * mhbuild.c -- expand/translate MIME composition files +/* mhbuild.c -- expand/translate MIME composition files * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -9,7 +7,6 @@ #include #include -#include #include #include #include @@ -47,7 +44,7 @@ X("version", 0, VERSIONSW) \ X("help", 0, HELPSW) \ X("debug", -5, DEBUGSW) \ - X("dist", -4, DISTSW) \ + X("dist", 0, DISTSW) \ #define X(sw, minchars, id) id, DEFINE_SWITCH_ENUM(MHBUILD); @@ -57,9 +54,11 @@ DEFINE_SWITCH_ENUM(MHBUILD); DEFINE_SWITCH_ARRAY(MHBUILD, switches); #undef X +/* utf-8 is for Email Address Internationalization, using SMTPUTF8. */ #define MIMEENCODING_SWITCHES \ X("base64", 0, BASE64SW) \ X("quoted-printable", 0, QUOTEDPRINTSW) \ + X("utf-8", 0, UTF8SW) \ #define X(sw, minchars, id) id, DEFINE_SWITCH_ENUM(MIMEENCODING); @@ -93,7 +92,6 @@ static int unlink_outfile = 0; static void unlink_done (int) NORETURN; /* mhbuildsbr.c */ -int output_message (CT, char *); int output_message_fp (CT, FILE *, char*); @@ -111,8 +109,9 @@ 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; } + if (nmh_init(argv[0], 2)) { return 1; } done=unlink_done; @@ -244,6 +243,9 @@ main (int argc, char **argv) case QUOTEDPRINTSW: header_encoding = CE_QUOTED; break; + case UTF8SW: + header_encoding = CE_8BIT; + break; default: adios (NULL, "Internal error: algorithm %s", cp); } @@ -334,13 +336,18 @@ 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, verbosw); @@ -354,17 +361,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); }