1 #ifndef lint 2 static char version[] = "@(#)pass3.c 3.3 (Berkeley) 02/11/85"; 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 idesc.id_name = ".."; 28 idesc.id_parent = inumber; 29 loopcnt = 0; 30 do { 31 orphan = idesc.id_parent; 32 if (orphan < ROOTINO || orphan > imax) 33 break; 34 dp = ginode(orphan); 35 idesc.id_parent = 0; 36 idesc.id_filesize = dp->di_size; 37 idesc.id_number = orphan; 38 (void)ckinode(dp, &idesc); 39 if (idesc.id_parent == 0) 40 break; 41 if (loopcnt >= sblock.fs_cstotal.cs_ndir) 42 break; 43 loopcnt++; 44 } while (statemap[idesc.id_parent] == DSTATE); 45 if (linkup(orphan, idesc.id_parent) == 1) { 46 idesc.id_func = pass2check; 47 idesc.id_number = lfdir; 48 descend(&idesc, orphan); 49 } 50 } 51 } 52 } 53