diff options
Diffstat (limited to 'sbin/fsck_ffs')
-rw-r--r-- | sbin/fsck_ffs/setup.c | 74 | ||||
-rw-r--r-- | sbin/fsck_ffs/utilities.c | 19 |
2 files changed, 51 insertions, 42 deletions
diff --git a/sbin/fsck_ffs/setup.c b/sbin/fsck_ffs/setup.c index 3b07c25d519..0689fdd02ae 100644 --- a/sbin/fsck_ffs/setup.c +++ b/sbin/fsck_ffs/setup.c @@ -1,4 +1,4 @@ -/* $OpenBSD: setup.c,v 1.23 2006/03/09 13:35:02 pedro Exp $ */ +/* $OpenBSD: setup.c,v 1.24 2006/04/17 19:18:08 deraadt Exp $ */ /* $NetBSD: setup.c,v 1.27 1996/09/27 22:45:19 christos Exp $ */ /* @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)setup.c 8.5 (Berkeley) 11/23/94"; #else -static const char rcsid[] = "$OpenBSD: setup.c,v 1.23 2006/03/09 13:35:02 pedro Exp $"; +static const char rcsid[] = "$OpenBSD: setup.c,v 1.24 2006/04/17 19:18:08 deraadt Exp $"; #endif #endif /* not lint */ @@ -73,8 +73,7 @@ long numdirs, listmax, inplast; int setup(char *dev) { - long cg, size, asked, i, j; - long bmapsize; + long cg, size, asked, i, j, bmapsize; struct disklabel *lp; off_t sizepb; struct stat statb; @@ -135,12 +134,12 @@ setup(char *dev) } if (cg >= proto.fs_ncg) { printf("%s %s\n%s %s\n%s %s\n", - "SEARCH FOR ALTERNATE SUPER-BLOCK", - "FAILED. YOU MUST USE THE", - "-b OPTION TO FSCK_FFS TO SPECIFY THE", - "LOCATION OF AN ALTERNATE", - "SUPER-BLOCK TO SUPPLY NEEDED", - "INFORMATION; SEE fsck_ffs(8)."); + "SEARCH FOR ALTERNATE SUPER-BLOCK", + "FAILED. YOU MUST USE THE", + "-b OPTION TO FSCK_FFS TO SPECIFY THE", + "LOCATION OF AN ALTERNATE", + "SUPER-BLOCK TO SUPPLY NEEDED", + "INFORMATION; SEE fsck_ffs(8)."); return(0); } doskipclean = 0; @@ -177,7 +176,7 @@ setup(char *dev) } if ((sblock.fs_minfree < 0 || sblock.fs_minfree > 99)) { pfatal("IMPOSSIBLE MINFREE=%d IN SUPERBLOCK", - sblock.fs_minfree); + sblock.fs_minfree); if (reply("SET TO DEFAULT") == 1) { sblock.fs_minfree = 10; sbdirty(); @@ -186,7 +185,7 @@ setup(char *dev) if (sblock.fs_interleave < 1 || sblock.fs_interleave > sblock.fs_nsect) { pwarn("IMPOSSIBLE INTERLEAVE=%d IN SUPERBLOCK", - sblock.fs_interleave); + sblock.fs_interleave); sblock.fs_interleave = 1; if (preen) printf(" (FIXED)\n"); @@ -198,7 +197,7 @@ setup(char *dev) if (sblock.fs_npsect < sblock.fs_nsect || sblock.fs_npsect > sblock.fs_nsect*2) { pwarn("IMPOSSIBLE NPSECT=%d IN SUPERBLOCK", - sblock.fs_npsect); + sblock.fs_npsect); sblock.fs_npsect = sblock.fs_nsect; if (preen) printf(" (FIXED)\n"); @@ -209,7 +208,7 @@ setup(char *dev) } if (sblock.fs_bmask != ~(sblock.fs_bsize - 1)) { pwarn("INCORRECT BMASK=%x IN SUPERBLOCK", - sblock.fs_bmask); + sblock.fs_bmask); sblock.fs_bmask = ~(sblock.fs_bsize - 1); if (preen) printf(" (FIXED)\n"); @@ -220,7 +219,7 @@ setup(char *dev) } if (sblock.fs_fmask != ~(sblock.fs_fsize - 1)) { pwarn("INCORRECT FMASK=%x IN SUPERBLOCK", - sblock.fs_fmask); + sblock.fs_fmask); sblock.fs_fmask = ~(sblock.fs_fsize - 1); if (preen) printf(" (FIXED)\n"); @@ -232,7 +231,7 @@ setup(char *dev) if (sblock.fs_inodefmt >= FS_44INODEFMT) { if (sblock.fs_maxfilesize != maxfilesize) { pwarn("INCORRECT MAXFILESIZE=%llu IN SUPERBLOCK", - (unsigned long long)sblock.fs_maxfilesize); + (unsigned long long)sblock.fs_maxfilesize); sblock.fs_maxfilesize = maxfilesize; if (preen) printf(" (FIXED)\n"); @@ -243,7 +242,7 @@ setup(char *dev) } if (sblock.fs_maxsymlinklen != MAXSYMLINKLEN_UFS1) { pwarn("INCORRECT MAXSYMLINKLEN=%d IN SUPERBLOCK", - sblock.fs_maxsymlinklen); + sblock.fs_maxsymlinklen); sblock.fs_maxsymlinklen = MAXSYMLINKLEN_UFS1; if (preen) printf(" (FIXED)\n"); @@ -254,7 +253,7 @@ setup(char *dev) } if (sblock.fs_qbmask != ~sblock.fs_bmask) { pwarn("INCORRECT QBMASK=%lx IN SUPERBLOCK", - (unsigned long)sblock.fs_qbmask); + (unsigned long)sblock.fs_qbmask); sblock.fs_qbmask = ~sblock.fs_bmask; if (preen) printf(" (FIXED)\n"); @@ -265,7 +264,7 @@ setup(char *dev) } if (sblock.fs_qfmask != ~sblock.fs_fmask) { pwarn("INCORRECT QFMASK=%lx IN SUPERBLOCK", - (unsigned long)sblock.fs_qfmask); + (unsigned long)sblock.fs_qfmask); sblock.fs_qfmask = ~sblock.fs_fmask; if (preen) printf(" (FIXED)\n"); @@ -411,17 +410,28 @@ readsb(int listerr) /* * run a few consistency checks of the super block */ - if (sblock.fs_magic != FS_MAGIC) - { badsb(listerr, "MAGIC NUMBER WRONG"); return (0); } - if (sblock.fs_ncg < 1) - { badsb(listerr, "NCG OUT OF RANGE"); return (0); } - if (sblock.fs_cpg < 1) - { badsb(listerr, "CPG OUT OF RANGE"); return (0); } + if (sblock.fs_magic != FS_MAGIC) { + badsb(listerr, "MAGIC NUMBER WRONG"); + return (0); + } + if (sblock.fs_ncg < 1) { + badsb(listerr, "NCG OUT OF RANGE"); + return (0); + } + if (sblock.fs_cpg < 1) { + badsb(listerr, "CPG OUT OF RANGE"); + return (0); + } if (sblock.fs_ncg * sblock.fs_cpg < sblock.fs_ncyl || - (sblock.fs_ncg - 1) * sblock.fs_cpg >= sblock.fs_ncyl) - { badsb(listerr, "NCYL LESS THAN NCG*CPG"); return (0); } - if (sblock.fs_sbsize > SBSIZE) - { badsb(listerr, "SIZE PREPOSTEROUSLY LARGE"); return (0); } + (sblock.fs_ncg - 1) * sblock.fs_cpg >= sblock.fs_ncyl) { + badsb(listerr, "NCYL LESS THAN NCG*CPG"); + return (0); + } + if (sblock.fs_sbsize > SBSIZE) { + badsb(listerr, "SIZE PREPOSTEROUSLY LARGE"); + return (0); + } + /* * Compute block size that the filesystem is based on, * according to fsbtodb, and adjust superblock block number @@ -453,7 +463,7 @@ readsb(int listerr) } } badsb(listerr, - "VALUES IN SUPER BLOCK DISAGREE WITH THOSE IN FIRST ALTERNATE"); + "VALUES IN SUPER BLOCK DISAGREE WITH THOSE IN FIRST ALTERNATE"); return (0); } havesb = 1; @@ -497,8 +507,8 @@ calcsb(char *dev, int devfd, struct fs *fs) pp = &lp->d_partitions[*cp - 'a']; if (pp->p_fstype != FS_BSDFFS) { pfatal("%s: NOT LABELED AS A BSD FILE SYSTEM (%s)\n", - dev, pp->p_fstype < FSMAXTYPES ? - fstypenames[pp->p_fstype] : "unknown"); + dev, pp->p_fstype < FSMAXTYPES ? + fstypenames[pp->p_fstype] : "unknown"); return (0); } memset(fs, 0, sizeof(struct fs)); diff --git a/sbin/fsck_ffs/utilities.c b/sbin/fsck_ffs/utilities.c index 7a988ec5df0..dc3fd9acb91 100644 --- a/sbin/fsck_ffs/utilities.c +++ b/sbin/fsck_ffs/utilities.c @@ -1,4 +1,4 @@ -/* $OpenBSD: utilities.c,v 1.27 2006/04/07 11:25:37 pedro Exp $ */ +/* $OpenBSD: utilities.c,v 1.28 2006/04/17 19:18:09 deraadt Exp $ */ /* $NetBSD: utilities.c,v 1.18 1996/09/27 22:45:20 christos Exp $ */ /* @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)utilities.c 8.1 (Berkeley) 6/5/93"; #else -static const char rcsid[] = "$OpenBSD: utilities.c,v 1.27 2006/04/07 11:25:37 pedro Exp $"; +static const char rcsid[] = "$OpenBSD: utilities.c,v 1.28 2006/04/17 19:18:09 deraadt Exp $"; #endif #endif /* not lint */ @@ -66,7 +66,6 @@ int ftypeok(struct ufs1_dinode *dp) { switch (dp->di_mode & IFMT) { - case IFDIR: case IFREG: case IFBLK: @@ -75,7 +74,6 @@ ftypeok(struct ufs1_dinode *dp) case IFSOCK: case IFIFO: return (1); - default: if (debug) printf("bad file type 0%o\n", dp->di_mode); @@ -86,8 +84,7 @@ ftypeok(struct ufs1_dinode *dp) int reply(char *question) { - int persevere; - int c; + int persevere, c; if (preen) pfatal("INTERNAL ERROR: GOT TO reply()"); @@ -102,6 +99,7 @@ reply(char *question) printf("%s? yes\n\n", question); return (1); } + do { printf("%s? [Fyn?] ", question); (void) fflush(stdout); @@ -151,7 +149,6 @@ bufinit(void) if (i >= MINBUFS) { free(bp); free(bufp); - break; } errexit("cannot allocate buffer pool\n"); @@ -254,6 +251,7 @@ ckfini(int markclean) if (fswritefd < 0) { (void)close(fsreadfd); + fsreadfd = -1; return; } sblock.fs_flags &= ~FS_FLAGS_UPDATED; /* Force update on next mount */ @@ -294,7 +292,9 @@ ckfini(int markclean) printf("cache missed %ld of %ld (%d%%)\n", diskreads, totalreads, (int)(diskreads * 100 / totalreads)); (void)close(fsreadfd); + fsreadfd = -1; (void)close(fswritefd); + fswritefd = -1; } int @@ -560,10 +560,9 @@ char *info_filesys = "?"; void catchinfo(int signo) { - int save_errno = errno; - char buf[1024]; + int save_errno = errno, fd; struct iovec iov[4]; - int fd; + char buf[1024]; if (info_fn != NULL && info_fn(buf, sizeof buf)) { fd = open(_PATH_TTY, O_WRONLY); |