Subject: Re: a few minor cleanups to src/share/misc/style
To: , <tech-userlevel@netbsd.org>
From: Chris G. Demetriou <cgd@sibyte.com>
List: tech-kern
Date: 03/21/2001 21:50:55
woods@weird.com (Greg A. Woods) writes:
> Some failures aren't "random".

this is true.  there are some exit code interfaces interfaces that
rely on those.

However:

> There are a few common classes of
> errors, common enough that there are even de facto standards for exit
> codes to represent them, the most common probably being usage errors
> (with a corresponding exit value of 2).

(1) "2 == usage error" is not in fact a well defined exit code value,
as far as I know; i've never seen a program invoking another try to
differentiate 'usage error' with "2", certainly...

(2) that disagrees with sysexits.h, and

(3) that disagrees with the one other (undocumented as far as I know,
though i'll admit that i've not looked hard) error code convention
i've seen, the one used by fsck.


> It would seem to me to be a very good thing to try and continue to
> "standardise" on using the manifests defined in <sysexits.h>.

Given that:

(1) approximately nothing does that now,

(2) except in special circumstances (where things do it now), there's
no great reason to because the only status cared about is
success/failure,

(3) C89 <stdlib.h> defines EXIT_SUCCESS & EXIT_FAILURE (and no other
exit code), and

(4) EXIT_SUCCESS and EXIT_FAILURE just happen to be symolic names for
the existing values already spec'd by KNF,

I'm inclined to recommend EXIT_SUCCESS and EXIT_FAILURE and only them
in src/share/misc/style.


BTW, i did a gre, and the only includes of sysexits.h in the NetBSD
source tree, excluding the stuff in the sendmail and postfix sources,
are:

./libexec/rmail/rmail.c:#include <sysexits.h>
./sbin/mount_ntfs/mount_ntfs.c:#include <sysexits.h>
./usr.sbin/isdn/isdnd/rc_scan.l:#include <sysexits.h>
./usr.sbin/isdn/ispppcontrol/ispppcontrol.c:#include <sysexits.h>
./gnu/libexec/uucp/libunix/xqtsub.c:#include <sysexits.h>
./sys/dev/microcode/aic7xxx/aicasm.c:#include <sysexits.h>
./sys/dev/microcode/aic7xxx/aicasm_gram.y:#include <sysexits.h>
./sys/dev/microcode/aic7xxx/aicasm_scan.l:#include <sysexits.h>
./sys/dev/microcode/aic7xxx/aicasm_symbol.c:#include <sysexits.h>

that doesn't speak well for their practical utility, and I don't see
that we should go on a crusade to change that.


cgd