X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/13f84dd50ca5754391dbd3296a5c7425f9363600..96c3d2a022acb59cc2559cd49488da476ee8a3b1:/uip/mshcmds.c?ds=inline diff --git a/uip/mshcmds.c b/uip/mshcmds.c index 147a261b..35e7d273 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. @@ -17,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -29,30 +26,12 @@ 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. */ typedef int (*qsort_comp) (const void *, const void *); -/* - * prototypes - */ -void clear_screen (void); /* from termsbr.c */ -int SOprintf (char *, ...); /* from termsbr.c */ -int sc_width (void); /* from termsbr.c */ - /* * static prototypes */ @@ -72,9 +51,6 @@ static int process (int, char *, int, char **); static void copy_message (int, FILE *); static void copy_digest (int, FILE *); -/* from mhlsbr.c */ -int mhlsbr (int, char **, FILE *(*)()); - void forkcmd (char **args, char *pgm) { @@ -867,6 +843,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 +917,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 +953,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 ()) { @@ -1098,6 +1076,7 @@ void helpcmd (char **args) { int i; + NMH_UNUSED (args); for (i = 0; hlpmsg[i]; i++) { printf (hlpmsg[i], invo_name); @@ -1135,7 +1114,8 @@ void markcmd (char **args) { int addsw = 0, deletesw = 0, debugsw = 0; - int listsw = 0, zerosw = 0, seqp = 0; + int listsw = 0, zerosw = 0; + size_t seqp = 0; int msgp = 0, msgnum; char *cp, buf[BUFSIZ]; char *seqs[NUMATTRS + 1], *msgs[MAXARGS]; @@ -1300,57 +1280,53 @@ static struct swit mhnswit[] = { { "noauto", 0 }, #define MHNDEBUGSW 2 { "debug", -5 }, -#define MHNEBCDICSW 3 - { "ebcdicsafe", 0 }, -#define MHNNEBCDICSW 4 - { "noebcdicsafe", 0 }, -#define MHNFORMSW 5 +#define MHNFORMSW 3 { "form formfile", 4 }, -#define MHNHEADSW 6 +#define MHNHEADSW 4 { "headers", 0 }, -#define MHNNHEADSW 7 +#define MHNNHEADSW 5 { "noheaders", 0 }, -#define MHNLISTSW 8 +#define MHNLISTSW 6 { "list", 0 }, -#define MHNNLISTSW 9 +#define MHNNLISTSW 7 { "nolist", 0 }, -#define MHNPARTSW 10 +#define MHNPARTSW 8 { "part number", 0 }, -#define MHNSIZESW 11 +#define MHNSIZESW 9 { "realsize", 0 }, -#define MHNNSIZESW 12 +#define MHNNSIZESW 10 { "norealsize", 0 }, -#define MHNRFC934SW 13 +#define MHNRFC934SW 11 { "rfc934mode", 0 }, -#define MHNNRFC934SW 14 +#define MHNNRFC934SW 12 { "norfc934mode", 0 }, -#define MHNSERIALSW 15 +#define MHNSERIALSW 13 { "serialonly", 0 }, -#define MHNNSERIALSW 16 +#define MHNNSERIALSW 14 { "noserialonly", 0 }, -#define MHNSHOWSW 17 +#define MHNSHOWSW 15 { "show", 0 }, -#define MHNNSHOWSW 18 +#define MHNNSHOWSW 16 { "noshow", 0 }, -#define MHNSTORESW 19 +#define MHNSTORESW 17 { "store", 0 }, -#define MHNNSTORESW 20 +#define MHNNSTORESW 18 { "nostore", 0 }, -#define MHNTYPESW 21 +#define MHNTYPESW 19 { "type content", 0 }, -#define MHNVERBSW 22 +#define MHNVERBSW 20 { "verbose", 0 }, -#define MHNNVERBSW 23 +#define MHNNVERBSW 21 { "noverbose", 0 }, -#define MHNHELPSW 24 +#define MHNHELPSW 22 { "help", 0 }, -#define MHNPROGSW 25 +#define MHNPROGSW 23 { "moreproc program", -4 }, -#define MHNNPROGSW 26 +#define MHNNPROGSW 24 { "nomoreproc", -3 }, -#define MHNLENSW 27 +#define MHNLENSW 25 { "length lines", -4 }, -#define MHNWIDSW 28 +#define MHNWIDSW 26 { "width columns", -4 }, { NULL, 0 } }; @@ -1385,8 +1361,6 @@ mhncmd (char **args) case MHNAUTOSW: case MHNNAUTOSW: case MHNDEBUGSW: - case MHNEBCDICSW: - case MHNNEBCDICSW: case MHNHEADSW: case MHNNHEADSW: case MHNLISTSW: @@ -1644,7 +1618,8 @@ static struct swit pickswit[] = { void pickcmd (char **args) { - int zerosw = 1, msgp = 0, seqp = 0; + int zerosw = 1, msgp = 0; + size_t seqp = 0; int vecp = 0, hi, lo, msgnum; char *cp, buf[BUFSIZ], *msgs[MAXARGS]; char *seqs[NUMATTRS], *vec[MAXARGS]; @@ -1999,12 +1974,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) { @@ -2063,11 +2032,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; @@ -2148,79 +2112,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++; - ep = mh_xmalloc ((unsigned) i); - 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; @@ -2229,20 +2124,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, @@ -2386,7 +2267,7 @@ showcmd (char **args) return; seq_setprev (mp); - if (!nshow && !getenv ("NOMHNPROC")) + if (!nshow) for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) if (is_selected (mp, msgnum) && is_nontext (msgnum)) { proc = showmimeproc; @@ -2471,6 +2352,8 @@ show (int msgnum) static int eom_action (int c) { + NMH_UNUSED (c); + return (ftell (mhlfp) >= Msgs[mhlnum].m_stop); } @@ -2511,19 +2394,7 @@ ask (int msgnum) fflush (stdout); buf[0] = 0; -#ifndef BSD42 read (fileno (stdout), buf, sizeof buf); -#else /* BSD42 */ - switch (setjmp (sigenv)) { - case OK: - should_intr = 1; - read (fileno (stdout), buf, sizeof buf);/* fall... */ - - default: - should_intr = 0; - break; - } -#endif /* BSD42 */ if (strchr(buf, '\n') == NULL) putchar ('\n'); @@ -2995,8 +2866,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)); @@ -3007,23 +2879,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); @@ -3089,7 +2958,7 @@ static void copy_digest (int msgnum, FILE *out) { char c; - long pos; + long pos = 0L; static char buffer[BUFSIZ]; register FILE *zp;