Use sysexits.h for better exit-codes
[mmh] / uip / forw.c
index 91ce04a..c754b27 100644 (file)
@@ -13,6 +13,7 @@
 #include <h/utils.h>
 #include <unistd.h>
 #include <locale.h>
+#include <sysexits.h>
 
 #define IFORMAT  "digest-issue-%s"
 #define VFORMAT  "digest-volume-%s"
@@ -83,18 +84,17 @@ main(int argc, char **argv)
                        switch (smatch(++cp, switches)) {
                        case AMBIGSW:
                                ambigsw(cp, switches);
-                               /* sysexits.h EX_USAGE */
-                               exit(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);
-                               exit(0);
+                               exit(argc == 2 ? EX_OK : EX_USAGE);
                        case VERSIONSW:
                                print_version(invo_name);
-                               exit(0);
+                               exit(argc == 2 ? EX_OK : EX_USAGE);
 
                        case ANNOSW:
                                anot++;
@@ -105,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;
 
@@ -122,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 {
@@ -180,27 +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])) {
-                       /* sysexits.h EX_USAGE */
-                       exit(1);
+                       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) {
@@ -225,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);
@@ -247,11 +246,10 @@ main(int argc, char **argv)
        context_save();  /* save the context file */
 
        if (buildsw)
-               exit(0);
+               exit(EX_OK);
        what_now(ed, NOUSE, drft, NULL, 0, mp,
                anot ? "Forwarded" : NULL, cwd);
-       /* sysexits.h EX_SOFTWARE */
-       return 1;
+       return EX_OSERR;
 }
 
 
@@ -280,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, " ");
@@ -328,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;