Use sysexits.h for better exit-codes
[mmh] / uip / slocal.c
index 41f986d..eac77e4 100644 (file)
@@ -28,6 +28,7 @@
 #include <stdarg.h>
 #include <sys/stat.h>
 #include <locale.h>
+#include <sysexits.h>
 
 #ifdef INITGROUPS_HEADER
 #include INITGROUPS_HEADER
@@ -189,72 +190,72 @@ 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] [address info sender]", invo_name);
                                print_help(buf, switches, 0);
-                               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 ADDRSW:
                                if (!(addr = *argp++)) {
                                        /* allow -xyz arguments */
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
                        case INFOSW:
                                if (!(info = *argp++)) {
                                        /* allow -xyz arguments */
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
                        case USERSW:
                                if (!(user = *argp++)) {
                                        /* allow -xyz arguments */
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
                        case FILESW:
                                if (!(file = *argp++) || *file == '-') {
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
                        case SENDERSW:
                                if (!(sender = *argp++)) {
                                        /* allow -xyz arguments */
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
                        case MAILBOXSW:
                                if (!(mbox = *argp++) || *mbox == '-') {
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
                        case HOMESW:
                                if (!(home = *argp++) || *home == '-') {
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                continue;
 
                        case MAILSW:
                                if (!(cp = *argp++) || *cp == '-') {
-                                       adios(NULL, "missing argument to %s",
+                                       adios(EX_USAGE, NULL, "missing argument to %s",
                                                        argp[-2]);
                                }
                                if (mdlvr) {
-                                       adios(NULL, "only one maildelivery file at a time!");
+                                       adios(EX_USAGE, NULL, "only one maildelivery file at a time!");
                                }
                                mdlvr = cp;
                                continue;
@@ -292,7 +293,7 @@ main(int argc, char **argv)
                user = (cp = strchr(addr, '.')) ? ++cp : addr;
        }
        if (!(pw = getpwnam(user))) {
-               adios(NULL, "no such local user as %s", user);
+               adios(EX_NOUSER, NULL, "no such local user as %s", user);
        }
 
        if (chdir(pw->pw_dir) == -1) {
@@ -314,7 +315,7 @@ main(int argc, char **argv)
 
        /* Record the delivery time */
        if (!(now = dlocaltimenow())) {
-               adios(NULL, "unable to ascertain local time");
+               adios(EX_OSERR, NULL, "unable to ascertain local time");
        }
        snprintf(ddate, sizeof(ddate), "Delivery-Date: %s\n", dtimenow());
 
@@ -326,14 +327,14 @@ main(int argc, char **argv)
 
                /* getting message from file */
                if ((tempfd = open(file, O_RDONLY)) == -1) {
-                       adios(file, "unable to open");
+                       adios(EX_IOERR, file, "unable to open");
                }
                if (debug) {
                        debug_printf("retrieving message from file \"%s\"\n",
                                        file);
                }
                if ((fd = copy_message(tempfd, tmpfil, 1)) == -1) {
-                       adios(NULL, "unable to create temporary file");
+                       adios(EX_CANTCREAT, NULL, "unable to create temporary file");
                }
                close(tempfd);
        } else {
@@ -342,7 +343,7 @@ main(int argc, char **argv)
                        debug_printf("retrieving message from stdin\n");
                }
                if ((fd = copy_message(fileno(stdin), tmpfil, 1)) == -1) {
-                       adios(NULL, "unable to create temporary file");
+                       adios(EX_CANTCREAT, NULL, "unable to create temporary file");
                }
        }
 
@@ -368,7 +369,7 @@ main(int argc, char **argv)
        unlink(tmpfil);
 
        if (!(fp = fdopen(fd, "r+"))) {
-               adios(NULL, "unable to access temporary file");
+               adios(EX_IOERR, NULL, "unable to access temporary file");
        }
 
        /* If no sender given, extract it from envelope information. */
@@ -1032,7 +1033,7 @@ usr_pipe(int fd, char *cmd, char *pgm, char **vec, int suppress)
                m_putenv("PATH", path);
 
                execvp(pgm, vec);
-               _exit(-1);
+               _exit(EX_OSERR);
 
        default:
                /* parent process */