Michael McConville wrote:
> The best I can tell, fsck's errexit() is just a clone of errx() (less
> the "progname: " prefix and the appended newline).
>
> If we delete it from fsck_ffs, fsck_ext2fs, and fsck_msdos, we can
> remove its definition in fsck. This diff is just for fsck_ffs.
> (fsck_msdos has only one use.)
>
> Another trivial diff, but deleting stdlib clones like this prevents
> people from getting distracted when they're trying to get stuff done.
Also drops a NULL check in the freeinodebuf() logic.
> Index: dir.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/dir.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 dir.c
> --- dir.c 20 Jan 2015 18:22:21 -0000 1.32
> +++ dir.c 19 Sep 2015 19:09:19 -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(8, "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: inode.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/inode.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 inode.c
> --- inode.c 20 Jan 2015 18:22:21 -0000 1.46
> +++ inode.c 19 Sep 2015 19:09:19 -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(8, "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(8, "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(8, "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(8, "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(8, "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(8, "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(8, "BAD STATE %d TO BLKERR", GET_ISTATE(ino));
> /* NOTREACHED */
> }
> }
> Index: main.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/main.c,v
> retrieving revision 1.44
> diff -u -p -r1.44 main.c
> --- main.c 7 Feb 2015 02:09:13 -0000 1.44
> +++ main.c 19 Sep 2015 19:09:19 -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(8, "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(8, "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(8, "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(8, "-%c flag requires a %s", flag, req);
> return (ret);
> }
>
> Index: pass1.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass1.c,v
> retrieving revision 1.43
> diff -u -p -r1.43 pass1.c
> --- pass1.c 22 Aug 2015 06:00:27 -0000 1.43
> +++ pass1.c 19 Sep 2015 19:09:19 -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(8, "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: pass2.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass2.c,v
> retrieving revision 1.37
> diff -u -p -r1.37 pass2.c
> --- pass2.c 20 Jan 2015 18:22:21 -0000 1.37
> +++ pass2.c 19 Sep 2015 19:09:19 -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(8, "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(8, "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(8, "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(8, "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(8, "BAD STATE %d FOR INODE I=%llu",
> GET_ISTATE(dirp->d_ino),
> (unsigned long long)dirp->d_ino);
> }
> Index: pass4.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass4.c,v
> retrieving revision 1.24
> diff -u -p -r1.24 pass4.c
> --- pass4.c 20 Jan 2015 18:22:21 -0000 1.24
> +++ pass4.c 19 Sep 2015 19:09:19 -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(8, "BAD STATE %d FOR INODE I=%llu",
> GET_ISTATE(inumber),
> (unsigned long long)inumber);
> }
> Index: pass5.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/pass5.c,v
> retrieving revision 1.48
> diff -u -p -r1.48 pass5.c
> --- pass5.c 20 Jan 2015 18:22:21 -0000 1.48
> +++ pass5.c 19 Sep 2015 19:09:19 -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(8, "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(8, "BAD STATE %d FOR INODE I=%llu",
> GET_ISTATE(j), (unsigned long long)j);
> }
> }
> Index: setup.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/setup.c,v
> retrieving revision 1.57
> diff -u -p -r1.57 setup.c
> --- setup.c 20 Jan 2015 18:22:21 -0000 1.57
> +++ setup.c 19 Sep 2015 19:09:19 -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(8, "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(8, "%s: can't read disk label", s);
> }
> return (&lab);
> }
> Index: utilities.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_ffs/utilities.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 utilities.c
> --- utilities.c 5 Sep 2015 20:07:11 -0000 1.50
> +++ utilities.c 19 Sep 2015 19:09:19 -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(8, "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(8, "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(8, "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(8, "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(8, "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(8, "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(8, "UNKNOWN INODESC FIX MODE %d", idesc->id_fix);
> }
> /* NOTREACHED */
> }