From 3caf9e298a8861729ca8b8a84f57022b6f3ea742 Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Wed, 8 Feb 2012 22:30:30 +0100 Subject: [PATCH] Call anno(1) instead of compiling annosbr.c into send(1). This time we don't even get slower. Not that I'd care for speed ... --- uip/Makefile.in | 4 +- uip/send.c | 115 +++++-------------------------------------------------- 2 files changed, 12 insertions(+), 107 deletions(-) diff --git a/uip/Makefile.in b/uip/Makefile.in index 80e8001..6f15303 100644 --- a/uip/Makefile.in +++ b/uip/Makefile.in @@ -204,8 +204,8 @@ rmm: rmm.o $(LOCALLIBS) scan: scan.o scansbr.o termsbr.o $(LOCALLIBS) $(LINK) scan.o scansbr.o termsbr.o $(LINKLIBS) $(TERMLIB) -send: send.o annosbr.o distsbr.o $(LOCALLIBS) - $(LINK) send.o annosbr.o distsbr.o $(LINKLIBS) +send: send.o distsbr.o $(LOCALLIBS) + $(LINK) send.o distsbr.o $(LINKLIBS) sendfiles: sendfiles.sh cp sendfiles.sh sendfiles diff --git a/uip/send.c b/uip/send.c index 3055df7..c85ac8e 100644 --- a/uip/send.c +++ b/uip/send.c @@ -55,7 +55,6 @@ static void armed_done(int) NORETURN; static void alert(char *, int); static int tmp_fd(void); 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); @@ -807,10 +806,9 @@ tmp_fd(void) static void anno(struct stat *st) { - pid_t child_id; - sigset_t set, oset; - static char *cwd = NULL; struct stat st2; + char *msgs, *folder; + char buf[BUFSIZ]; if (altmsg && (stat(altmsg, &st2) == NOTOK || st->st_mtime != st2.st_mtime || @@ -822,120 +820,27 @@ anno(struct stat *st) return; } - child_id = debugsw ? NOTOK : fork(); - switch (child_id) { - case NOTOK: /* oops */ - if (!debugsw) { - advise(NULL, "unable to fork, so doing annotations by hand..."); - } - if (!cwd) { - cwd = getcpy(pwd()); - } - /* fall */ - - case OK: - /* block a few signals */ - sigemptyset(&set); - sigaddset(&set, SIGHUP); - sigaddset(&set, SIGINT); - sigaddset(&set, SIGQUIT); - sigaddset(&set, SIGTERM); - SIGPROCMASK(SIG_BLOCK, &set, &oset); - - annoaux(); - if (child_id == OK) { - _exit(0); - } - - /* reset the signal mask */ - SIGPROCMASK(SIG_SETMASK, &oset, &set); - - chdir(cwd); - break; - - default: /* no waiting... */ - break; - } -} - - -static void -annoaux(void) -{ - int fd2, fd3, msgnum; - char *cp, *folder, *maildir; - char **ap; - struct msgs *mp; - if (!(folder = getenv("mhfolder")) || !*folder) { if (debugsw) { admonish(NULL, "$mhfolder not set"); } return; } - maildir = toabsdir(folder); - if (chdir(maildir) == NOTOK) { - if (debugsw) { - admonish(maildir, "unable to change directory to"); - } - return; - } - if (!(mp = folder_read(folder))) { - if (debugsw) { - admonish(NULL, "unable to read folder %s", folder); - } - return; - } - - if (mp->nummsg == 0) { - if (debugsw) { - admonish(NULL, "no messages in %s", folder); - } - goto oops; - } - if ((cp = getenv("mhmessages")) == NULL || *cp == 0) { + if (!(msgs = getenv("mhmessages")) || !*msgs) { if (debugsw) { admonish(NULL, "$mhmessages not set"); } - goto oops; - } - if (!debugsw /* MOBY HACK... */ - && pushsw - && (fd3 = open("/dev/null", O_RDWR)) != NOTOK - && (fd2 = dup(fileno(stderr))) != NOTOK) { - dup2(fd3, fileno(stderr)); - close(fd3); - } else { - fd2 = NOTOK; - } - for (ap = brkstring(cp = getcpy(cp), " ", NULL); *ap; ap++) { - m_convert(mp, *ap); - } - free(cp); - if (fd2 != NOTOK) { - dup2(fd2, fileno(stderr)); - } - if (mp->numsel == 0) { - if (debugsw) { - admonish(NULL, "no messages to annotate"); - } - goto oops; + return; } - if (debugsw) { - advise(NULL, "annotate as `%s'", annotext); + advise(NULL, "annotate as `%s': %s %s", annotext, + folder, msgs); } - 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, NULL, 1, -2, 0); - } + snprintf(buf, sizeof buf, "anno -comp '%s' '+%s' %s", + annotext, folder, msgs); + if (system(buf) != 0) { + advise(NULL, "unable to annotate"); } - -oops: - folder_free(mp); } -- 1.7.10.4