X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frcvdist.c;h=9038d5ffbda033f38d318bd44dc3fcae6efca99a;hp=ace5295df3c51f5285942ac5d446cf506bf8c4eb;hb=5dd6771b28c257af405d7248639ed0e3bcdce38b;hpb=017a82124bf2ea39ced5aa4c8f969c18b3c2fb90 diff --git a/uip/rcvdist.c b/uip/rcvdist.c index ace5295..9038d5f 100644 --- a/uip/rcvdist.c +++ b/uip/rcvdist.c @@ -2,14 +2,17 @@ /* * rcvdist.c -- asynchronously redistribute messages * - * $Id$ + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #include #include #include -#include -#include +#include +#include +#include static struct swit switches[] = { #define FORMSW 0 @@ -29,7 +32,7 @@ static char tmpfil[BUFSIZ] = ""; * prototypes */ static void rcvdistout (FILE *, char *, char *); -int done (int); +static void unlink_done (int) NORETURN; int @@ -39,7 +42,10 @@ main (int argc, char **argv) int i, vecp = 1; char *addrs = NULL, *cp, *form = NULL, buf[BUFSIZ]; char **argp, **arguments, *vec[MAXARGS]; - register FILE *fp; + FILE *fp; + char *tfile = NULL; + + done=unlink_done; #ifdef LOCALE setlocale(LC_ALL, ""); @@ -87,12 +93,18 @@ main (int argc, char **argv) invo_name); umask (~m_gmprot ()); - strncpy (tmpfil, m_tmpfil (invo_name), sizeof(tmpfil)); - if ((fp = fopen (tmpfil, "w+")) == NULL) - adios (tmpfil, "unable to create"); + + tfile = m_mktemp2(NULL, invo_name, NULL, &fp); + if (tfile == NULL) adios("rcvdist", "unable to create temporary file"); + strncpy (tmpfil, tfile, sizeof(tmpfil)); + cpydata (fileno (stdin), fileno (fp), "message", tmpfil); fseek (fp, 0L, SEEK_SET); - strncpy (drft, m_tmpfil (invo_name), sizeof(drft)); + + tfile = m_mktemp2(NULL, invo_name, NULL, NULL); + if (tfile == NULL) adios("forw", "unable to create temporary file"); + strncpy (drft, tfile, sizeof(tmpfil)); + rcvdistout (fp, form, addrs); fclose (fp); @@ -177,8 +189,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) *--savecomp = 0; for (i = ncomps; i--;) - if (!(*nxtbuf++ = malloc (SBUFSIZ))) - adios (NULL, "unable to allocate component buffer"); + *nxtbuf++ = mh_xmalloc (SBUFSIZ); nxtbuf = compbuffers; tmpbuf = *nxtbuf++; @@ -198,7 +209,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) case FLDPLUS: if ((cptr = wantcomp[CHASH (name)])) do { - if (!strcasecmp (name, cptr->c_name)) { + if (!mh_strcasecmp (name, cptr->c_name)) { char_read += msg_count; if (!cptr->c_text) { cptr->c_text = tmpbuf; @@ -244,7 +255,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) finished: ; i = format_len + char_read + 256; - scanl = malloc ((size_t) i + 2); + scanl = mh_xmalloc ((size_t) i + 2); dat[0] = dat[1] = dat[2] = dat[4] = 0; dat[3] = outputlinelen; fmt_scan (fmt, scanl, i, dat); @@ -264,8 +275,8 @@ finished: ; } -int -done (int status) +static void +unlink_done (int status) { if (backup[0]) unlink (backup); @@ -275,5 +286,4 @@ done (int status) unlink (tmpfil); exit (status ? RCV_MBX : RCV_MOK); - return 1; /* dead code to satisfy the compiler */ }