Alas, you are changing the behaviour in many places now.
for example you are calling exit(8) where previously
the errexit code would print a newline then exit (making the
previous interactive response not look stupid).
You are also, of course, spitting out "fcsk:" in front of the error
messages you are printing out, although this is less of a problem imo.
You are also using "errx" a lot of places where you have just come back
from a system call and have a legitimate errno.. You should use err()
in these places instead and change the error message appropriately to
allow for the strerror being printed.
On Sat, Sep 19, 2015 at 08:14:43PM -0400, Michael McConville wrote:
> Bob Beck wrote:
> > Michael McConville wrote:
> > > Bob Beck wrote:
> > > > seeing "8" everywhere here makes me think I'm in OpenSSL code.
> > > >
> > > > please make that some sort of sensible define.
> > > >
> > > > And post this with the removal of the function, so do it
> > > > everywhere. I can't tell from the diff that it's sane.
> > >
> > > Below is a complete removal of errexit(), as requested on ICB.
> > >
> > > I replaced a couple fprintf/exit combos too, which should also be
> > > errx().
> >
> > You still have "8" everywhere.. not 1, or 16, or 256 :)
> >
> > I realize we don't want the behaviour to change but can this be a #define?
> >
> > magically chosen ass numbers everywhere are bad.
>
> Is FSCKFAIL too wordy? FSFAIL could carry false implications and EFAIL
> is a little tautological.
>
> Feel free to s/FSCKFAIL/better-idea/, of course. No strong feelings
> here.
>
>
> Index: fsck/fsutil.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck/fsutil.c,v
> retrieving revision 1.21
> diff -u -p -r1.21 fsutil.c
> --- fsck/fsutil.c 29 May 2015 15:57:36 -0000 1.21
> +++ fsck/fsutil.c 20 Sep 2015 00:00:38 -0000
> @@ -73,18 +73,6 @@ hotroot(void)
> return hot;
> }
>
> -/*VARARGS*/
> -void
> -errexit(const char *fmt, ...)
> -{
> - va_list ap;
> -
> - va_start(ap, fmt);
> - (void) vfprintf(stderr, fmt, ap);
> - va_end(ap);
> - exit(8);
> -}
> -
> static void
> vmsg(int fatal, const char *fmt, va_list ap)
> {
> Index: fsck/fsutil.h
> ===================================================================
> RCS file: /cvs/src/sbin/fsck/fsutil.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 fsutil.h
> --- fsck/fsutil.h 8 Oct 2014 16:27:53 -0000 1.7
> +++ fsck/fsutil.h 20 Sep 2015 00:00:38 -0000
> @@ -31,8 +31,6 @@
> */
>
> void xperror(const char *);
> -void errexit(const char *, ...)
> - __attribute__((__noreturn__,__format__(__printf__,1,2)));
> void pfatal(const char *, ...)
> __attribute__((__format__(__printf__,1,2)));
> void pwarn(const char *, ...)
> @@ -48,6 +46,8 @@ int hotroot(void);
> void *emalloc(size_t);
> void *ereallocarray(void *, size_t, size_t);
> char *estrdup(const char *);
> +
> +#define FSCKFAIL 8
>
> #define CHECK_PREEN 1
> #define CHECK_VERBOSE 2
> Index: fsck_ext2fs/dir.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/dir.c,v
> retrieving revision 1.20
> diff -u -p -r1.20 dir.c
> --- fsck_ext2fs/dir.c 16 Jan 2015 06:39:57 -0000 1.20
> +++ fsck_ext2fs/dir.c 20 Sep 2015 00:00:39 -0000
> @@ -40,6 +40,7 @@
>
> #include <ufs/ufs/dinode.h> /* for IFMT & friends */
>
> +#include <err.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -114,13 +115,11 @@ dirscan(struct inodesc *idesc)
> long blksiz;
> char *dbuf = NULL;
>
> - if ((dbuf = malloc(sblock.e2fs_bsize)) == NULL) {
> - fprintf(stderr, "out of memory");
> - exit(8);
> - }
> + if ((dbuf = malloc(sblock.e2fs_bsize)) == NULL)
> + errx(FSCKFAIL, "out of memory");
>
> if (idesc->id_type != DATA)
> - errexit("wrong type to dirscan %d\n", idesc->id_type);
> + errx(FSCKFAIL, "wrong type to dirscan %d", idesc->id_type);
> if (idesc->id_entryno == 0 &&
> (idesc->id_filesize & (sblock.e2fs_bsize - 1)) != 0)
> idesc->id_filesize = roundup(idesc->id_filesize,
> sblock.e2fs_bsize);
> @@ -532,10 +531,8 @@ expanddir(struct ext2fs_dinode *dp, char
> sblock.e2fs_bsize);
> if (bp->b_errs)
> goto bad;
> - if ((firstblk = malloc(sblock.e2fs_bsize)) == NULL) {
> - fprintf(stderr, "out of memory\n");
> - exit(8);
> - }
> + if ((firstblk = malloc(sblock.e2fs_bsize)) == NULL)
> + errx(FSCKFAIL, "out of memory");
> memcpy(firstblk, bp->b_un.b_buf, sblock.e2fs_bsize);
> bp = getdirblk(newblk, sblock.e2fs_bsize);
> if (bp->b_errs) {
> Index: fsck_ext2fs/inode.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/inode.c,v
> retrieving revision 1.25
> diff -u -p -r1.25 inode.c
> --- fsck_ext2fs/inode.c 16 Jan 2015 06:39:57 -0000 1.25
> +++ fsck_ext2fs/inode.c 20 Sep 2015 00:00:39 -0000
> @@ -46,6 +46,7 @@
> #include <string.h>
> #include <time.h>
> #include <limits.h>
> +#include <err.h>
>
> #include "fsck.h"
> #include "fsutil.h"
> @@ -332,7 +333,7 @@ ginode(ino_t inumber)
>
> if ((inumber < EXT2_FIRSTINO && inumber != EXT2_ROOTINO)
> || inumber > maxino)
> - errexit("bad inode number %llu to ginode\n",
> + errx(FSCKFAIL, "bad inode number %llu to ginode",
> (unsigned long long)inumber);
> if (startinum == 0 ||
> inumber < startinum || inumber >= startinum + sblock.e2fs_ipb) {
> @@ -361,7 +362,7 @@ getnextinode(ino_t inumber)
> static struct ext2fs_dinode *dp;
>
> if (inumber != nextino++ || inumber > maxino)
> - errexit("bad inode number %llu to nextinode\n",
> + errx(FSCKFAIL, "bad inode number %llu to nextinode",
> (unsigned long long)inumber);
> if (inumber >= lastinum) {
> readcnt++;
> @@ -400,7 +401,7 @@ resetinodebuf(void)
> }
> if (inodebuf == NULL &&
> (inodebuf = malloc((unsigned)inobufsize)) == NULL)
> - errexit("Cannot allocate space for inode buffer\n");
> + errx(FSCKFAIL, "Cannot allocate space for inode buffer");
> while (nextino < EXT2_ROOTINO)
> (void)getnextinode(nextino);
> }
> @@ -452,7 +453,7 @@ cacheino(struct ext2fs_dinode *dp, ino_t
> inpsort = reallocarray(inpsort, listmax,
> sizeof(struct inoinfo *));
> if (inpsort == NULL)
> - errexit("cannot increase directory list\n");
> + errx(FSCKFAIL, "cannot increase directory list");
> }
> inpsort[inplast++] = inp;
> }
> @@ -470,7 +471,7 @@ getinoinfo(ino_t inumber)
> continue;
> return (inp);
> }
> - errexit("cannot find inode %llu\n", (unsigned long long)inumber);
> + errx(FSCKFAIL, "cannot find inode %llu", (unsigned long long)inumber);
> return (NULL);
> }
>
> @@ -601,7 +602,7 @@ blkerror(ino_t ino, char *type, daddr32_
> return;
>
> default:
> - errexit("BAD STATE %d TO BLKERR\n", statemap[ino]);
> + errx(FSCKFAIL, "BAD STATE %d TO BLKERR", statemap[ino]);
> /* NOTREACHED */
> }
> }
> Index: fsck_ext2fs/main.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/main.c,v
> retrieving revision 1.22
> diff -u -p -r1.22 main.c
> --- fsck_ext2fs/main.c 7 Feb 2015 02:09:13 -0000 1.22
> +++ fsck_ext2fs/main.c 20 Sep 2015 00:00:39 -0000
> @@ -44,6 +44,7 @@
> #include <stdio.h>
> #include <time.h>
> #include <unistd.h>
> +#include <err.h>
>
> #include "fsck.h"
> #include "extern.h"
> @@ -85,7 +86,7 @@ main(int argc, char *argv[])
> case 'm':
> lfmode = argtoi('m', "mode", optarg, 8);
> if (lfmode &~ 07777)
> - errexit("bad mode to -m: %o\n", lfmode);
> + errx(FSCKFAIL, "bad mode to -m: %o", lfmode);
> printf("** lost+found creation mode %o\n", lfmode);
> break;
>
> @@ -136,7 +137,7 @@ argtoi(int flag, char *req, char *str, i
>
> ret = (int)strtol(str, &cp, base);
> if (cp == str || *cp)
> - errexit("-%c flag requires a %s\n", flag, req);
> + errx(FSCKFAIL, "-%c flag requires a %s", flag, req);
> return (ret);
> }
>
> Index: fsck_ext2fs/pass1.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/pass1.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 pass1.c
> --- fsck_ext2fs/pass1.c 20 Aug 2015 22:02:20 -0000 1.16
> +++ fsck_ext2fs/pass1.c 20 Sep 2015 00:00:39 -0000
> @@ -243,7 +243,7 @@ checkinode(ino_t inumber, struct inodesc
> if (zlnp == NULL) {
> pfatal("LINK COUNT TABLE OVERFLOW");
> if (reply("CONTINUE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> } else {
> zlnp->zlncnt = inumber;
> zlnp->next = zlnhead;
> @@ -305,7 +305,7 @@ pass1check(struct inodesc *idesc)
> if (preen)
> printf(" (SKIPPING)\n");
> else if (reply("CONTINUE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> return (STOP);
> }
> }
> @@ -323,14 +323,14 @@ pass1check(struct inodesc *idesc)
> if (preen)
> printf(" (SKIPPING)\n");
> else if (reply("CONTINUE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> return (STOP);
> }
> new = malloc(sizeof(struct dups));
> if (new == NULL) {
> pfatal("DUP TABLE OVERFLOW.");
> if (reply("CONTINUE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> return (STOP);
> }
> new->dup = blkno;
> Index: fsck_ext2fs/pass2.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/pass2.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 pass2.c
> --- fsck_ext2fs/pass2.c 16 Jan 2015 06:39:57 -0000 1.14
> +++ fsck_ext2fs/pass2.c 20 Sep 2015 00:00:39 -0000
> @@ -43,6 +43,7 @@
> #include <stdlib.h>
> #include <string.h>
> #include <limits.h>
> +#include <err.h>
>
> #include "fsck.h"
> #include "fsutil.h"
> @@ -68,9 +69,9 @@ pass2(void)
> case USTATE:
> pfatal("ROOT INODE UNALLOCATED");
> if (reply("ALLOCATE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> if (allocdir(EXT2_ROOTINO, EXT2_ROOTINO, 0755) != EXT2_ROOTINO)
> - errexit("CANNOT ALLOCATE ROOT INODE\n");
> + errx(FSCKFAIL, "CANNOT ALLOCATE ROOT INODE");
> break;
>
> case DCLEAR:
> @@ -78,11 +79,11 @@ pass2(void)
> if (reply("REALLOCATE")) {
> freeino(EXT2_ROOTINO);
> if (allocdir(EXT2_ROOTINO, EXT2_ROOTINO, 0755) !=
> EXT2_ROOTINO)
> - errexit("CANNOT ALLOCATE ROOT INODE\n");
> + errx(FSCKFAIL, "CANNOT ALLOCATE ROOT INODE");
> break;
> }
> if (reply("CONTINUE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> break;
>
> case FSTATE:
> @@ -91,11 +92,11 @@ pass2(void)
> if (reply("REALLOCATE")) {
> freeino(EXT2_ROOTINO);
> if (allocdir(EXT2_ROOTINO, EXT2_ROOTINO, 0755) !=
> EXT2_ROOTINO)
> - errexit("CANNOT ALLOCATE ROOT INODE\n");
> + errx(FSCKFAIL, "CANNOT ALLOCATE ROOT INODE");
> break;
> }
> if (reply("FIX") == 0)
> - errexit("%s\n", "");
> + exit(8);
> dp = ginode(EXT2_ROOTINO);
> dp->e2di_mode = htole16((letoh16(dp->e2di_mode) & ~IFMT) |
> IFDIR);
> inodirty();
> @@ -105,7 +106,7 @@ pass2(void)
> break;
>
> default:
> - errexit("BAD STATE %d FOR ROOT INODE\n",
> statemap[EXT2_ROOTINO]);
> + errx(FSCKFAIL, "BAD STATE %d FOR ROOT INODE",
> statemap[EXT2_ROOTINO]);
> }
>
> /*
> @@ -417,7 +418,7 @@ again:
> break;
>
> default:
> - errexit("BAD STATE %d FOR INODE I=%llu\n",
> + errx(FSCKFAIL, "BAD STATE %d FOR INODE I=%llu",
> statemap[letoh32(dirp->e2d_ino)],
> (unsigned long long)letoh32(dirp->e2d_ino));
> }
> Index: fsck_ext2fs/pass4.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/pass4.c,v
> retrieving revision 1.10
> diff -u -p -r1.10 pass4.c
> --- fsck_ext2fs/pass4.c 16 Jan 2015 06:39:57 -0000 1.10
> +++ fsck_ext2fs/pass4.c 20 Sep 2015 00:00:39 -0000
> @@ -37,6 +37,7 @@
> #include <ufs/ext2fs/ext2fs.h>
> #include <stdlib.h>
> #include <string.h>
> +#include <err.h>
>
> #include "fsutil.h"
> #include "fsck.h"
> @@ -97,7 +98,7 @@ pass4(void)
> break;
>
> default:
> - errexit("BAD STATE %d FOR INODE I=%llu\n",
> + errx(FSCKFAIL, "BAD STATE %d FOR INODE I=%llu",
> statemap[inumber], (unsigned long long)inumber);
> }
> }
> Index: fsck_ext2fs/pass5.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/pass5.c,v
> retrieving revision 1.18
> diff -u -p -r1.18 pass5.c
> --- fsck_ext2fs/pass5.c 16 Jan 2015 06:39:57 -0000 1.18
> +++ fsck_ext2fs/pass5.c 20 Sep 2015 00:00:39 -0000
> @@ -39,6 +39,7 @@
> #include <string.h>
> #include <stdio.h>
> #include <stdlib.h>
> +#include <err.h>
>
> #include "fsutil.h"
> #include "fsck.h"
> @@ -68,7 +69,7 @@ pass5(void)
> ibmap = malloc(fs->e2fs_bsize);
> bbmap = malloc(fs->e2fs_bsize);
> if (ibmap == NULL || bbmap == NULL) {
> - errexit("out of memory\n");
> + errx(FSCKFAIL, "out of memory");
> }
>
> for (c = 0; c < fs->e2fs_ncg; c++) {
> @@ -131,7 +132,7 @@ pass5(void)
> break;
>
> default:
> - errexit("BAD STATE %d FOR INODE I=%llu\n",
> + errx(FSCKFAIL, "BAD STATE %d FOR INODE I=%llu",
> statemap[j], (unsigned long long)j);
> }
> }
> Index: fsck_ext2fs/setup.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/setup.c,v
> retrieving revision 1.27
> diff -u -p -r1.27 setup.c
> --- fsck_ext2fs/setup.c 10 Sep 2015 15:21:40 -0000 1.27
> +++ fsck_ext2fs/setup.c 20 Sep 2015 00:00:39 -0000
> @@ -41,6 +41,7 @@
> #include <sys/dkio.h>
> #include <sys/disklabel.h>
>
> +#include <err.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> @@ -104,7 +105,7 @@ setup(char *dev)
> sblk.b_un.b_buf = malloc(SBSIZE);
> asblk.b_un.b_buf = malloc(SBSIZE);
> if (sblk.b_un.b_buf == NULL || asblk.b_un.b_buf == NULL)
> - errexit("cannot allocate space for superblock\n");
> + errx(FSCKFAIL, "cannot allocate space for superblock");
> if ((lp = getdisklabel((char *)NULL, fsreadfd)) != NULL)
> secsize = lp->d_secsize;
> else
> @@ -183,7 +184,7 @@ setup(char *dev)
>
> sblock.e2fs_gd = calloc(sblock.e2fs_ngdb, sblock.e2fs_bsize);
> if (sblock.e2fs_gd == NULL)
> - errexit("out of memory\n");
> + errx(FSCKFAIL, "out of memory");
> asked = 0;
> for (i=0; i < sblock.e2fs_ngdb; i++) {
> if (bread(fsreadfd,(char *)
> @@ -192,7 +193,7 @@ setup(char *dev)
> sblock.e2fs_bsize) != 0 && !asked) {
> pfatal("BAD SUMMARY INFORMATION");
> if (reply("CONTINUE") == 0)
> - errexit("%s\n", "");
> + exit(8);
> asked++;
> }
> }
> @@ -479,7 +480,7 @@ getdisklabel(char *s, int fd)
> if (s == NULL)
> return ((struct disklabel *)NULL);
> pwarn("ioctl (GCINFO): %s\n", strerror(errno));
> - errexit("%s: can't read disk label\n", s);
> + errx(FSCKFAIL, "%s: can't read disk label", s);
> }
> return (&lab);
> }
> Index: fsck_ext2fs/utilities.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ext2fs/utilities.c,v
> retrieving revision 1.26
> diff -u -p -r1.26 utilities.c
> --- fsck_ext2fs/utilities.c 5 Sep 2015 20:07:11 -0000 1.26
> +++ fsck_ext2fs/utilities.c 20 Sep 2015 00:00:39 -0000
> @@ -44,6 +44,7 @@
> #include <ctype.h>
> #include <unistd.h>
> #include <errno.h>
> +#include <err.h>
>
> #include "fsutil.h"
> #include "fsck.h"
> @@ -134,7 +135,7 @@ bufinit(void)
> free(bufp);
> if (i >= MINBUFS)
> break;
> - errexit("cannot allocate buffer pool\n");
> + errx(FSCKFAIL, "cannot allocate buffer pool");
> }
> bp->b_un.b_buf = bufp;
> bp->b_prev = &bufhead;
> @@ -161,7 +162,7 @@ getdatablk(daddr32_t blkno, long size)
> if ((bp->b_flags & B_INUSE) == 0)
> break;
> if (bp == &bufhead)
> - errexit("deadlocked buffer pool\n");
> + errx(FSCKFAIL, "deadlocked buffer pool");
> getblk(bp, blkno, size);
> diskreads++;
> /* fall through */
> @@ -224,7 +225,7 @@ rwerror(char *mesg, daddr32_t blk)
> printf("\n");
> pfatal("CANNOT %s: BLK %d", mesg, blk);
> if (reply("CONTINUE") == 0)
> - errexit("Program terminated\n");
> + errx(FSCKFAIL, "Program terminated");
> }
>
> void
> @@ -255,7 +256,7 @@ ckfini(int markclean)
> free((char *)bp);
> }
> if (bufhead.b_size != cnt)
> - errexit("Panic: lost %d buffers\n", bufhead.b_size - cnt);
> + errx(FSCKFAIL, "Panic: lost %d buffers", bufhead.b_size - cnt);
> pbp = pdirbp = (struct bufarea *)0;
> if (markclean && (sblock.e2fs.e2fs_state & E2FS_ISCLEAN) == 0) {
> /*
> @@ -505,7 +506,7 @@ dofix(struct inodesc *idesc, char *msg)
> return (0);
>
> default:
> - errexit("UNKNOWN INODESC FIX MODE %d\n", idesc->id_fix);
> + errx(FSCKFAIL, "UNKNOWN INODESC FIX MODE %d", idesc->id_fix);
> }
> /* NOTREACHED */
> }
> Index: fsck_ffs/dir.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/dir.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 dir.c
> --- fsck_ffs/dir.c 20 Jan 2015 18:22:21 -0000 1.32
> +++ fsck_ffs/dir.c 20 Sep 2015 00:00:39 -0000
> @@ -36,6 +36,7 @@
> #include <ufs/ufs/dir.h>
> #include <ufs/ffs/fs.h>
>
> +#include <err.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -103,7 +104,7 @@ dirscan(struct inodesc *idesc)
> char dbuf[DIRBLKSIZ];
>
> if (idesc->id_type != DATA)
> - errexit("wrong type to dirscan %d\n", idesc->id_type);
> + errx(FSCKFAIL, "wrong type to dirscan %d", idesc->id_type);
> if (idesc->id_entryno == 0 &&
> (idesc->id_filesize & (DIRBLKSIZ - 1)) != 0)
> idesc->id_filesize = roundup(idesc->id_filesize, DIRBLKSIZ);
> Index: fsck_ffs/inode.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/inode.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 inode.c
> --- fsck_ffs/inode.c 20 Jan 2015 18:22:21 -0000 1.46
> +++ fsck_ffs/inode.c 20 Sep 2015 00:00:39 -0000
> @@ -38,6 +38,7 @@
> #ifndef SMALL
> #include <pwd.h>
> #endif
> +#include <err.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -285,7 +286,7 @@ ginode(ino_t inumber)
> daddr_t iblk;
>
> if (inumber < ROOTINO || inumber > maxino)
> - errexit("bad inode number %llu to ginode\n",
> + errx(FSCKFAIL, "bad inode number %llu to ginode",
> (unsigned long long)inumber);
> if (startinum == 0 ||
> inumber < startinum || inumber >= startinum + INOPB(&sblock)) {
> @@ -318,7 +319,7 @@ getnextinode(ino_t inumber)
> static caddr_t nextinop;
>
> if (inumber != nextino++ || inumber > maxino)
> - errexit("bad inode number %llu to nextinode %llu\n",
> + errx(FSCKFAIL, "bad inode number %llu to nextinode %llu",
> (unsigned long long)inumber,
> (unsigned long long)nextino);
> if (inumber >= lastinum) {
> @@ -371,15 +372,13 @@ setinodebuf(ino_t inum)
> }
> if (inodebuf == NULL &&
> (inodebuf = malloc((unsigned)inobufsize)) == NULL)
> - errexit("Cannot allocate space for inode buffer\n");
> + errx(FSCKFAIL, "Cannot allocate space for inode buffer");
> }
>
> void
> freeinodebuf(void)
> {
> -
> - if (inodebuf != NULL)
> - free(inodebuf);
> + free(inodebuf);
> inodebuf = NULL;
> }
>
> @@ -404,7 +403,7 @@ cacheino(union dinode *dp, ino_t inumber
> blks = NDADDR + NIADDR;
> inp = malloc(sizeof(*inp) + (blks ? blks - 1 : 0) * sizeof(daddr_t));
> if (inp == NULL)
> - errexit("cannot allocate memory for inode cache\n");
> + errx(FSCKFAIL, "cannot allocate memory for inode cache");
> inpp = &inphead[inumber % numdirs];
> inp->i_nexthash = *inpp;
> *inpp = inp;
> @@ -427,7 +426,7 @@ cacheino(union dinode *dp, ino_t inumber
> newinpsort = reallocarray(inpsort,
> (unsigned)newlistmax, sizeof(struct inoinfo *));
> if (newinpsort == NULL)
> - errexit("cannot increase directory list");
> + errx(FSCKFAIL, "cannot increase directory list");
> inpsort = newinpsort;
> listmax = newlistmax;
> }
> @@ -447,7 +446,7 @@ getinoinfo(ino_t inumber)
> continue;
> return (inp);
> }
> - errexit("cannot find inode %llu\n", (unsigned long long)inumber);
> + errx(FSCKFAIL, "cannot find inode %llu", (unsigned long long)inumber);
> return (NULL);
> }
>
> @@ -571,7 +570,7 @@ blkerror(ino_t ino, char *type, daddr_t
> return;
>
> default:
> - errexit("BAD STATE %d TO BLKERR\n", GET_ISTATE(ino));
> + errx(FSCKFAIL, "BAD STATE %d TO BLKERR", GET_ISTATE(ino));
> /* NOTREACHED */
> }
> }
> Index: fsck_ffs/main.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/main.c,v
> retrieving revision 1.44
> diff -u -p -r1.44 main.c
> --- fsck_ffs/main.c 7 Feb 2015 02:09:13 -0000 1.44
> +++ fsck_ffs/main.c 20 Sep 2015 00:00:39 -0000
> @@ -38,6 +38,7 @@
> #include <stdlib.h>
> #include <string.h>
> #include <ctype.h>
> +#include <err.h>
> #include <stdio.h>
> #include <unistd.h>
>
> @@ -77,8 +78,7 @@ main(int argc, char *argv[])
> skipclean = 0;
> cvtlevel = argtoi('c', "conversion level", optarg, 10);
> if (cvtlevel < 3)
> - errexit("cannot do level %d conversion\n",
> - cvtlevel);
> + errx(FSCKFAIL, "cannot do level %d conversion",
> cvtlevel);
> break;
>
> case 'd':
> @@ -92,7 +92,7 @@ main(int argc, char *argv[])
> case 'm':
> lfmode = argtoi('m', "mode", optarg, 8);
> if (lfmode &~ 07777)
> - errexit("bad mode to -m: %o\n", lfmode);
> + errx(FSCKFAIL, "bad mode to -m: %o", lfmode);
> printf("** lost+found creation mode %o\n", lfmode);
> break;
>
> @@ -109,8 +109,8 @@ main(int argc, char *argv[])
> break;
>
> default:
> - errexit("usage: %s [-fnpy] [-b block#] [-c level] "
> - "[-m mode] filesystem ...\n", __progname);
> + errx(FSCKFAIL, "usage: %s [-fnpy] [-b block#] [-c
> level] "
> + "[-m mode] filesystem ...", __progname);
> }
> }
> argc -= optind;
> @@ -139,7 +139,7 @@ argtoi(int flag, char *req, char *str, i
>
> ret = (int)strtol(str, &cp, base);
> if (cp == str || *cp)
> - errexit("-%c flag requires a %s\n", flag, req);
> + errx(FSCKFAIL, "-%c flag requires a %s", flag, req);
> return (ret);
> }
>
> Index: fsck_ffs/pass1.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass1.c,v
> retrieving revision 1.43
> diff -u -p -r1.43 pass1.c
> --- fsck_ffs/pass1.c 22 Aug 2015 06:00:27 -0000 1.43
> +++ fsck_ffs/pass1.c 20 Sep 2015 00:00:39 -0000
> @@ -36,6 +36,7 @@
> #include <ufs/ufs/dir.h>
> #include <ufs/ffs/fs.h>
>
> +#include <err.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -140,7 +141,7 @@ pass1(void)
> info = calloc((unsigned)inosused, sizeof(struct inostat));
> inospace = (unsigned)inosused * sizeof(struct inostat);
> if (info == NULL)
> - errexit("cannot alloc %zu bytes for inoinfo", inospace);
> + errx(FSCKFAIL, "cannot alloc %zu bytes for inoinfo",
> inospace);
> inostathead[c].il_stat = info;
> /*
> * Scan the allocated inodes.
> @@ -302,7 +303,7 @@ checkinode(ino_t inumber, struct inodesc
> pfatal("LINK COUNT TABLE OVERFLOW");
> if (reply("CONTINUE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> } else {
> zlnp->zlncnt = inumber;
> @@ -365,7 +366,7 @@ pass1check(struct inodesc *idesc)
> printf(" (SKIPPING)\n");
> else if (reply("CONTINUE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> return (STOP);
> }
> @@ -385,7 +386,7 @@ pass1check(struct inodesc *idesc)
> printf(" (SKIPPING)\n");
> else if (reply("CONTINUE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> return (STOP);
> }
> @@ -394,7 +395,7 @@ pass1check(struct inodesc *idesc)
> pfatal("DUP TABLE OVERFLOW.");
> if (reply("CONTINUE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> return (STOP);
> }
> Index: fsck_ffs/pass2.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass2.c,v
> retrieving revision 1.37
> diff -u -p -r1.37 pass2.c
> --- fsck_ffs/pass2.c 20 Jan 2015 18:22:21 -0000 1.37
> +++ fsck_ffs/pass2.c 20 Sep 2015 00:00:39 -0000
> @@ -36,6 +36,7 @@
> #include <ufs/ufs/dir.h>
> #include <ufs/ffs/fs.h>
>
> +#include <err.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -86,10 +87,10 @@ pass2(void)
> pfatal("ROOT INODE UNALLOCATED");
> if (reply("ALLOCATE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> if (allocdir(ROOTINO, ROOTINO, 0755) != ROOTINO)
> - errexit("CANNOT ALLOCATE ROOT INODE\n");
> + errx(FSCKFAIL, "CANNOT ALLOCATE ROOT INODE");
> break;
>
> case DCLEAR:
> @@ -97,12 +98,12 @@ pass2(void)
> if (reply("REALLOCATE")) {
> freeino(ROOTINO);
> if (allocdir(ROOTINO, ROOTINO, 0755) != ROOTINO)
> - errexit("CANNOT ALLOCATE ROOT INODE\n");
> + errx(FSCKFAIL, "CANNOT ALLOCATE ROOT INODE");
> break;
> }
> if (reply("CONTINUE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> break;
>
> @@ -112,12 +113,12 @@ pass2(void)
> if (reply("REALLOCATE")) {
> freeino(ROOTINO);
> if (allocdir(ROOTINO, ROOTINO, 0755) != ROOTINO)
> - errexit("CANNOT ALLOCATE ROOT INODE\n");
> + errx(FSCKFAIL, "CANNOT ALLOCATE ROOT INODE");
> break;
> }
> if (reply("FIX") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> dp = ginode(ROOTINO);
> DIP_SET(dp, di_mode, DIP(dp, di_mode) & ~IFMT);
> @@ -129,7 +130,7 @@ pass2(void)
> break;
>
> default:
> - errexit("BAD STATE %d FOR ROOT INODE\n", GET_ISTATE(ROOTINO));
> + errx(FSCKFAIL, "BAD STATE %d FOR ROOT INODE",
> GET_ISTATE(ROOTINO));
> }
> SET_ISTATE(ROOTINO, DFOUND);
> /*
> @@ -453,7 +454,7 @@ again:
> break;
>
> default:
> - errexit("BAD STATE %d FOR INODE I=%llu\n",
> + errx(FSCKFAIL, "BAD STATE %d FOR INODE I=%llu",
> GET_ISTATE(dirp->d_ino),
> (unsigned long long)dirp->d_ino);
> }
> Index: fsck_ffs/pass4.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass4.c,v
> retrieving revision 1.24
> diff -u -p -r1.24 pass4.c
> --- fsck_ffs/pass4.c 20 Jan 2015 18:22:21 -0000 1.24
> +++ fsck_ffs/pass4.c 20 Sep 2015 00:00:39 -0000
> @@ -34,6 +34,7 @@
> #include <sys/time.h>
> #include <ufs/ufs/dinode.h>
> #include <ufs/ffs/fs.h>
> +#include <err.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -110,7 +111,7 @@ pass4(void)
> break;
>
> default:
> - errexit("BAD STATE %d FOR INODE I=%llu\n",
> + errx(FSCKFAIL, "BAD STATE %d FOR INODE I=%llu",
> GET_ISTATE(inumber),
> (unsigned long long)inumber);
> }
> Index: fsck_ffs/pass5.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass5.c,v
> retrieving revision 1.48
> diff -u -p -r1.48 pass5.c
> --- fsck_ffs/pass5.c 20 Jan 2015 18:22:21 -0000 1.48
> +++ fsck_ffs/pass5.c 20 Sep 2015 00:00:39 -0000
> @@ -38,6 +38,7 @@
> #include <ufs/ufs/quota.h>
> #include <ufs/ufs/inode.h>
> #include <ufs/ffs/ffs_extern.h>
> +#include <err.h>
> #include <stdio.h>
> #include <string.h>
> #include <limits.h>
> @@ -162,7 +163,7 @@ pass5(void)
>
> default:
> inomapsize = blkmapsize = sumsize = 0;
> - errexit("UNKNOWN ROTATIONAL TABLE FORMAT %d\n",
> + errx(FSCKFAIL, "UNKNOWN ROTATIONAL TABLE FORMAT %d",
> fs->fs_postblformat);
> }
> memset(&idesc[0], 0, sizeof idesc);
> @@ -250,7 +251,7 @@ pass5(void)
> default:
> if (j < ROOTINO)
> break;
> - errexit("BAD STATE %d FOR INODE I=%llu\n",
> + errx(FSCKFAIL, "BAD STATE %d FOR INODE I=%llu",
> GET_ISTATE(j), (unsigned long long)j);
> }
> }
> Index: fsck_ffs/setup.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/setup.c,v
> retrieving revision 1.57
> diff -u -p -r1.57 setup.c
> --- fsck_ffs/setup.c 20 Jan 2015 18:22:21 -0000 1.57
> +++ fsck_ffs/setup.c 20 Sep 2015 00:00:40 -0000
> @@ -40,6 +40,7 @@
> #include <sys/dkio.h>
> #include <sys/disklabel.h>
>
> +#include <err.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> @@ -133,7 +134,7 @@ setup(char *dev)
> sblk.b_un.b_buf = malloc(SBSIZE);
> asblk.b_un.b_buf = malloc(SBSIZE);
> if (sblk.b_un.b_buf == NULL || asblk.b_un.b_buf == NULL)
> - errexit("cannot allocate space for superblock\n");
> + errx(FSCKFAIL, "cannot allocate space for superblock");
> if ((lp = getdisklabel(NULL, fsreadfd)) != NULL)
> secsize = lp->d_secsize;
> else
> @@ -377,7 +378,7 @@ found:
> pfatal("BAD SUMMARY INFORMATION");
> if (reply("CONTINUE") == 0) {
> ckfini(0);
> - errexit("%s", "");
> + exit(8);
> }
> asked++;
> }
> @@ -652,7 +653,7 @@ getdisklabel(char *s, int fd)
> if (s == NULL)
> return (NULL);
> pwarn("ioctl (GCINFO): %s\n", strerror(errno));
> - errexit("%s: can't read disk label\n", s);
> + errx(FSCKFAIL, "%s: can't read disk label", s);
> }
> return (&lab);
> }
> Index: fsck_ffs/utilities.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/utilities.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 utilities.c
> --- fsck_ffs/utilities.c 5 Sep 2015 20:07:11 -0000 1.50
> +++ fsck_ffs/utilities.c 20 Sep 2015 00:00:40 -0000
> @@ -43,6 +43,7 @@
> #include <ctype.h>
> #include <unistd.h>
> #include <limits.h>
> +#include <err.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <paths.h>
> @@ -126,7 +127,7 @@ inoinfo(ino_t inum)
> int iloff;
>
> if (inum > maxino)
> - errexit("inoinfo: inumber %llu out of range",
> + errx(FSCKFAIL, "inoinfo: inumber %llu out of range",
> (unsigned long long)inum);
> ilp = &inostathead[inum / sblock.fs_ipg];
> iloff = inum % sblock.fs_ipg;
> @@ -148,7 +149,7 @@ bufinit(void)
> pbp = pdirbp = NULL;
> bufp = malloc((unsigned int)sblock.fs_bsize);
> if (bufp == 0)
> - errexit("cannot allocate buffer pool\n");
> + errx(FSCKFAIL, "cannot allocate buffer pool");
> cgblk.b_un.b_buf = bufp;
> initbarea(&cgblk);
> bufhead.b_next = bufhead.b_prev = &bufhead;
> @@ -163,7 +164,7 @@ bufinit(void)
> free(bufp);
> if (i >= MINBUFS)
> break;
> - errexit("cannot allocate buffer pool\n");
> + errx(FSCKFAIL, "cannot allocate buffer pool");
> }
> bp->b_un.b_buf = bufp;
> bp->b_prev = &bufhead;
> @@ -190,7 +191,7 @@ getdatablk(daddr_t blkno, long size)
> if ((bp->b_flags & B_INUSE) == 0)
> break;
> if (bp == &bufhead)
> - errexit("deadlocked buffer pool\n");
> + errx(FSCKFAIL, "deadlocked buffer pool");
> getblk(bp, blkno, size);
> /* FALLTHROUGH */
> foundit:
> @@ -252,7 +253,7 @@ rwerror(char *mesg, daddr_t blk)
> printf("\n");
> pfatal("CANNOT %s: BLK %lld", mesg, (long long)blk);
> if (reply("CONTINUE") == 0)
> - errexit("Program terminated\n");
> + errx(FSCKFAIL, "Program terminated");
> }
>
> void
> @@ -304,7 +305,7 @@ ckfini(int markclean)
> free(bp);
> }
> if (bufhead.b_size != cnt)
> - errexit("Panic: lost %d buffers\n", bufhead.b_size - cnt);
> + errx(FSCKFAIL, "Panic: lost %d buffers", bufhead.b_size - cnt);
> pbp = pdirbp = NULL;
> if (markclean && (sblock.fs_clean & FS_ISCLEAN) == 0) {
> /*
> @@ -581,7 +582,7 @@ dofix(struct inodesc *idesc, char *msg)
> return (0);
>
> default:
> - errexit("UNKNOWN INODESC FIX MODE %d\n", idesc->id_fix);
> + errx(FSCKFAIL, "UNKNOWN INODESC FIX MODE %d", idesc->id_fix);
> }
> /* NOTREACHED */
> }
> Index: fsck_msdos/main.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_msdos/main.c,v
> retrieving revision 1.19
> diff -u -p -r1.19 main.c
> --- fsck_msdos/main.c 16 Jun 2014 18:33:33 -0000 1.19
> +++ fsck_msdos/main.c 20 Sep 2015 00:00:40 -0000
> @@ -32,6 +32,7 @@
> #include <ctype.h>
> #include <stdio.h>
> #include <unistd.h>
> +#include <err.h>
> #include <errno.h>
> #include <stdarg.h>
>
> @@ -48,7 +49,7 @@ int main(int, char **);
> static void
> usage(void)
> {
> - errexit("usage: fsck_msdos [-fnpy] filesystem ...\n");
> + errx(FSCKFAIL, "usage: fsck_msdos [-fnpy] filesystem ...");
> }
>
> int