SCCS-vsn: sbin/fsck/main.c 2.14
-static char sccsid[] = "@(#)main.c 2.13 (Berkeley) %G%";
+static char sccsid[] = "@(#)main.c 2.14 (Berkeley) %G%";
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
#include <ctype.h>
#define zapino(x) (*(x) = zino)
struct dinode zino;
#define zapino(x) (*(x) = zino)
struct dinode zino;
-#define setlncnt(x) (lncntp[inum] = x)
-#define getlncnt() (lncntp[inum])
-#define declncnt() (--lncntp[inum])
-
#define setbmap(x) setbit(blockmap, x)
#define getbmap(x) isset(blockmap, x)
#define clrbmap(x) clrbit(blockmap, x)
#define setbmap(x) setbit(blockmap, x)
#define getbmap(x) isset(blockmap, x)
#define clrbmap(x) clrbit(blockmap, x)
#define getfmap(x) isset(freemap, x)
#define clrfmap(x) clrbit(freemap, x)
#define getfmap(x) isset(freemap, x)
#define clrfmap(x) clrbit(freemap, x)
-#define setstate(x) (statemap[inum] = x)
-#define getstate() statemap[inum]
-
#define DATA 1
#define ADDR 0
#define DATA 1
#define ADDR 0
if (dp->di_ib[j] != 0)
goto unknown;
n_files++;
if (dp->di_ib[j] != 0)
goto unknown;
n_files++;
- if (setlncnt(dp->di_nlink) <= 0) {
+ lncntp[inum] = dp->di_nlink;
+ if (dp->di_nlink <= 0) {
if (badlnp < &badlncnt[MAXLNCNT])
*badlnp++ = inum;
else {
if (badlnp < &badlncnt[MAXLNCNT])
*badlnp++ = inum;
else {
- setstate(DIRCT ? DSTATE : FSTATE);
+ statemap[inum] = DIRCT ? DSTATE : FSTATE;
badblk = dupblk = 0; filsize = 0; maxblk = 0;
ckinode(dp, ADDR);
continue;
badblk = dupblk = 0; filsize = 0; maxblk = 0;
ckinode(dp, ADDR);
continue;
dp = ginode();
if (dp == NULL)
continue;
dp = ginode();
if (dp == NULL)
continue;
- if (getstate() != USTATE &&
+ if (statemap[inum] != USTATE &&
(ckinode(dp, ADDR) & STOP))
goto out1b;
}
(ckinode(dp, ADDR) & STOP))
goto out1b;
}
inum = ROOTINO;
thisname = pathp = pathname;
pfunc = pass2check;
inum = ROOTINO;
thisname = pathp = pathname;
pfunc = pass2check;
+ switch (statemap[inum]) {
case USTATE:
errexit("ROOT INODE UNALLOCATED. TERMINATING.\n");
case USTATE:
errexit("ROOT INODE UNALLOCATED. TERMINATING.\n");
dp->di_mode |= IFDIR;
inodirty();
inosumbad++;
dp->di_mode |= IFDIR;
inodirty();
inosumbad++;
+ statemap[inum] = DSTATE;
/* fall into ... */
case DSTATE:
/* fall into ... */
case DSTATE:
printf("\n");
if (reply("CONTINUE") == 0)
errexit("");
printf("\n");
if (reply("CONTINUE") == 0)
errexit("");
+ statemap[inum] = DSTATE;
n = direrr("I OUT OF RANGE");
else {
again:
n = direrr("I OUT OF RANGE");
else {
again:
+ switch (statemap[inum]) {
case USTATE:
n = direrr("UNALLOCATED");
break;
case USTATE:
n = direrr("UNALLOCATED");
break;
break;
if ((dp = ginode()) == NULL)
break;
break;
if ((dp = ginode()) == NULL)
break;
- setstate(DIRCT ? DSTATE : FSTATE);
+ statemap[inum] = DIRCT ? DSTATE : FSTATE;
register DINODE *dp;
for (inum = ROOTINO; inum <= lastino; inum++) {
register DINODE *dp;
for (inum = ROOTINO; inum <= lastino; inum++) {
- if (getstate() == DSTATE) {
+ if (statemap[inum] == DSTATE) {
pfunc = findino;
srchname = "..";
savino = inum;
pfunc = findino;
srchname = "..";
savino = inum;
ckinode(dp, DATA);
if ((inum = parentdir) == 0)
break;
ckinode(dp, DATA);
if ((inum = parentdir) == 0)
break;
- } while (getstate() == DSTATE);
+ } while (statemap[inum] == DSTATE);
inum = orphan;
if (linkup() == 1) {
thisname = pathp = pathname;
inum = orphan;
if (linkup() == 1) {
thisname = pathp = pathname;
pfunc = pass4check;
for (inum = ROOTINO; inum <= lastino; inum++) {
pfunc = pass4check;
for (inum = ROOTINO; inum <= lastino; inum++) {
+ switch (statemap[inum]) {
+ n = lncntp[inum];
+ if (n)
adjust((short)n);
else {
for (blp = badlncnt;blp < badlnp; blp++)
adjust((short)n);
else {
for (blp = badlncnt;blp < badlnp; blp++)
pfatal("%ld %s I=%u", blk, s, inum);
printf("\n");
pfatal("%ld %s I=%u", blk, s, inum);
printf("\n");
- setstate(CLEAR); /* mark for possible clearing */
+ statemap[inum] = CLEAR;
register char *savname;
off_t savsize;
register char *savname;
off_t savsize;
+ statemap[inum] = FSTATE;
if ((dp = ginode()) == NULL)
return;
savname = thisname;
if ((dp = ginode()) == NULL)
return;
savname = thisname;
pfunc = pass4check;
ckinode(dp, ADDR);
zapino(dp);
pfunc = pass4check;
ckinode(dp, ADDR);
zapino(dp);
+ statemap[inum] = USTATE;
inodirty();
inosumbad++;
}
inodirty();
inosumbad++;
}
- if ((dp = ginode()) == NULL || !DIRCT || getstate() != FSTATE) {
+ if ((dp = ginode()) == NULL || !DIRCT || statemap[inum] != FSTATE) {
inum = orphan;
pfatal("SORRY. NO lost+found DIRECTORY");
printf("\n\n");
inum = orphan;
pfatal("SORRY. NO lost+found DIRECTORY");
printf("\n\n");
printf("\n\n");
return (0);
}
printf("\n\n");
return (0);
}
if (lostdir) {
pfunc = chgdd;
dp = ginode();
if (lostdir) {
pfunc = chgdd;
dp = ginode();
if ((dp = ginode()) != NULL) {
dp->di_nlink++;
inodirty();
if ((dp = ginode()) != NULL) {
dp->di_nlink++;
inodirty();
- setlncnt(getlncnt()+1);
}
inum = orphan;
pwarn("DIR I=%u CONNECTED. ", orphan);
}
inum = orphan;
pwarn("DIR I=%u CONNECTED. ", orphan);