Use sysexits.h for better exit-codes
[mmh] / uip / whatnow.c
index cd72e44..7e54929 100644 (file)
@@ -14,6 +14,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <locale.h>
+#include <sysexits.h>
 
 #ifdef HAVE_SYS_PARAM_H
 # include <sys/param.h>
@@ -109,7 +110,7 @@ main(int argc, char **argv)
        */
 
        if (!getcwd(cwd, sizeof (cwd))) {
-               adios("getcwd", "could not get working directory");
+               adios(EX_USAGE, "getcwd", "could not get working directory");
        }
 
        while ((cp = *argp++)) {
@@ -117,36 +118,36 @@ main(int argc, char **argv)
                        switch (smatch(++cp, switches)) {
                        case AMBIGSW:
                                ambigsw(cp, switches);
-                               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 [switches] [file]",
                                                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 EDITRSW:
                                if (!(ed = *argp++) || *ed == '-')
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                continue;
 
                        case PRMPTSW:
                                if (!(myprompt = *argp++) || *myprompt == '-')
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                continue;
 
                        }
                }
                if (drft)
-                       adios(NULL, "only one draft at a time!");
+                       adios(EX_USAGE, NULL, "only one draft at a time!");
                else
                        drft = cp;
        }
@@ -167,16 +168,14 @@ main(int argc, char **argv)
                        if (!use) {
                                unlink(drft);
                        }
-                       advise(NULL, "Try again.");
-                       /* sysexits.h EX_SOFTWARE */
-                       exit(1);
+                       adios(EX_SOFTWARE, NULL, "Try again.");
                }
        }
 
        snprintf(prompt, sizeof(prompt), myprompt, invo_name);
        for (;;) {
                if (!(argp = getans(prompt, aleqs))) {
-                       exit(1);
+                       exit(EX_IOERR);
                }
                switch (smatch(*argp, aleqs)) {
                case DISPSW:
@@ -207,12 +206,12 @@ main(int argc, char **argv)
                        if (stat(drft, &st) != NOTOK) {
                                advise(NULL, "draft left on %s", drft);
                        }
-                       exit(1);
+                       exit(EX_OK);
 
                case DELETESW:
                        /* Delete draft and exit */
                        removefile(drft);
-                       exit(1);
+                       exit(EX_OK);
 
                case SENDSW:
                        /* Send draft */
@@ -222,7 +221,7 @@ main(int argc, char **argv)
                case REFILEOPT:
                        /* Refile the draft */
                        if (refile(++argp, drft) == 0) {
-                               exit(0);
+                               exit(EX_OK);
                        }
                        break;
 
@@ -414,7 +413,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp)
        */
        int trailln = strlen(trailcmd) + 3;
        if (ln < 0 || ln + trailln > bufsz)
-               adios(NULL, "arguments too long");
+               adios(EX_USAGE, NULL, "arguments too long");
 
        cp = buf + ln;
 
@@ -422,7 +421,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp)
                ln = strlen(*argp);
                /* +1 for leading space */
                if (ln + trailln + 1 > bufsz - (cp-buf))
-                       adios(NULL, "arguments too long");
+                       adios(EX_USAGE, NULL, "arguments too long");
                *cp++ = ' ';
                memcpy(cp, *argp, ln+1);
                cp += ln;
@@ -456,12 +455,12 @@ system_in_dir(const char *dir, const char *cmd)
        char olddir[BUFSIZ];
        int r;
        if (getcwd(olddir, sizeof(olddir)) == 0)
-               adios("getcwd", "could not get working directory");
+               adios(EX_OSERR, "getcwd", "could not get working directory");
        if (chdir(dir) != 0)
-               adios("chdir", "could not change working directory");
+               adios(EX_OSERR, "chdir", "could not change working directory");
        r = system(cmd);
        if (chdir(olddir) != 0)
-               adios("chdir", "could not change working directory");
+               adios(EX_OSERR, "chdir", "could not change working directory");
        return r;
 }
 
@@ -472,12 +471,12 @@ popen_in_dir(const char *dir, const char *cmd, const char *type)
        char olddir[BUFSIZ];
        FILE *f;
        if (getcwd(olddir, sizeof(olddir)) == 0)
-               adios("getcwd", "could not get working directory");
+               adios(EX_OSERR, "getcwd", "could not get working directory");
        if (chdir(dir) != 0)
-               adios("chdir", "could not change working directory");
+               adios(EX_OSERR, "chdir", "could not change working directory");
        f = popen(cmd, type);
        if (chdir(olddir) != 0)
-               adios("chdir", "could not change working directory");
+               adios(EX_OSERR, "chdir", "could not change working directory");
        return f;
 }
 
@@ -519,7 +518,7 @@ editfile(char **ed, char **arg, char *file, int use)
        switch (pid = fork()) {
        case NOTOK:
                advise("fork", "unable to");
-               status = NOTOK;
+               status = EX_OSERR;
                break;
 
        case OK:
@@ -534,13 +533,13 @@ editfile(char **ed, char **arg, char *file, int use)
                execvp(*ed, vec);
                fprintf(stderr, "%s: unable to exec ", invo_name);
                perror(*ed);
-               _exit(-1);
+               _exit(EX_OSERR);
 
        default:
                if ((status = pidwait(pid, NOTOK))) {
                        if ((status & 0xff00) == 0xff00) {
                                /* cmd not found or pidwait() failed */
-                               status = -1;
+                               status = EX_SOFTWARE;
                                break;
                        }
                        if (status & 0x00ff) {
@@ -588,7 +587,7 @@ sendfile(char **arg, char *file)
        execvp(*vec, vec);
        fprintf(stderr, "%s: unable to exec ", invo_name);
        perror("send");
-       _exit(-1);
+       _exit(EX_OSERR);
 }
 
 
@@ -626,7 +625,7 @@ static int
 removefile(char *drft)
 {
        if (unlink(drft) == NOTOK)
-               adios(drft, "unable to unlink");
+               adios(EX_IOERR, drft, "unable to unlink");
 
        return OK;
 }