/*
* 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.
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.
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);
return;
}
else
- folder = fmsh ? path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF)
+ folder = fmsh ? pluspath (cp)
: cp + 1;
}
else
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);
/* 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)
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 ()) {
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) {
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;
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;
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,
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 == '-')
is_nontext (int msgnum)
{
int result, state;
- char *bp, *cp, *dp;
+ unsigned char *bp, *dp;
+ char *cp;
char buf[BUFSIZ], name[NAMESZ];
FILE *fp;
/*
* Check Content-Type field
*/
- if (!strcasecmp (name, TYPE_FIELD)) {
+ if (!mh_strcasecmp (name, TYPE_FIELD)) {
int passno;
char c;
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++)
/* 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;
/*
* 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);
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) {
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);
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);
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:"))
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));
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);
copy_digest (int msgnum, FILE *out)
{
char c;
- long pos;
+ long pos = 0L;
static char buffer[BUFSIZ];
register FILE *zp;