|
|
1.1 ! root 1: /* ! 2: * Header file for fsck -- File System Check Program ! 3: * ! 4: */ ! 5: ! 6: #include <sys/types.h> ! 7: #include <canon.h> ! 8: #include <dirent.h> ! 9: #include <sys/fblk.h> ! 10: #include <sys/filsys.h> ! 11: #include <sys/ino.h> ! 12: #include <sys/stat.h> ! 13: #include <time.h> ! 14: ! 15: #if _I386 ! 16: #define SMALLMODEL 0 ! 17: #else ! 18: #define SMALLMODEL 1 ! 19: #endif ! 20: ! 21: #if HPCOHERENT ! 22: typedef long fsize_t; ! 23: #endif ! 24: ! 25: /* ! 26: * Conditional Compilation Flags ! 27: */ ! 28: ! 29: #define NOT_ALL_ZERO_INODE /* Dependent on whether or not an inode */ ! 30: #ifdef ALL_ZERO_INODE /* is totally zeroed when unallocated */ ! 31: #undef ALL_ZERO_INODE /* or simply a zero mode and zero link */ ! 32: #endif ! 33: ! 34: ! 35: /* ! 36: * Definitions and Externs ! 37: */ ! 38: ! 39: #define NUL 0 /* true zero ! */ ! 40: #define NULL ((char *)0) ! 41: ! 42: #define YES 3 /* default actions */ ! 43: #define NO 2 ! 44: #define ASK 1 ! 45: ! 46: #if SMALLMODEL ! 47: #define NFILSYS 10 /* max number of file systems */ ! 48: #else ! 49: #define NFILSYS 256 /* max number of file systems */ ! 50: #endif ! 51: ! 52: #define MAXCH 20 /* max length of filesys name */ ! 53: ! 54: #define MAXBADOK 10 /* Max number of bad blocks before excessive */ ! 55: extern int numbad; /* num bad blocks found so far this inode*/ ! 56: ! 57: #define MAXDUPOK 10 /* Max number of dup blocks */ ! 58: /* in a single inode before excessive */ ! 59: #if SMALLMODEL ! 60: #define DUPTBLSIZE 64 /* Max number of dup referenced blocks */ ! 61: #else ! 62: #define DUPTBLSIZE 1024 /* Max number of dup referenced blocks */ ! 63: #endif ! 64: ! 65: extern daddr_t dupblck[]; /* table of duplicate referenced blocks */ ! 66: extern int totdups; /* number of dup blocks found so far */ ! 67: ! 68: #define MAXBADFREE 10 /* max bad in free list before abort */ ! 69: #define MAXDUPFREE 10 /* max dup in free list before abort */ ! 70: ! 71: #define GOOD 1 /* returned by bad() in util.c */ ! 72: #define BAD 0 ! 73: ! 74: #define TRUE 1 /* errflag possibilities */ ! 75: #define FALSE 0 ! 76: extern int errflag; /* errflag indicates not to do phases */ ! 77: ! 78: #define OK 1 /* used to indicate excessive bad/dup */ ! 79: #define STOP 0 /* blocks in an inode in phase1.c */ ! 80: #define BAD_DUP 2 ! 81: ! 82: #define FIRSTIN 2 /* First real inode number */ ! 83: ! 84: #define ND 10 /* Number of Direct Blocks */ ! 85: #undef NI ! 86: #define NI 1 ! 87: #define NII 1 ! 88: #define NIII 1 ! 89: #undef NADDR ! 90: #define NADDR (ND+NI+NII+NIII) ! 91: extern int offsets[]; /* table of offsets for level of indirection */ ! 92: /* for the blocks in an inode */ ! 93: ! 94: extern char nextchar(); /* used in util.c */ ! 95: extern int fsfd; /* file system file descriptor */ ! 96: extern int mdaction; /* default action for this invocation */ ! 97: extern int daction; /* default action for current file system */ ! 98: extern int writeflg; /* system write ok or read-only */ ! 99: extern int qflag; /* quiet fsck flag */ ! 100: extern int fflag; /* fast fsck flag */ ! 101: extern int sflag; /* force free list salvation */ ! 102: extern daddr_t fsize; /* file system size in blocks */ ! 103: extern int isize; /* first block not in inode list */ ! 104: /* isize is NOT unsigned so that comparisons */ ! 105: /* with longs will not cast the long to */ ! 106: /* unsigned thus producing confusing results */ ! 107: ! 108: extern daddr_t totfree; /* running count of total free blocks */ ! 109: extern unsigned ninodes;/* Number of inodes in the files system */ ! 110: extern char *fsname; /* file system name */ ! 111: extern fsize_t pinfo(); /* returns size of file, in phase2.c */ ! 112: extern ino_t lostfound(); /* returns inumber of lost+found dir */ ! 113: extern struct dinode *ptrino(); /* returns a ptr to inode, give number */ ! 114: extern char databuf[]; /* buffer to read in block, used throughout */ ! 115: extern char buf2[]; /* alternate data buffer */ ! 116: extern daddr_t cdbn; /* current block number, used by nextblock() */ ! 117: #define DSIZE (sizeof(struct direct)) ! 118: extern char *lostname; /* name of lost+found directory */ ! 119: extern char *nameit(); /* nameing function for lost dirs and files */ ! 120: extern int depth; /* used during tree traversal in phase2.c */ ! 121: extern struct direct *path[]; /* used during tree traversal in phase2.c */ ! 122: extern char *typename(); /* return string to type of inode */ ! 123: extern struct filsys *sbp; /* Super Block */ ! 124: extern int sbpfix; /* flag for super block fixes */ ! 125: extern struct stat stats; /* used by statit() in util.c */ ! 126: extern dev_t rootdev; /* root device number */ ! 127: extern dev_t fsysrdev; /* file system real device number */ ! 128: extern int mounted; /* flag indicating mountedness of filesystem */ ! 129: extern int changeflg; /* file system modified flag */ ! 130: extern int fixerup; /* flag to rebuild free list */ ! 131: extern char *fixit; /* Prompt message phase[45].c */ ! 132: extern int numfiles; /* num files in system */ ! 133: extern daddr_t imap(); /* function for disk block mapping in util.c */ ! 134: extern fsize_t lostsize; /* Size of files cleared in phase4.c */ ! 135: extern char *tempFile; /* TMP File name for virtual.c */ ! 136: ! 137: #define SUCCESS 1 /* used in connect() in phase3.c */ ! 138: #define FAILURE 0 ! 139: ! 140: #define MODEMASK 0x07 ! 141: #define ALLOCMASK 0x06 ! 142: #define UNALLOC 0x00 ! 143: #define UNKNOWN 0x01 ! 144: #define IDIR 0x02 ! 145: #define IREG 0x03 ! 146: #define ICHR 0x04 ! 147: #define IBLK 0x05 ! 148: #define IPIPE 0x06 ! 149: #define IBAD_IDUP 0x08 ! 150: #define VISITED 0x10 ! 151: #define UNREFDIR 0x20 ! 152: #define CHILDDIR 0x40 ! 153: #define IFREELIST 0x80 ! 154: ! 155: /* ! 156: * Macros for tables ! 157: */ ! 158: ! 159: #if SMALLMODEL ! 160: /* Actions for virtual block system */ ! 161: enum vact { testBlock, markBlock, unmarkBlock, grabBlock, ! 162: testDup, markDup, unmarkDup, setDup, ! 163: Flags, setFlags, orFlags, ! 164: linkCtr, incLinkctr, setLinkctr }; ! 165: ! 166: #define testblock(bn) findblock((unsigned long)(bn), testBlock) ! 167: #define markblock(bn) findblock((unsigned long)(bn), markBlock) ! 168: #define unmarkblock(bn) findblock((unsigned long)(bn), unmarkBlock) ! 169: ! 170: #define testdup(bn) findblock((unsigned long)(bn), testDup) ! 171: #define markdup(bn) findblock((unsigned long)(bn), markDup) ! 172: #define unmarkdup(bn) findblock((unsigned long)(bn), unmarkDup) ! 173: ! 174: #define flags(ino) findblock((unsigned long)(ino), Flags) ! 175: #define setflags(ino, data) findblock((unsigned long)(ino), setFlags, data) ! 176: #define orflags(ino, data) findblock((unsigned long)(ino), orFlags, data) ! 177: ! 178: #define linkctr(ino) findblock((unsigned long)(ino), linkCtr) ! 179: #define inclinkctr(ino) findblock((unsigned long)(ino), incLinkctr) ! 180: #define setlinkctr(ino, data) findblock((unsigned long)(ino), setLinkctr, data) ! 181: ! 182: #define badblks(ino) (flags(ino)&IBAD_IDUP) ! 183: ! 184: #else ! 185: unsigned short *linkPtr; ! 186: unsigned char *flagPtr, *blockPtr, *dupPtr; ! 187: ! 188: #define bix(bn) (((unsigned long)(bn)) >> LOGNBPC) ! 189: #define bitm(bn) (1 << ((bn) & (NBPC - 1))) ! 190: ! 191: #define testblock(bn) (blockPtr[bix(bn)] & bitm(bn)) ! 192: #define markblock(bn) (blockPtr[bix(bn)] |= bitm(bn)) ! 193: #define unmarkblock(bn) (blockPtr[bix(bn)] ^= bitm(bn)) ! 194: ! 195: #define testdup(bn) (dupPtr[bix(bn)] & bitm(bn)) ! 196: #define markdup(bn) (dupPtr[bix(bn)] |= bitm(bn)) ! 197: #define unmarkdup(bn) (dupPtr[bix(bn)] ^= bitm(bn)) ! 198: ! 199: #define flags(ino) flagPtr[ino - 1] ! 200: #define setflags(ino, data) (flags(ino) = data) ! 201: #define orflags(ino, data) (flags(ino) |= data) ! 202: ! 203: #define linkctr(ino) linkPtr[ino - 1] ! 204: #define inclinkctr(ino) (++linkctr(ino)) ! 205: #define setlinkctr(ino, data) (linkctr(ino) = data) ! 206: ! 207: #define badblks(ino) (flags(ino) & IBAD_IDUP) ! 208: #endif ! 209: ! 210: /* ! 211: * Miscellany ! 212: */ ! 213: #define NBPC 8 /* number of bits per character */ ! 214: #define LOGNBPC 3 /* Log2 Number of Bits per Character */ ! 215: #define MAXINTN 255 /* used for interleave table */ ! 216: /* in phase6.c */ ! 217: /* ! 218: * Stdio Stuff ! 219: */ ! 220: extern char *malloc(); ! 221: extern char *calloc(); ! 222: #undef putchar(c) ! 223: #define putchar(c) { char b = c; write(1, &b, 1); }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.