X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fforw.c;h=91ce04a8a29f074191885e060bfc753fea883745;hp=fe056f4a67152a6fb981d5f664e823cae6c2dc00;hb=2abb9a7cfb0930e27062088734d306e7d78e4cc2;hpb=75fca31a5b9d5c1a99c74ab14c94438d8852fba9 diff --git a/uip/forw.c b/uip/forw.c index fe056f4..91ce04a 100644 --- a/uip/forw.c +++ b/uip/forw.c @@ -11,7 +11,8 @@ #include #include #include - +#include +#include #define IFORMAT "digest-issue-%s" #define VFORMAT "digest-volume-%s" @@ -20,7 +21,7 @@ static struct swit switches[] = { #define ANNOSW 0 { "annotate", 0 }, #define NANNOSW 1 - { "noannotate", 0 }, + { "noannotate", 2 }, #define EDITRSW 2 { "editor editor", 0 }, #define FORMSW 3 @@ -34,15 +35,11 @@ static struct swit switches[] = { #define WHATSW 7 { "whatnowproc program", 0 }, #define VERSIONSW 8 - { "version", 0 }, + { "Version", 0 }, #define HELPSW 9 { "help", 0 }, - -#ifdef MHE -#define BILDSW 12 +#define BILDSW 10 { "build", 5 }, /* interface from mhe */ -#endif /* MHE */ - { NULL, 0 } }; @@ -70,14 +67,9 @@ main(int argc, char **argv) char *form = NULL, buf[BUFSIZ], value[10]; char **argp, **arguments, *msgs[MAXARGS]; char *fmtstr; - -#ifdef MHE int buildsw = 0; -#endif /* MHE */ -#ifdef LOCALE setlocale(LC_ALL, ""); -#endif invo_name = mhbasename(argv[0]); /* read user profile/context */ @@ -91,17 +83,18 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - done(1); + /* sysexits.h EX_USAGE */ + exit(1); case UNKWNSW: adios(NULL, "-%s unknown", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name); print_help(buf, switches, 1); - done(1); + exit(0); case VERSIONSW: print_version(invo_name); - done(1); + exit(0); case ANNOSW: anot++; @@ -122,11 +115,10 @@ main(int argc, char **argv) adios(NULL, "missing argument to %s", argp[-2]); continue; -#ifdef MHE + case BILDSW: - buildsw++; /* fall... */ + buildsw++; continue; -#endif /* MHE */ case FORMSW: if (!(form = *argp++) || *form == '-') @@ -169,13 +161,14 @@ main(int argc, char **argv) } cwd = getcpy(pwd()); - -#ifdef MHE - strncpy(drft, buildsw ? toabsdir("draft") - : m_draft(seq_beyond), sizeof(drft)); -#else - strncpy(drft, m_draft(seq_beyond), sizeof(drft)); -#endif /* MHE */ + strncpy(drft, buildsw ? toabsdir("draft") : m_draft(seq_beyond), + sizeof(drft)); + /* + ** FIXME: (concerning MHE support (buildsw) only) + ** There's no check if the draft already exists. mmh has removed + ** this case by having the draft folder. I won't add code only to + ** handle this legacy issue for MHE. -- meillo@marmaro.de 2012-05 + */ /* ** Forwarding a message. @@ -198,9 +191,12 @@ main(int argc, char **argv) adios(NULL, "no messages in %s", folder); /* parse all the message ranges/sequences and set SELECTED */ - for (msgnum = 0; msgnum < msgp; msgnum++) - if (!m_convert(mp, msgs[msgnum])) - done(1); + for (msgnum = 0; msgnum < msgp; msgnum++) { + if (!m_convert(mp, msgs[msgnum])) { + /* sysexits.h EX_USAGE */ + exit(1); + } + } seq_setprev(mp); /* set the previous sequence */ if ((out = creat(drft, m_gmprot())) == NOTOK) @@ -251,10 +247,10 @@ main(int argc, char **argv) context_save(); /* save the context file */ if (buildsw) - done(0); + exit(0); what_now(ed, NOUSE, drft, NULL, 0, mp, anot ? "Forwarded" : NULL, cwd); - done(1); + /* sysexits.h EX_SOFTWARE */ return 1; } @@ -266,25 +262,33 @@ static void add_forw_hdr(char *draft) { int msgnum; - char buffer[BUFSIZ]; - - snprintf(buffer, sizeof buffer, "anno -append -nodate '%s' " - "-comp '%s' -text '+%s", - draft, attach_hdr, mp->foldpath); + char buf[BUFSIZ]; + char *vec[MAXARGS]; + int vecp = 0; + + vec[vecp++] = "anno"; + vec[vecp++] = "-append"; + vec[vecp++] = "-nodate"; + vec[vecp++] = draft; + vec[vecp++] = "-comp"; + vec[vecp++] = attach_hdr; + vec[vecp++] = "-text"; + snprintf(buf, sizeof buf, "+%s", mp->foldpath); for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { if (!is_selected(mp, msgnum)) { continue; } - /* TODO: Check for buffer length! */ - strcat(buffer, " "); - strcat(buffer, m_name(msgnum)); - } - strcat(buffer, "'"); - /* TODO: This check is bad, but better than nothing */ - if (strlen(buffer) > BUFSIZ) { - adios(NULL, "Too long attachment header line. Forward less messages."); + if (strlen(buf) + 1 + strlen(m_name(msgnum)) + 1 + > sizeof buf) { + adios(NULL, "Attachment header line too long. " + "Forward less messages."); + } + strcat(buf, " "); + strcat(buf, m_name(msgnum)); } - if (system(buffer) != 0) { + vec[vecp++] = buf; + vec[vecp] = NULL; + if (execprog(*vec, vec) != 0) { advise(NULL, "unable to add attachment header"); } }