X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fsend.c;h=1529c0faa13e16cdf96f6d1fbf6b2abe83a2716b;hp=d52b9e352b6d41eb23925c6b690d689e501de3d3;hb=f3cb7cde0e6f10451b6848678d95860d512224b9;hpb=7b300825615f4d13c2c1a1bd0d05462f9708b7e7 diff --git a/uip/send.c b/uip/send.c index d52b9e3..1529c0f 100644 --- a/uip/send.c +++ b/uip/send.c @@ -29,7 +29,6 @@ int debugsw = 0; /* global */ int forwsw = 1; -int inplace = 1; int pushsw = 0; int verbsw = 0; char *altmsg = NULL; @@ -56,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); @@ -69,33 +67,25 @@ static struct swit switches[] = { { "alias aliasfile", 0 }, #define DEBUGSW 1 { "debug", -5 }, -#define FILTSW 2 - { "filter filterfile", 0 }, -#define NFILTSW 3 - { "nofilter", 0 }, -#define FRMTSW 4 - { "format", 0 }, -#define NFRMTSW 5 - { "noformat", 0 }, -#define FORWSW 6 +#define FORWSW 2 { "forward", 0 }, -#define NFORWSW 7 +#define NFORWSW 3 { "noforward", 0 }, -#define PUSHSW 8 +#define PUSHSW 4 { "push", 0 }, -#define NPUSHSW 9 +#define NPUSHSW 5 { "nopush", 0 }, -#define VERBSW 10 +#define VERBSW 6 { "verbose", 0 }, -#define NVERBSW 11 +#define NVERBSW 7 { "noverbose", 0 }, -#define WATCSW 12 +#define WATCSW 8 { "watch", 0 }, -#define NWATCSW 13 +#define NWATCSW 9 { "nowatch", 0 }, -#define VERSIONSW 14 +#define VERSIONSW 10 { "version", 0 }, -#define HELPSW 15 +#define HELPSW 11 { "help", 0 }, { NULL, 0 } }; @@ -174,16 +164,12 @@ main(int argc, char **argv) case DEBUGSW: debugsw++; /* fall */ - case NFILTSW: - case FRMTSW: - case NFRMTSW: case WATCSW: case NWATCSW: vec[vecp++] = --cp; continue; case ALIASW: - case FILTSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') { adios(NULL, "missing argument to %s", @@ -260,9 +246,6 @@ main(int argc, char **argv) if (!(annotext = getenv("mhannotate")) || !*annotext) { annotext = NULL; } - if (annotext && ((cp = getenv("mhinplace")) && *cp)) { - inplace = atoi(cp); - } if (!(altmsg = getenv("mhaltmsg")) || !*altmsg) { altmsg = NULL; /* used by dist interface - see below */ } @@ -811,10 +794,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 || @@ -826,122 +808,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%s as `%s'", inplace ? " inplace" : "", - 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, inplace, - 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); }