X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/3b6170b27ba8fedbb4d67d2842bfaa38d4417962..ca2f8cc7e93a21f9f04e0d976ca97feac4802e91:/uip/mhbuild.c diff --git a/uip/mhbuild.c b/uip/mhbuild.c index 3b17f356..b6f26eb9 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -13,6 +13,7 @@ #include #include #include +#include "h/done.h" #include #include "sbr/m_maildir.h" #include "sbr/m_mktemp.h" @@ -82,12 +83,7 @@ int contentidsw = 1; * Temporary files */ static char infile[BUFSIZ]; -static int unlink_infile = 0; - static char outfile[BUFSIZ]; -static int unlink_outfile = 0; - -static void unlink_done (int) NORETURN; int @@ -108,8 +104,6 @@ main (int argc, char **argv) if (nmh_init(argv[0], 2)) { return 1; } - done=unlink_done; - arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -328,10 +322,7 @@ main (int argc, char **argv) adios(NULL, "unable to create temporary file in %s", get_temp_dir()); } - - /* save a copy of the name for later removal */ strncpy (infile, cp, sizeof(infile)); - unlink_infile = 1; /* copy standard input to temporary file */ while ((n = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { @@ -389,10 +380,9 @@ main (int argc, char **argv) /* output MIME message to this temporary file */ if ((cp = m_mktemp2(compfile, invo_name, NULL, &fp_out)) == NULL) { - adios(NULL, "unable to create temporary file in %s", get_temp_dir()); + adios(NULL, "unable to create temporary file"); } strncpy(outfile, cp, sizeof(outfile)); - unlink_outfile = 1; /* output the message */ output_message_fp (ct, fp_out, outfile); @@ -416,25 +406,12 @@ main (int argc, char **argv) rename (buffer, compfile); done (1); } - unlink_outfile = 0; + /* Remove from atexit(3) list of files to unlink. */ + if (!(m_unlink(outfile) == -1 && errno == ENOENT)) { + adios(outfile, "file exists after rename:"); + } free_content (ct); done (0); return 1; } - - -static void NORETURN -unlink_done (int status) -{ - /* - * Check if we need to remove stray - * temporary files. - */ - if (unlink_infile) - (void) m_unlink (infile); - if (unlink_outfile) - (void) m_unlink (outfile); - - exit (status); -}