X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmshcmds.c;h=0190beecfca8df52159fad315a1503d02ea23afa;hp=60f34130b5316cbe6abd5b38300bb68cd122c0fa;hb=5dd6771b28c257af405d7248639ed0e3bcdce38b;hpb=0569d6d1631dc90d4f2f2df6bdd0599c7ecc7814 diff --git a/uip/mshcmds.c b/uip/mshcmds.c index 60f3413..0190bee 100644 --- a/uip/mshcmds.c +++ b/uip/mshcmds.c @@ -2,8 +2,6 @@ /* * mshcmds.c -- command handlers in msh * - * $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. @@ -867,6 +865,8 @@ forwcmd (char **args) int msgp = 0, vecp = 1, msgnum; char *cp, *filter = NULL, buf[BUFSIZ]; char *msgs[MAXARGS], *vec[MAXARGS]; + char *tfile = NULL; + char tmpfil[BUFSIZ]; if (fmsh) { forkcmd (args, cmd_name); @@ -939,16 +939,12 @@ forwcmd (char **args) /* foil search of .mh_profile */ snprintf (buf, sizeof(buf), "%sXXXXXX", invo_name); -/* - Mkstemp work postponed until later -Doug -#ifdef HAVE_MKSTEMP - vec[0] = (char *)mkstemp (buf); -#else -*/ - vec[0] = (char *)mktemp (buf); -/* -#endif -*/ + + tfile = m_mktemp(buf, NULL, NULL); + if (tfile == NULL) adios("forwcmd", "unable to create temporary file"); + strncpy (tmpfil, tfile, sizeof(tmpfil)); + vec[0] = tmpfil; + vec[vecp++] = "-file"; vec[vecp] = NULL; if (!msgp) @@ -979,10 +975,14 @@ static void forw (char *proc, char *filter, int vecp, char **vec) { int i, child_id, msgnum, msgcnt; - char tmpfil[80], *args[MAXARGS]; + char tmpfil[BUFSIZ], *args[MAXARGS]; FILE *out; + char *tfile = NULL; + + tfile = m_mktemp2(NULL, invo_name, NULL, NULL); + if (tfile == NULL) adios("forw", "unable to create temporary file"); + strncpy (tmpfil, tfile, sizeof(tmpfil)); - strncpy (tmpfil, m_tmpfil (invo_name), sizeof(tmpfil)); interrupted = 0; if (filter) switch (child_id = fork ()) { @@ -2547,7 +2547,8 @@ static int is_nontext (int msgnum) { int result, state; - char *bp, *cp, *dp; + unsigned char *bp, *dp; + char *cp; char buf[BUFSIZ], name[NAMESZ]; FILE *fp; @@ -2960,7 +2961,8 @@ subsort (struct Msg *a, struct Msg *b) static char * sosmash (char *subj, char *s) { - register char *cp, *dp, c; + register char *cp, *dp; + register unsigned char c; if (s) { cp = s; @@ -2993,8 +2995,9 @@ static int process (int msgnum, char *proc, int vecp, char **vec) { int child_id, status; - char tmpfil[80]; + char tmpfil[BUFSIZ]; FILE *out; + char *cp; if (fmsh) { strncpy (tmpfil, m_name (msgnum), sizeof(tmpfil)); @@ -3005,23 +3008,20 @@ process (int msgnum, char *proc, int vecp, char **vec) goto ready; } - strncpy (tmpfil, m_scratch ("", invo_name), sizeof(tmpfil)); - if ((out = fopen (tmpfil, "w")) == NULL) { - int olderr; - char newfil[80]; - - olderr = errno; - strncpy (newfil, m_tmpfil (invo_name), sizeof(newfil)); - if ((out = fopen (newfil, "w")) == NULL) { + cp = m_mktemp(invo_name, NULL, &out); + if (cp == NULL) { + /* Try again, but try to create under /tmp */ + int olderr = errno; + cp = m_mktemp2(NULL, invo_name, NULL, &out); + if (cp == NULL) { errno = olderr; - advise (tmpfil, "unable to create temporary file"); + advise (NULL, "unable to create temporary file"); return NOTOK; - } else { - strncpy (tmpfil, newfil, sizeof(tmpfil)); } } copy_message (msgnum, out); fclose (out); + strncpy(tmpfil, cp, sizeof(tmpfil)); ready: ; fflush (stdout); @@ -3087,7 +3087,7 @@ static void copy_digest (int msgnum, FILE *out) { char c; - long pos; + long pos = 0L; static char buffer[BUFSIZ]; register FILE *zp;