switch (smatch(++cp, switches)) {
case AMBIGSW:
ambigsw(cp, switches);
- exit(1);
+ exit(EX_USAGE);
case UNKWNSW:
- adios(NULL, "-%s unknown\n", cp);
+ adios(EX_USAGE, NULL, "-%s unknown\n", cp);
case HELPSW:
snprintf(buf, sizeof(buf),
"%s [file] [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 DEBUGSW:
debugsw++;
if (nmsgs) {
maildir = toabsdir(draftfolder);
if (chdir(maildir) == NOTOK) {
- adios(maildir, "unable to change directory to");
+ adios(EX_OSERR, maildir, "unable to change directory to");
}
if (!(mp = folder_read(draftfolder))) {
- adios(NULL, "unable to read draft folder %s",
+ adios(EX_IOERR, NULL, "unable to read draft folder %s",
draftfolder);
}
if (mp->nummsg == 0) {
- adios(NULL, "no messages in draft folder %s",
+ adios(EX_DATAERR, NULL, "no messages in draft folder %s",
draftfolder);
}
/* parse all the msgranges/sequences and set SELECTED */
for (msgnum = 0; msgnum < nmsgs; msgnum++) {
if (!m_convert(mp, msgs[msgnum])) {
- exit(1);
+ exit(EX_USAGE);
}
}
seq_setprev(mp);
for (n = 0; n < nfiles; n++) {
if (stat(files[n], &st) == NOTOK) {
- adios(files[n], "unable to stat draft file");
+ adios(EX_IOERR, files[n], "unable to stat draft file");
}
}
if ((cp = getenv("mhdist")) && *cp && (distsw = atoi(cp)) && altmsg) {
vec[vecp++] = "-dist";
if ((in = open(altmsg, O_RDONLY)) == NOTOK) {
- adios(altmsg, "unable to open for reading");
+ adios(EX_IOERR, altmsg, "unable to open for reading");
}
fstat(in, &st2);
distfile = getcpy(m_mktemp2(NULL, invo_name, NULL, NULL));
if ((out = creat(distfile, (int)st2.st_mode & 0777))==NOTOK) {
- adios(distfile, "unable to open for writing");
+ adios(EX_IOERR, distfile, "unable to open for writing");
}
cpydata(in, out, altmsg, distfile);
close(in);
char *p;
if (!(draft_file = fopen(draft_file_name, "r"))) {
- adios(NULL, "can't open draft file `%s'.", draft_file_name);
+ adios(EX_IOERR, NULL, "can't open draft file `%s'.", draft_file_name);
}
/* We'll grow the buffer as needed. */
if ((has_body && !body_file) || !composition_file) {
clean_up_temporary_files();
- adios(NULL, "unable to open all of the temporary files.");
+ adios(EX_IOERR, NULL, "unable to open all of the temporary files.");
}
/* Copy non-attachment header fields to the temp composition file. */
int ret;
if (!(draft_file = fopen(draft_file_name, "r"))) {
- adios(NULL, "can't open draft file `%s'.", draft_file_name);
+ adios(EX_IOERR, NULL, "can't open draft file `%s'.", draft_file_name);
}
/* We'll grow the buffer as needed. */
if (!(fp = popen(cmdbuf, "r"))) {
clean_up_temporary_files();
- adios(NULL, "unable to determine content type with `%s'",
+ adios(EX_IOERR, NULL, "unable to determine content type with `%s'",
cmdbuf);
}
if (fgets(content_type, sizeof content_type, fp) &&
/* TODO: don't use access(2) because it checks for ruid, not euid */
if (access(file_name, R_OK) != 0) {
clean_up_temporary_files();
- adios(NULL, "unable to access file `%s'", file_name);
+ adios(EX_IOERR, NULL, "unable to access file `%s'", file_name);
}
/* Check for broken file(1). See man page mh-profile(5). */
for (cp=content_type; *cp; cp++) {
if (isspace(*cp)) {
if (!semicolon) {
- adios(NULL, "Sorry, your Mime-Type-Query command (%s) is broken.\n\tThe output misses a semicolon before the whitespace.\n\tOutput was: %s", cmd, content_type);
+ adios(EX_SOFTWARE, NULL, "Sorry, your Mime-Type-Query command (%s) is broken.\n\tThe output misses a semicolon before the whitespace.\n\tOutput was: %s", cmd, content_type);
}
} else if (*cp == ';') {
semicolon = 1;
execvp(*vec, vec);
fprintf(stderr, "unable to exec ");
perror(*vec);
- _exit(-1);
+ _exit(EX_OSERR);
break; /* NOT REACHED */
default: