X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/fa6bd938ab45ec005b70f3e4b67540331fb94b68..c0c501a665bb3d96fcf69b438dbd231b91b2c736:/uip/mhbuild.c diff --git a/uip/mhbuild.c b/uip/mhbuild.c index ef459858..de849a39 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -19,6 +19,8 @@ #include #define MHBUILD_SWITCHES \ + X("auto", 0, AUTOSW) \ + X("noauto", 0, NAUTOSW) \ X("check", 0, CHECKSW) \ X("nocheck", 0, NCHECKSW) \ X("directives", 0, DIRECTIVES) \ @@ -42,6 +44,7 @@ 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); @@ -63,9 +66,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 +101,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, dist = 0; int *icachesw; char *cp, buf[BUFSIZ]; char buffer[BUFSIZ], *compfile = NULL; @@ -111,15 +111,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; @@ -150,6 +144,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; @@ -254,6 +262,9 @@ main (int argc, char **argv) case DEBUGSW: debugsw = 1; continue; + case DISTSW: + dist = 1; + continue; } } if (compfile) @@ -291,16 +302,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 +313,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, dist, directives, header_encoding); - unlink (infile); - unlink_infile = 0; + /* + * 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 (outfile); - unlink_outfile = 0; + (void) m_unlink (infile); + unlink_infile = 0; - free_content (ct); done (0); } @@ -354,13 +356,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, dist, 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 */ @@ -401,9 +414,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); }