X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fwhatnow.c;h=7e54929ff444196c848d98ca3b0d8674d27758bc;hp=cd72e446483564434de42f6951bad5e7e3c3f1bd;hb=cf1205b5cbea2f0cd6ea710ec16c637df85b647c;hpb=d254c5e2ad008f26d5fda43c3f24f0a711c7e851 diff --git a/uip/whatnow.c b/uip/whatnow.c index cd72e44..7e54929 100644 --- a/uip/whatnow.c +++ b/uip/whatnow.c @@ -14,6 +14,7 @@ #include #include #include +#include #ifdef HAVE_SYS_PARAM_H # include @@ -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; }