static void armed_done(int) NORETURN;
static void alert(char *, int);
static int tmp_fd(void);
-static void anno(int, struct stat *);
-static void annoaux(int);
+static void anno(struct stat *);
+static void annoaux(void);
static int sendaux(char **, int, char *, struct stat *);
static int attach(char *);
static void clean_up_temporary_files(void);
sendaux(char **vec, int vecp, char *drft, struct stat *st)
{
pid_t child_id;
- int i, status, fd, fd2;
+ int i, status, fd;
char backup[BUFSIZ];
+ /*
+ ** fd collects the output of postproc, and is used for the
+ ** failure notice if we need to send one in alert().
+ */
fd = pushsw ? tmp_fd() : NOTOK;
- fd2 = NOTOK;
vec[vecp++] = drft;
- if (annotext && (fd2 = tmp_fd()) == NOTOK) {
- admonish(NULL, "unable to create file for annotation list");
- }
if (distfile && distout(drft, distfile, backup) == NOTOK) {
done(1);
}
for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) {
sleep(5);
}
-
switch (child_id) {
case -1:
/* oops -- fork error */
default:
/* parent process -- wait for it */
if ((status = pidwait(child_id, NOTOK)) == OK) {
- if (annotext && fd2 != NOTOK)
- anno(fd2, st);
+ if (annotext) {
+ anno(st);
+ }
} else {
/*
** If postproc failed, and we have good fd (which
} else {
advise(NULL, "message not delivered to anyone");
}
- if (annotext && fd2 != NOTOK) {
- close(fd2);
- }
if (distfile) {
unlink(drft);
if (rename(backup, drft) == NOTOK) {
static void
-anno(int fd, struct stat *st)
+anno(struct stat *st)
{
pid_t child_id;
sigset_t set, oset;
sigaddset(&set, SIGTERM);
SIGPROCMASK(SIG_BLOCK, &set, &oset);
- annoaux(fd);
+ annoaux();
if (child_id == OK) {
_exit(0);
}
break;
default: /* no waiting... */
- close(fd);
break;
}
}
static void
-annoaux(int fd)
+annoaux(void)
{
int fd2, fd3, msgnum;
char *cp, *folder, *maildir;
- char buffer[BUFSIZ], **ap;
- FILE *fp;
+ char **ap;
struct msgs *mp;
if (!(folder = getenv("mhfolder")) || !*folder) {
goto oops;
}
- lseek(fd, (off_t) 0, SEEK_SET);
- if ((fp = fdopen(fd, "r")) == NULL) {
- if (debugsw) {
- admonish(NULL, "unable to fdopen annotation list");
- }
- goto oops;
- }
- cp = NULL;
- while (fgets(buffer, sizeof(buffer), fp) != NULL) {
- cp = add(buffer, cp);
- }
- fclose(fp);
-
if (debugsw) {
- advise(NULL, "annotate%s with %s: \"%s\"",
- inplace ? " inplace" : "", annotext, cp);
+ advise(NULL, "annotate%s as `%s'", inplace ? " inplace" : "",
+ annotext);
}
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
if (is_selected(mp, msgnum)) {
if (debugsw) {
advise(NULL, "annotate message %d", msgnum);
}
- annotate(m_name(msgnum), annotext, cp, inplace,
+ annotate(m_name(msgnum), annotext, NULL, inplace,
1, -2, 0);
}
}
- free(cp);
oops:
folder_free(mp);