]> diplodocus.org Git - nmh/blobdiff - uip/mhbuild.c
Removed 3 renames of temporary files in mhparse.c. They added
[nmh] / uip / mhbuild.c
index ef4598581702e8c0773a33b66fca14b2871319cd..f3dc91c7a5772d5fb5dad69a1c8b1869160f56d9 100644 (file)
@@ -19,6 +19,8 @@
 #include <h/utils.h>
 
 #define MHBUILD_SWITCHES \
+    X("auto", 0, AUTOSW) \
+    X("noauto", 0, NAUTOSW) \
     X("check", 0, CHECKSW) \
     X("nocheck", 0, NCHECKSW) \
     X("directives", 0, DIRECTIVES) \
@@ -63,9 +65,6 @@ DEFINE_SWITCH_ENUM(MIMEENCODING);
 DEFINE_SWITCH_ARRAY(MIMEENCODING, encodingswitches);
 #undef X
 
-/* mhbuildsbr.c */
-extern char *tmp;      /* directory to place temp files */
-
 /* mhcachesbr.c */
 extern int rcachesw;
 extern int wcachesw;
@@ -101,7 +100,7 @@ int list_all_messages (CT *, int, int, int, int);
 int
 main (int argc, char **argv)
 {
-    int sizesw = 1, headsw = 1, directives = 1;
+    int sizesw = 1, headsw = 1, directives = 1, autobuild = 0;
     int *icachesw;
     char *cp, buf[BUFSIZ];
     char buffer[BUFSIZ], *compfile = NULL;
@@ -150,6 +149,20 @@ main (int argc, char **argv)
                print_version(invo_name);
                done (0);
 
+           case AUTOSW:
+               /* -auto implies -nodirectives */
+               autobuild = 1;
+               directives = 0;
+               continue;
+           case NAUTOSW:
+               /*
+                * We're turning directives back on since this is likely here
+                * to override a profile entry
+                */
+               autobuild = 0;
+               directives = 1;
+               continue;
+
            case RCACHESW:
                icachesw = &rcachesw;
                goto do_cache;
@@ -291,16 +304,6 @@ main (int argc, char **argv)
        cache_private = ".cache";
     cache_private = getcpy (m_maildir (cache_private));
 
-    /*
-     * Check for storage directory.  If defined, we
-     * will store temporary files there.  Else we
-     * store them in standard nmh directory.
-     */
-    if ((cp = context_find (nmhstorage)) && *cp)
-       tmp = concat (cp, "/", invo_name, NULL);
-    else
-       tmp = add (m_maildir (invo_name), NULL);
-
     if (!context_find ("path"))
        free (path ("./", TFOLDER));
 
@@ -312,40 +315,41 @@ 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_mktemp(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, directives, header_encoding);
-       cts[0] = ct;
-       cts[1] = NULL;
-
-       /* output MIME message to this temporary file */
-       strncpy (outfile, m_mktemp(invo_name, NULL, &fp_out), sizeof(outfile));
-       unlink_outfile = 1;
-
-       /* output the message */
-       output_message_fp (ct, fp_out, outfile);
-        fclose(fp_out);
-
-       /* output the temp file to standard output */
-       if ((fp = fopen (outfile, "r")) == NULL)
-           adios (outfile, "unable to open");
-       while (fgets (buffer, BUFSIZ, fp))
-           fputs (buffer, stdout);
-       fclose (fp);
+       ct = build_mime (infile, autobuild, directives, header_encoding);
+
+       /*
+        * If ct == NULL, that means that -auto was set and a MIME version
+        * header was already seen.  Just use the input file as the output
+        */
+
+       if (!ct) {
+           if (! (fp = fopen(infile, "r"))) {
+               adios(NULL, "Unable to open %s for reading", infile);
+           }
+           while (fgets(buffer, BUFSIZ, fp))
+               fputs(buffer, stdout);
+       } else {
+           /* output the message */
+           output_message_fp (ct, stdout, NULL);
+           free_content (ct);
+       }
 
        unlink (infile);
        unlink_infile = 0;
 
-       unlink (outfile);
-       unlink_outfile = 0;
-
-       free_content (ct);
        done (0);
     }
 
@@ -354,13 +358,24 @@ main (int argc, char **argv)
      */
 
     /* build the content structures for MIME message */
-    ct = build_mime (compfile, directives, header_encoding);
+    ct = build_mime (compfile, autobuild, directives, header_encoding);
+
+    /*
+     * If ct == NULL, that means -auto was set and we found a MIME version
+     * header.  Simply exit and do nothing.
+     */
+
+    if (! ct)
+       done(0);
+
     cts[0] = ct;
     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 */