X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmshcmds.c;h=3bd4db35c432cd04885ac3262e0d5600348f379f;hp=c199502d7acbc87c36d8e780d9ea0cd4dd8fe773;hb=ecc90fb56b43863f4c33ed62da4abe898b17d7fb;hpb=7879ea4084333b448c5a3a49c1cb52023e3808d1 diff --git a/uip/mshcmds.c b/uip/mshcmds.c index c199502..3bd4db3 100644 --- a/uip/mshcmds.c +++ b/uip/mshcmds.c @@ -2,7 +2,9 @@ /* * 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. */ #include @@ -11,31 +13,20 @@ #include #include #include -#include +#include #include #include #include #include #include +#include -extern int errno; static char delim3[] = "-------"; /* from burst.c */ static int mhlnum; static FILE *mhlfp; -#if defined(NNTP) && defined(MPOP) -# undef MPOP -#endif - -#ifdef MPOP -# ifdef BPOP -extern int pmsh; -extern char response[]; -# endif -#endif /* MPOP */ - /* * Type for a compare function for qsort. This keeps * the compiler happy. @@ -589,7 +580,7 @@ filehak (char **args) if (cwd == NULL) cwd = getcpy (pwd ()); chdir (m_maildir ("")); - cp = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF); + cp = pluspath (cp); if (access (m_maildir (cp), F_OK) == NOTOK) result = OK; free (cp); @@ -699,7 +690,7 @@ foldcmd (char **args) return; } else - folder = fmsh ? path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF) + folder = fmsh ? pluspath (cp) : cp + 1; } else @@ -863,6 +854,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); @@ -935,16 +928,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) @@ -975,10 +964,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 ()) { @@ -1995,12 +1988,6 @@ rmm (void) if (is_selected (mp, msgnum)) { set_deleted (mp, msgnum); unset_exists (mp, msgnum); -#ifdef MPOP -#ifdef BPOP - if (pmsh && pop_dele (msgnum) != OK) - fprintf (stderr, "%s", response); -#endif -#endif /* MPOP */ } if ((mp->nummsg -= mp->numsel) <= 0) { @@ -2059,11 +2046,6 @@ scancmd (char **args) char *cp, *form = NULL, *format = NULL; char buf[BUFSIZ], *nfs, *msgs[MAXARGS]; register FILE *zp; -#ifdef MPOP -#ifdef BPOP - static int p_optim = 0; -#endif -#endif /* MPOP */ static int s_optim = 0; static char *s_form = NULL, *s_format = NULL; @@ -2144,80 +2126,10 @@ scancmd (char **args) s_form = form ? getcpy (form) : NULL; s_format = format ? getcpy (format) : NULL; -#ifdef MPOP -#ifdef BPOP - if (pmsh) { - int i; - char *dp, *ep, *fp; - - if (width == 0) - width = sc_width (); - - for (dp = nfs, i = 0; *dp; dp++, i++) - if (*dp == '\\' || *dp == '"' || *dp == '\n') - i++; - i++; - if ((ep = malloc ((unsigned) i)) == NULL) - adios (NULL, "out of memory"); - for (dp = nfs, fp = ep; *dp; dp++) { - if (*dp == '\n') { - *fp++ = '\\', *fp++ = 'n'; - continue; - } - if (*dp == '"' || *dp == '\\') - *fp++ = '\\'; - *fp++ = *dp; - } - *fp = NULL; - - if (pop_command ("XTND SCAN %d \"%s\"", width, ep) == OK) - p_optim = 1; - - free (ep); - } -#endif -#endif /* MPOP */ } else optim = equiv (s_form, form) && equiv (s_format, format); -#ifdef MPOP -#ifdef BPOP - if (p_optim && optim) { - for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++) - if (!is_selected(mp, msgnum) || Msgs[msgnum].m_scanl) - break; - if (msgnum > mp->hghmsg && pop_command ("LIST") == OK) { - fprintf (stderr, "Stand-by..."); - fflush (stderr); - - for (;;) { - int size; - - switch (pop_multiline ()) { - case NOTOK: - fprintf (stderr, "%s", response); - /* and fall... */ - case DONE: - fprintf (stderr,"\n"); - break; - - case OK: - if (sscanf (response, "%d %d", &msgnum, &size) == 2 - && mp->lowmsg <= msgnum - && msgnum <= mp->hghmsg - && (cp = strchr(response, '#')) - && *++cp) - Msgs[msgnum].m_scanl = concat (cp, "\n", NULL); - continue; - } - break; - } - } - } -#endif -#endif /* MPOP */ - interrupted = 0; for (msgnum = mp->lowsel; msgnum <= mp->hghsel && !interrupted; @@ -2226,20 +2138,6 @@ scancmd (char **args) if (optim && Msgs[msgnum].m_scanl) printf ("%s", Msgs[msgnum].m_scanl); else { -#ifdef MPOP -#ifdef BPOP - if (p_optim - && optim - && is_virtual (mp, msgnum) - && pop_command ("LIST %d", msgnum) == OK - && (cp = strchr(response, '#')) - && *++cp) { - Msgs[msgnum].m_scanl = concat (cp, "\n", NULL); - printf ("%s", Msgs[msgnum].m_scanl); - continue; - } -#endif -#endif /* MPOP */ zp = msh_ready (msgnum, 0); switch (state = scan (zp, msgnum, 0, nfs, width, @@ -2307,10 +2205,10 @@ showcmd (char **args) char *cp, *proc = showproc, buf[BUFSIZ]; char *msgs[MAXARGS], *vec[MAXARGS]; - if (!strcasecmp (cmd_name, "next")) + if (!mh_strcasecmp (cmd_name, "next")) mode = 1; else - if (!strcasecmp (cmd_name, "prev")) + if (!mh_strcasecmp (cmd_name, "prev")) mode = -1; while ((cp = *args++)) { if (*cp == '-') @@ -2544,7 +2442,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; @@ -2562,7 +2461,7 @@ is_nontext (int msgnum) /* * Check Content-Type field */ - if (!strcasecmp (name, TYPE_FIELD)) { + if (!mh_strcasecmp (name, TYPE_FIELD)) { int passno; char c; @@ -2617,7 +2516,7 @@ invalid: if (!*bp) goto invalid; if (passno > 1) { - if ((result = (strcasecmp (bp, "plain") != 0))) + if ((result = (mh_strcasecmp (bp, "plain") != 0))) goto out; *dp = c; for (dp++; isspace (*dp); dp++) @@ -2649,7 +2548,7 @@ invalid: /* Check the character set */ result = !check_charset (dp, strlen (dp)); } else { - if (!(result = (strcasecmp (bp, "text") != 0))) { + if (!(result = (mh_strcasecmp (bp, "text") != 0))) { *dp = c; bp = dp; passno = 2; @@ -2668,7 +2567,7 @@ out: /* * Check Content-Transfer-Encoding field */ - if (!strcasecmp (name, ENCODING_FIELD)) { + if (!mh_strcasecmp (name, ENCODING_FIELD)) { cp = add (buf, NULL); while (state == FLDPLUS) { state = m_getfld (state, name, buf, sizeof buf, fp); @@ -2679,9 +2578,9 @@ out: for (dp = bp; istoken (*dp); dp++) continue; *dp = '\0'; - result = (strcasecmp (bp, "7bit") - && strcasecmp (bp, "8bit") - && strcasecmp (bp, "binary")); + result = (mh_strcasecmp (bp, "7bit") + && mh_strcasecmp (bp, "8bit") + && mh_strcasecmp (bp, "binary")); free (cp); if (result) { @@ -2865,7 +2764,7 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp) case FLD: case FLDEOF: case FLDPLUS: - if (!strcasecmp (name, datesw)) { + if (!mh_strcasecmp (name, datesw)) { bp = getcpy (buf); while (state == FLDPLUS) { state = m_getfld (state, name, buf, sizeof buf, zp); @@ -2882,7 +2781,7 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp) break; /* all done! */ gotdate++; } - else if (subjsw && !strcasecmp(name, subjsw)) { + else if (subjsw && !mh_strcasecmp(name, subjsw)) { bp = getcpy (buf); while (state == FLDPLUS) { state = m_getfld (state, name, buf, sizeof buf, zp); @@ -2957,12 +2856,13 @@ 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; dp = s; /* dst pointer */ - if (!strcasecmp (subj, "subject")) + if (!mh_strcasecmp (subj, "subject")) while ((c = *cp)) { if (! isspace(c)) { if(uprf(cp, "re:")) @@ -2990,8 +2890,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)); @@ -3002,24 +2903,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; - extern int errno; - 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); @@ -3085,7 +2982,7 @@ static void copy_digest (int msgnum, FILE *out) { char c; - long pos; + long pos = 0L; static char buffer[BUFSIZ]; register FILE *zp;