X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fsend.c;h=d52b9e352b6d41eb23925c6b690d689e501de3d3;hb=7b300825615f4d13c2c1a1bd0d05462f9708b7e7;hp=2cf9757683a14817421407d7735a7f7076818c44;hpb=f91306c3767cfdca47dd84ab865947c9dda9a745;p=mmh diff --git a/uip/send.c b/uip/send.c index 2cf9757..d52b9e3 100644 --- a/uip/send.c +++ b/uip/send.c @@ -55,8 +55,8 @@ static int sendsbr(char **, int, char *, struct stat *, int); 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); @@ -648,16 +648,16 @@ static int 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); } @@ -666,7 +666,6 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st) for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) { sleep(5); } - switch (child_id) { case -1: /* oops -- fork error */ @@ -694,8 +693,9 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st) 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 @@ -708,9 +708,6 @@ sendaux(char **vec, int vecp, char *drft, struct stat *st) } else { advise(NULL, "message not delivered to anyone"); } - if (annotext && fd2 != NOTOK) { - close(fd2); - } if (distfile) { unlink(drft); if (rename(backup, drft) == NOTOK) { @@ -812,7 +809,7 @@ tmp_fd(void) static void -anno(int fd, struct stat *st) +anno(struct stat *st) { pid_t child_id; sigset_t set, oset; @@ -849,7 +846,7 @@ anno(int fd, struct stat *st) sigaddset(&set, SIGTERM); SIGPROCMASK(SIG_BLOCK, &set, &oset); - annoaux(fd); + annoaux(); if (child_id == OK) { _exit(0); } @@ -861,19 +858,17 @@ anno(int fd, struct stat *st) 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) { @@ -931,33 +926,19 @@ annoaux(int fd) 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);