X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fforw.c;h=c754b2789c66c3c48d79cf5583a600afa1fb0a55;hp=57e508f026096be7756354fa6b39198523107007;hb=cf1205b5cbea2f0cd6ea710ec16c637df85b647c;hpb=1e42112bb983f886f389b1fa3ef4d90a4dad4f91 diff --git a/uip/forw.c b/uip/forw.c index 57e508f..c754b27 100644 --- a/uip/forw.c +++ b/uip/forw.c @@ -11,7 +11,9 @@ #include #include #include - +#include +#include +#include #define IFORMAT "digest-issue-%s" #define VFORMAT "digest-volume-%s" @@ -82,17 +84,17 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - done(1); + exit(EX_USAGE); case UNKWNSW: - adios(NULL, "-%s unknown", cp); + adios(EX_USAGE, NULL, "-%s unknown", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name); print_help(buf, switches, 1); - done(1); + exit(argc == 2 ? EX_OK : EX_USAGE); case VERSIONSW: print_version(invo_name); - done(1); + exit(argc == 2 ? EX_OK : EX_USAGE); case ANNOSW: anot++; @@ -103,14 +105,14 @@ main(int argc, char **argv) case EDITRSW: if (!(ed = *argp++) || *ed == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); continue; case WHATSW: if (!(whatnowproc = *argp++) || *whatnowproc == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); continue; @@ -120,37 +122,37 @@ main(int argc, char **argv) case FORMSW: if (!(form = *argp++) || *form == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); continue; case DGSTSW: if (!(digest = *argp++) || *digest == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); //mime = 0; continue; case ISSUESW: if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); if ((issue = atoi(cp)) < 1) - adios(NULL, "bad argument %s %s", + adios(EX_USAGE, NULL, "bad argument %s %s", argp[-2], cp); continue; case VOLUMSW: if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); if ((volume = atoi(cp)) < 1) - adios(NULL, "bad argument %s %s", + adios(EX_USAGE, NULL, "bad argument %s %s", argp[-2], cp); continue; } } if (*cp == '+' || *cp == '@') { if (folder) - adios(NULL, "only one folder at a time!"); + adios(EX_USAGE, NULL, "only one folder at a time!"); else folder = getcpy(expandfol(cp)); } else { @@ -178,24 +180,26 @@ main(int argc, char **argv) maildir = toabsdir(folder); if (chdir(maildir) == NOTOK) - adios(maildir, "unable to change directory to"); + adios(EX_OSERR, maildir, "unable to change directory to"); /* read folder and create message structure */ if (!(mp = folder_read(folder))) - adios(NULL, "unable to read folder %s", folder); + adios(EX_IOERR, NULL, "unable to read folder %s", folder); /* check for empty folder */ if (mp->nummsg == 0) - adios(NULL, "no messages in %s", folder); + adios(EX_DATAERR, 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])) { + exit(EX_SOFTWARE); + } + } seq_setprev(mp); /* set the previous sequence */ if ((out = creat(drft, m_gmprot())) == NOTOK) - adios(drft, "unable to create"); + adios(EX_CANTCREAT, drft, "unable to create"); /* Open form (component) file. */ if (digest) { @@ -220,7 +224,7 @@ main(int argc, char **argv) } else { fmtstr = new_fs(form, forwcomps); if (write(out, fmtstr, strlen(fmtstr)) != (int)strlen(fmtstr)) { - adios(drft, "error writing"); + adios(EX_IOERR, drft, "error writing"); } } close(out); @@ -242,11 +246,10 @@ main(int argc, char **argv) context_save(); /* save the context file */ if (buildsw) - done(0); + exit(EX_OK); what_now(ed, NOUSE, drft, NULL, 0, mp, anot ? "Forwarded" : NULL, cwd); - done(1); - return 1; + return EX_OSERR; } @@ -275,7 +278,7 @@ add_forw_hdr(char *draft) } if (strlen(buf) + 1 + strlen(m_name(msgnum)) + 1 > sizeof buf) { - adios(NULL, "Attachment header line too long. " + adios(EX_DATAERR, NULL, "Attachment header line too long. " "Forward less messages."); } strcat(buf, " "); @@ -323,18 +326,20 @@ build_form(char *form, char *digest, int volume, int issue) dat[4] = 0; cp = m_mktemp2(NULL, invo_name, NULL, &tmp); - if (cp == NULL) adios("forw", "unable to create temporary file"); + if (cp == NULL) { + adios(EX_CANTCREAT, "forw", "unable to create temporary file"); + } strncpy(tmpfil, cp, sizeof(tmpfil)); unlink(tmpfil); if ((in = dup(fileno(tmp))) == NOTOK) - adios("dup", "unable to"); + adios(EX_OSERR, "dup", "unable to"); line = mh_xmalloc((unsigned) fmtsize); fmt_scan(fmt, line, fmtsize, dat); fputs(line, tmp); free(line); if (fclose(tmp)) - adios(tmpfil, "error writing"); + adios(EX_IOERR, tmpfil, "error writing"); lseek(in, (off_t) 0, SEEK_SET); return in;