]> diplodocus.org Git - nmh/blobdiff - uip/mhbuild.c
Remove unused NCWD and NPWD #defines.
[nmh] / uip / mhbuild.c
index 85bfef473b0c08e21da1d23b53ece7e434b1db78..b111df0cea8de60cd1f9c1cc2074d489f999805f 100644 (file)
@@ -9,7 +9,6 @@
 
 #include <h/mh.h>
 #include <fcntl.h>
-#include <h/signals.h>
 #include <h/md5.h>
 #include <h/mts.h>
 #include <h/tws.h>
@@ -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) \
@@ -45,7 +46,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);
@@ -55,9 +56,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);
@@ -74,7 +77,6 @@ extern char *cache_public;
 extern char *cache_private;
 
 int debugsw = 0;
-int verbosw = 0;
 
 int listsw   = 0;
 int rfc934sw = 0;
@@ -95,14 +97,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,8 +112,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;
 
@@ -245,6 +246,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);
                }
@@ -270,6 +274,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 +339,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 +364,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 +384,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 +412,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));