projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
missing fsbtodb!
[unix-history]
/
usr
/
src
/
sbin
/
fsck
/
pass1.c
diff --git
a/usr/src/sbin/fsck/pass1.c
b/usr/src/sbin/fsck/pass1.c
index
c7ef655
..
3ecc82a
100644
(file)
--- a/
usr/src/sbin/fsck/pass1.c
+++ b/
usr/src/sbin/fsck/pass1.c
@@
-5,7
+5,7
@@
*/
#ifndef lint
*/
#ifndef lint
-static char sccsid[] = "@(#)pass1.c 5.
1
(Berkeley) %G%";
+static char sccsid[] = "@(#)pass1.c 5.
4
(Berkeley) %G%";
#endif not lint
#include <sys/param.h>
#endif not lint
#include <sys/param.h>
@@
-69,11
+69,18
@@
pass1()
continue;
}
lastino = inumber;
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 (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++;
ndb = howmany(dp->di_size, sblock.fs_bsize);
if (SPECIAL(dp))
ndb++;
@@
-93,12
+100,7
@@
pass1()
dp->di_ib[j]);
goto unknown;
}
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;
goto unknown;
n_files++;
lncntp[inumber] = dp->di_nlink;
@@
-132,7
+134,9
@@
pass1()
continue;
unknown:
pfatal("UNKNOWN FILE TYPE I=%u", inumber);
continue;
unknown:
pfatal("UNKNOWN FILE TYPE I=%u", inumber);
+ statemap[inumber] = FCLEAR;
if (reply("CLEAR") == 1) {
if (reply("CLEAR") == 1) {
+ statemap[inumber] = USTATE;
zapino(dp);
inodirty();
}
zapino(dp);
inodirty();
}