#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) \
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;
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;
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;
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));
* 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);
}
*/
/* 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 */