-
-/*
- * forw.c -- forward a message, or group of messages.
+/* forw.c -- forward a message, or group of messages.
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
#include <fcntl.h>
#include <h/tws.h>
#include <h/utils.h>
+#include "../sbr/m_maildir.h"
#define IFORMAT "digest-issue-%s"
X("nodashstuffing", 0, NBITSTUFFSW) \
X("version", 0, VERSIONSW) \
X("help", 0, HELPSW) \
- X("file file", 4, FILESW) /* interface from msh */ \
+ X("file file", 4, FILESW) \
X("build", 5, BILDSW) /* interface from mhe */ \
X("from address", 0, FROMSW) \
X("to address", 0, TOSW) \
char *dmsg = NULL, *digest = NULL, *ed = NULL;
char *file = NULL, *filter = NULL, *folder = NULL, *fwdmsg = NULL;
char *from = NULL, *to = NULL, *cc = NULL, *subject = NULL, *fcc = NULL;
- char *form = NULL, buf[BUFSIZ], value[10];
+ char *form = NULL, buf[BUFSIZ];
char **argp, **arguments;
struct stat st;
struct msgs_array msgs = { 0, 0, NULL };
-
int buildsw = 0;
-#ifdef LOCALE
- setlocale(LC_ALL, "");
-#endif
- invo_name = r1bindex (argv[0], '/');
-
- /* read user profile/context */
- context_read();
+ if (nmh_init(argv[0], 1)) { return 1; }
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
nwhat = 0;
continue;
case BILDSW:
- buildsw++; /* fall... */
+ buildsw++;
+ /* FALLTHRU */
case NWHATSW:
nwhat++;
continue;
case DGSTSW:
if (!(cp = *argp++) || *cp == '-')
adios (NULL, "missing argument to %s", argp[-2]);
- digest = getcpy(cp);
+ digest = mh_xstrdup(cp);
mime = 0;
continue;
case ISSUESW:
continue;
case BITSTUFFSW:
- dashstuff = 1; /* trinary logic */
+ dashstuff = 1; /* ternary logic */
continue;
case NBITSTUFFSW:
- dashstuff = -1; /* trinary logic */
+ dashstuff = -1; /* ternary logic */
continue;
case FROMSW:
case SUBJECTSW:
if (!(cp = *argp++) || *cp == '-')
adios (NULL, "missing argument to %s", argp[-2]);
- subject = getcpy(cp);
+ subject = mh_xstrdup(cp);
continue;
case WIDTHSW:
}
}
- cwd = getcpy (pwd ());
+ cwd = mh_xstrdup(pwd ());
if (!context_find ("path"))
free (path ("./", TFOLDER));
if (!buildsw && stat (drft, &st) != NOTOK) {
printf ("Draft \"%s\" exists (%ld bytes).", drft, (long) st.st_size);
for (i = LISTDSW; i != YESW;) {
- if (!(argp = getans ("\nDisposition? ", isdf ? aqrnl : aqrl)))
+ if (!(argp = read_switch_multiword ("\nDisposition? ",
+ isdf ? aqrnl : aqrl)))
done (1);
switch (i = smatch (*argp, isdf ? aqrnl : aqrl)) {
case NOSW:
i = YESW;
break;
default:
- advise (NULL, "say what?");
+ inform("say what?");
break;
}
}
adios (maildir, "unable to change directory to");
/* read folder and create message structure */
- if (!(mp = folder_read (folder)))
+ if (!(mp = folder_read (folder, 1)))
adios (NULL, "unable to read folder %s", folder);
/* check for empty folder */
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
if (is_selected (mp, msgnum)) {
- fwdmsg = strdup(m_name(msgnum));
+ fwdmsg = mh_xstrdup(m_name(msgnum));
break;
}
if (digest) {
snprintf (buf, sizeof(buf), IFORMAT, digest);
- snprintf (value, sizeof(value), "%d", issue);
- context_replace (buf, getcpy (value));
+ context_replace (buf, mh_xstrdup(m_name(issue)));
snprintf (buf, sizeof(buf), VFORMAT, digest);
- snprintf (value, sizeof(value), "%d", volume);
- context_replace (buf, getcpy (value));
+ context_replace (buf, mh_xstrdup(m_name(volume)));
}
context_replace (pfolder, folder); /* update current folder */
dup2 (pd[1], 1);
close (pd[1]);
- i = 1;
app_msgarg(&vec, "-forwall");
app_msgarg(&vec, "-form");
app_msgarg(&vec, filter);
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
if (is_selected (mp, msgnum))
- app_msgarg(&vec, getcpy (m_name (msgnum)));
+ app_msgarg(&vec, mh_xstrdup(m_name (msgnum)));
}
app_msgarg(&vec, NULL);
{
int fd,i, msgcnt, msgnum;
int len, buflen;
- register char *bp, *msgnam;
+ char *bp, *msgnam;
char buffer[BUFSIZ];
msgcnt = 1;
if (msgnum == mp->lowsel) {
snprintf (bp, buflen, " Forwarded Message%s",
- mp->numsel > 1 ? "s" : "");
+ PLURALS(mp->numsel));
} else {
snprintf (bp, buflen, " Message %d", msgcnt);
}
strncpy (bp, "\n\n", buflen);
}
- write (out, buffer, strlen (buffer));
+ if (write (out, buffer, strlen (buffer)) < 0) {
+ advise (drft, "write");
+ }
if ((fd = open (msgnam = m_name (msgnum), O_RDONLY)) == NOTOK) {
admonish (msgnam, "unable to read message");
strncpy (buffer, delim4, sizeof(buffer));
} else {
snprintf (buffer, sizeof(buffer), "\n------- End of Forwarded Message%s\n",
- mp->numsel > 1 ? "s" : "");
+ PLURALS(mp->numsel));
+ }
+ if (write (out, buffer, strlen (buffer)) < 0) {
+ advise (drft, "write");
}
- write (out, buffer, strlen (buffer));
if (digest) {
snprintf (buffer, sizeof(buffer), "End of %s Digest [Volume %d Issue %d]\n",
*bp++ = '*';
*bp++ = '\n';
*bp = 0;
- write (out, buffer, strlen (buffer));
+ if (write (out, buffer, strlen (buffer)) < 0) {
+ advise (drft, "write");
+ }
}
}
char buffer[BUFSIZ];
snprintf (buffer, sizeof(buffer), "#forw [forwarded message%s] +%s",
- mp->numsel == 1 ? "" : "s", mp->foldpath);
- write (out, buffer, strlen (buffer));
+ PLURALS(mp->numsel), mp->foldpath);
+ if (write (out, buffer, strlen (buffer)) < 0) {
+ advise (drft, "write");
+ }
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
if (is_selected (mp, msgnum)) {
snprintf (buffer, sizeof(buffer), " %s", m_name (msgnum));
- write (out, buffer, strlen (buffer));
+ if (write (out, buffer, strlen (buffer)) < 0) {
+ advise (drft, "write");
+ }
}
- write (out, "\n", 1);
+ if (write (out, "\n", 1) < 0) {
+ advise (drft, "write newline");
+ }
}