X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/76797561a2753db98509788b7787621e1b5121b5..38eccf8b24b7130969a52a50874dd1224152de11:/usr/src/sbin/fsck/pass1.c diff --git a/usr/src/sbin/fsck/pass1.c b/usr/src/sbin/fsck/pass1.c index c7ef65523d..3ecc82a40c 100644 --- a/usr/src/sbin/fsck/pass1.c +++ b/usr/src/sbin/fsck/pass1.c @@ -5,7 +5,7 @@ */ #ifndef lint -static char sccsid[] = "@(#)pass1.c 5.1 (Berkeley) %G%"; +static char sccsid[] = "@(#)pass1.c 5.4 (Berkeley) %G%"; #endif not lint #include @@ -69,11 +69,18 @@ pass1() continue; } lastino = inumber; - if (dp->di_size < 0) { + if (dp->di_size < 0 || + dp->di_size + sblock.fs_bsize - 1 < 0) { if (debug) printf("bad size %d:", dp->di_size); goto unknown; } + if (!preen && (dp->di_mode & IFMT) == IFMT && + reply("HOLD BAD BLOCK") == 1) { + dp->di_size = sblock.fs_fsize; + dp->di_mode = IFREG|0600; + inodirty(); + } ndb = howmany(dp->di_size, sblock.fs_bsize); if (SPECIAL(dp)) ndb++; @@ -93,12 +100,7 @@ pass1() dp->di_ib[j]); goto unknown; } - if (!preen && (dp->di_mode & IFMT) == IFMT && - reply("HOLD BAD BLOCK") == 1) { - dp->di_size = sblock.fs_fsize; - dp->di_mode = IFREG|0600; - inodirty(); - } else if (ftypeok(dp) == 0) + if (ftypeok(dp) == 0) goto unknown; n_files++; lncntp[inumber] = dp->di_nlink; @@ -132,7 +134,9 @@ pass1() continue; unknown: pfatal("UNKNOWN FILE TYPE I=%u", inumber); + statemap[inumber] = FCLEAR; if (reply("CLEAR") == 1) { + statemap[inumber] = USTATE; zapino(dp); inodirty(); }