1 #ifndef lint 2 static char version[] = "@(#)pass3.c 3.1 (Berkeley) 03/31/84"; 3 #endif 4 5 #include <sys/param.h> 6 #include <sys/inode.h> 7 #include <sys/fs.h> 8 #include "fsck.h" 9 10 int pass2check(); 11 12 pass3() 13 { 14 register DINODE *dp; 15 struct inodesc idesc; 16 ino_t inumber, orphan; 17 int loopcnt; 18 19 bzero((char *)&idesc, sizeof(struct inodesc)); 20 idesc.id_type = DATA; 21 for (inumber = ROOTINO; inumber <= lastino; inumber++) { 22 if (statemap[inumber] == DSTATE) { 23 pathp = pathname; 24 *pathp++ = '?'; 25 *pathp = '\0'; 26 idesc.id_func = findino; 27 srchname = ".."; 28 idesc.id_parent = inumber; 29 loopcnt = 0; 30 do { 31 orphan = idesc.id_parent; 32 if ((dp = ginode(orphan)) == NULL) 33 break; 34 idesc.id_parent = 0; 35 idesc.id_filesize = dp->di_size; 36 idesc.id_number = orphan; 37 (void)ckinode(dp, &idesc); 38 if (idesc.id_parent == 0) 39 break; 40 if (loopcnt >= sblock.fs_cstotal.cs_ndir) 41 break; 42 loopcnt++; 43 } while (statemap[idesc.id_parent] == DSTATE); 44 if (linkup(orphan, idesc.id_parent) == 1) { 45 idesc.id_func = pass2check; 46 idesc.id_number = lfdir; 47 descend(&idesc, orphan); 48 } 49 } 50 } 51 } 52