git: c5d476c98c22 - main - Update fsdb(8) to reflect new structure of fsck_ffs(8).

From: Kirk McKusick <mckusick_at_FreeBSD.org>
Date: Wed, 23 Feb 2022 23:41:14 UTC
The branch main has been updated by mckusick:

URL: https://cgit.FreeBSD.org/src/commit/?id=c5d476c98c2275966f68c7b81dab2421b143f5a9

commit c5d476c98c2275966f68c7b81dab2421b143f5a9
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2022-02-23 23:39:52 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2022-02-23 23:40:58 +0000

    Update fsdb(8) to reflect new structure of fsck_ffs(8).
    
    The cleanup of fsck_ffs(8) in commit c0bfa109b942659f6 broke fsdb(8).
    This commit adds the one-line update needed in fsdb(8) to make it
    work with the new fsck_ffs(8) structure.
    
    Reported by: Chuck Silvers
    Tested by:   Chuck Silvers
    MFC after:   3 days
---
 sbin/fsck_ffs/fsck.h  |  1 +
 sbin/fsck_ffs/main.c  | 39 ---------------------------------------
 sbin/fsck_ffs/setup.c | 39 +++++++++++++++++++++++++++++++++++++++
 sbin/fsdb/fsdb.c      |  2 +-
 4 files changed, 41 insertions(+), 40 deletions(-)

diff --git a/sbin/fsck_ffs/fsck.h b/sbin/fsck_ffs/fsck.h
index 690a98038884..daa346826eff 100644
--- a/sbin/fsck_ffs/fsck.h
+++ b/sbin/fsck_ffs/fsck.h
@@ -490,6 +490,7 @@ struct inostat *inoinfo(ino_t inum);
 void		IOstats(char *what);
 int		linkup(ino_t orphan, ino_t parentdir, char *name);
 int		makeentry(ino_t parent, ino_t ino, const char *name);
+int		openfilesys(char *dev);
 void		panic(const char *fmt, ...) __printflike(1, 2);
 void		pass1(void);
 void		pass1b(void);
diff --git a/sbin/fsck_ffs/main.c b/sbin/fsck_ffs/main.c
index 9ea5f5b91110..2724893a5b9a 100644
--- a/sbin/fsck_ffs/main.c
+++ b/sbin/fsck_ffs/main.c
@@ -76,7 +76,6 @@ static void usage(void) __dead2;
 static intmax_t argtoimax(int flag, const char *req, const char *str, int base);
 static int checkfilesys(char *filesys);
 static int setup_bkgrdchk(struct statfs *mntp, int sbrdfailed, char **filesys);
-static int openfilesys(char *dev);
 static int chkdoreload(struct statfs *mntp);
 static struct statfs *getmntpt(const char *);
 
@@ -715,44 +714,6 @@ setup_bkgrdchk(struct statfs *mntp, int sbreadfailed, char **filesys)
 	return (1);
 }
 
-/*
- * Open a device or file to be checked by fsck.
- */
-static int
-openfilesys(char *dev)
-{
-	struct stat statb;
-	int saved_fsreadfd;
-
-	if (stat(dev, &statb) < 0) {
-		pfatal("CANNOT STAT %s: %s\n", dev, strerror(errno));
-		return (0);
-	}
-	if ((statb.st_mode & S_IFMT) != S_IFCHR &&
-	    (statb.st_mode & S_IFMT) != S_IFBLK) {
-		if (bkgrdflag != 0 && (statb.st_flags & SF_SNAPSHOT) == 0) {
-			pfatal("BACKGROUND FSCK LACKS A SNAPSHOT\n");
-			exit(EEXIT);
-		}
-		if (bkgrdflag != 0) {
-			cursnapshot = statb.st_ino;
-		} else {
-			pfatal("%s IS NOT A DISK DEVICE\n", dev);
-			if (reply("CONTINUE") == 0)
-				return (0);
-		}
-	}
-	saved_fsreadfd = fsreadfd;
-	if ((fsreadfd = open(dev, O_RDONLY)) < 0) {
-		fsreadfd = saved_fsreadfd;
-		pfatal("CANNOT OPEN %s: %s\n", dev, strerror(errno));
-		return (0);
-	}
-	if (saved_fsreadfd != -1)
-		close(saved_fsreadfd);
-	return (1);
-}
-
 static int
 chkdoreload(struct statfs *mntp)
 {
diff --git a/sbin/fsck_ffs/setup.c b/sbin/fsck_ffs/setup.c
index bbb8a854e999..66f4f59004cb 100644
--- a/sbin/fsck_ffs/setup.c
+++ b/sbin/fsck_ffs/setup.c
@@ -210,6 +210,44 @@ badsb:
 	return (0);
 }
 
+/*
+ * Open a device or file to be checked by fsck.
+ */
+int
+openfilesys(char *dev)
+{
+	struct stat statb;
+	int saved_fsreadfd;
+
+	if (stat(dev, &statb) < 0) {
+		pfatal("CANNOT STAT %s: %s\n", dev, strerror(errno));
+		return (0);
+	}
+	if ((statb.st_mode & S_IFMT) != S_IFCHR &&
+	    (statb.st_mode & S_IFMT) != S_IFBLK) {
+		if (bkgrdflag != 0 && (statb.st_flags & SF_SNAPSHOT) == 0) {
+			pfatal("BACKGROUND FSCK LACKS A SNAPSHOT\n");
+			exit(EEXIT);
+		}
+		if (bkgrdflag != 0) {
+			cursnapshot = statb.st_ino;
+		} else {
+			pfatal("%s IS NOT A DISK DEVICE\n", dev);
+			if (reply("CONTINUE") == 0)
+				return (0);
+		}
+	}
+	saved_fsreadfd = fsreadfd;
+	if ((fsreadfd = open(dev, O_RDONLY)) < 0) {
+		fsreadfd = saved_fsreadfd;
+		pfatal("CANNOT OPEN %s: %s\n", dev, strerror(errno));
+		return (0);
+	}
+	if (saved_fsreadfd != -1)
+		close(saved_fsreadfd);
+	return (1);
+}
+
 /*
  * Read in the super block and its summary info.
  */
@@ -331,6 +369,7 @@ void
 sblock_init(void)
 {
 
+	fsreadfd = -1;
 	fswritefd = -1;
 	fsmodified = 0;
 	lfdir = 0;
diff --git a/sbin/fsdb/fsdb.c b/sbin/fsdb/fsdb.c
index 785aeb2b5a75..c935f88952b4 100644
--- a/sbin/fsdb/fsdb.c
+++ b/sbin/fsdb/fsdb.c
@@ -111,7 +111,7 @@ main(int argc, char *argv[])
 		fsys = argv[0];
 
 	sblock_init();
-	if (!setup(fsys))
+	if (openfilesys(fsys) == 0 || readsb(0) == 0 || setup(fsys) == 0)
 		errx(1, "cannot set up file system `%s'", fsys);
 	if (fswritefd < 0)
 		nflag++;