Annotation of 43BSDTahoe/etc/fsck/fsck.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)fsck.h      5.7 (Berkeley) 5/7/88
                      7:  */
                      8: 
                      9: #define        MAXDUP          10       /* limit on dup blks (per inode) */
                     10: #define        MAXBAD          10       /* limit on bad blks (per inode) */
                     11: #define MAXBUFSPACE    128*1024 /* maximum space to allocate to buffers */
                     12: 
                     13: typedef        int     (*SIG_TYP)();
                     14: 
                     15: #ifndef BUFSIZ
                     16: #define BUFSIZ 1024
                     17: #endif
                     18: 
                     19: #define        USTATE  01              /* inode not allocated */
                     20: #define        FSTATE  02              /* inode is file */
                     21: #define        DSTATE  03              /* inode is directory */
                     22: #define        DFOUND  04              /* directory found during descent */
                     23: #define        DCLEAR  05              /* directory is to be cleared */
                     24: #define        FCLEAR  06              /* file is to be cleared */
                     25: 
                     26: typedef struct dinode  DINODE;
                     27: typedef struct direct  DIRECT;
                     28: 
                     29: #define        ALLOC(dip)      (((dip)->di_mode & IFMT) != 0)
                     30: #define        DIRCT(dip)      (((dip)->di_mode & IFMT) == IFDIR)
                     31: #define        SPECIAL(dip) \
                     32:        (((dip)->di_mode & IFMT) == IFBLK || ((dip)->di_mode & IFMT) == IFCHR)
                     33: 
                     34: /*
                     35:  * buffer cache structure.
                     36:  */
                     37: struct bufarea {
                     38:        struct bufarea  *b_next;                /* free list queue */
                     39:        struct bufarea  *b_prev;                /* free list queue */
                     40:        daddr_t b_bno;
                     41:        int     b_size;
                     42:        int     b_errs;
                     43:        int     b_flags;
                     44:        union {
                     45:                char    *b_buf;                 /* buffer space */
                     46:                daddr_t *b_indir;               /* indirect block */
                     47:                struct  fs *b_fs;               /* super block */
                     48:                struct  cg *b_cg;               /* cylinder group */
                     49:                struct dinode *b_dinode;        /* inode block */
                     50:        } b_un;
                     51:        char    b_dirty;
                     52: };
                     53: 
                     54: #define        B_INUSE 1
                     55: typedef struct bufarea BUFAREA;
                     56: 
                     57: #define        MINBUFS         5       /* minimum number of buffers required */
                     58: BUFAREA        bufhead;                /* head of list of other blks in filesys */
                     59: BUFAREA        sblk;                   /* file system superblock */
                     60: BUFAREA        cgblk;                  /* cylinder group blocks */
                     61: BUFAREA        *getdatablk();
                     62: 
                     63: #define        dirty(x)        (x)->b_dirty = 1
                     64: #define        initbarea(x) \
                     65:        (x)->b_dirty = 0; \
                     66:        (x)->b_bno = (daddr_t)-1; \
                     67:        (x)->b_flags = 0;
                     68: 
                     69: #define        sbdirty()       sblk.b_dirty = 1
                     70: #define        cgdirty()       cgblk.b_dirty = 1
                     71: #define        sblock          (*sblk.b_un.b_fs)
                     72: #define        cgrp            (*cgblk.b_un.b_cg)
                     73: 
                     74: struct filecntl {
                     75:        int     rfdes;
                     76:        int     wfdes;
                     77:        int     mod;
                     78: } dfile;                       /* file descriptors for filesys */
                     79: 
                     80: enum fixstate {DONTKNOW, NOFIX, FIX};
                     81: 
                     82: struct inodesc {
                     83:        enum fixstate id_fix;   /* policy on fixing errors */
                     84:        int (*id_func)();       /* function to be applied to blocks of inode */
                     85:        ino_t id_number;        /* inode number described */
                     86:        ino_t id_parent;        /* for DATA nodes, their parent */
                     87:        daddr_t id_blkno;       /* current block number being examined */
                     88:        int id_numfrags;        /* number of frags contained in block */
                     89:        long id_filesize;       /* for DATA nodes, the size of the directory */
                     90:        int id_loc;             /* for DATA nodes, current location in dir */
                     91:        int id_entryno;         /* for DATA nodes, current entry number */
                     92:        DIRECT *id_dirp;        /* for DATA nodes, ptr to current entry */
                     93:        char *id_name;          /* for DATA nodes, name to find or enter */
                     94:        char id_type;           /* type of descriptor, DATA or ADDR */
                     95: };
                     96: /* file types */
                     97: #define        DATA    1
                     98: #define        ADDR    2
                     99: 
                    100: /*
                    101:  * Linked list of duplicate blocks.
                    102:  * 
                    103:  * The list is composed of two parts. The first part of the
                    104:  * list (from duplist through the node pointed to by muldup)
                    105:  * contains a single copy of each duplicate block that has been 
                    106:  * found. The second part of the list (from muldup to the end)
                    107:  * contains duplicate blocks that have been found more than once.
                    108:  * To check if a block has been found as a duplicate it is only
                    109:  * necessary to search from duplist through muldup. To find the 
                    110:  * total number of times that a block has been found as a duplicate
                    111:  * the entire list must be searched for occurences of the block
                    112:  * in question. The following diagram shows a sample list where
                    113:  * w (found twice), x (found once), y (found three times), and z
                    114:  * (found once) are duplicate block numbers:
                    115:  *
                    116:  *    w -> y -> x -> z -> y -> w -> y
                    117:  *    ^                     ^
                    118:  *    |                     |
                    119:  * duplist       muldup
                    120:  */
                    121: struct dups {
                    122:        struct dups *next;
                    123:        daddr_t dup;
                    124: };
                    125: struct dups *duplist;          /* head of dup list */
                    126: struct dups *muldup;           /* end of unique duplicate dup block numbers */
                    127: 
                    128: /*
                    129:  * Linked list of inodes with zero link counts.
                    130:  */
                    131: struct zlncnt {
                    132:        struct zlncnt *next;
                    133:        ino_t zlncnt;
                    134: };
                    135: struct zlncnt *zlnhead;                /* head of zero link count list */
                    136: 
                    137: char   rawflg;
                    138: char   *devname;
                    139: long   dev_bsize;              /* computed value of DEV_BSIZE */
                    140: long   secsize;                /* actual disk sector size */
                    141: char   nflag;                  /* assume a no response */
                    142: char   yflag;                  /* assume a yes response */
                    143: int    bflag;                  /* location of alternate super block */
                    144: int    debug;                  /* output debugging info */
                    145: int    cvtflag;                /* convert to old file system format */
                    146: char   preen;                  /* just fix normal inconsistencies */
                    147: char   hotroot;                /* checking root device */
                    148: char   havesb;                 /* superblock has been read */
                    149: 
                    150: char   *blockmap;              /* ptr to primary blk allocation map */
                    151: char   *statemap;              /* ptr to inode state table */
                    152: short  *lncntp;                /* ptr to link count table */
                    153: 
                    154: char   pathname[BUFSIZ];       /* current pathname */
                    155: char   *pathp;                 /* pointer to pathname position */
                    156: char   *endpathname;
                    157: 
                    158: daddr_t        fmax;                   /* number of blocks in the volume */
                    159: ino_t  imax;                   /* number of inodes */
                    160: ino_t  lastino;                /* hiwater mark of inodes */
                    161: ino_t  lfdir;                  /* lost & found directory inode number */
                    162: char   *lfname;                /* lost & found directory name */
                    163: 
                    164: off_t  maxblk;                 /* largest logical blk in file */
                    165: off_t  bmapsz;                 /* num chars in blockmap */
                    166: 
                    167: daddr_t        n_blks;                 /* number of blocks used */
                    168: daddr_t        n_files;                /* number of files seen */
                    169: 
                    170: #define        zapino(x)       (*(x) = zino)
                    171: struct dinode zino;
                    172: 
                    173: #define        setbmap(x)      setbit(blockmap, x)
                    174: #define        getbmap(x)      isset(blockmap, x)
                    175: #define        clrbmap(x)      clrbit(blockmap, x)
                    176: 
                    177: #define        FOUND   020
                    178: #define        ALTERED 010
                    179: #define        KEEPON  04
                    180: #define        SKIP    02
                    181: #define        STOP    01
                    182: 
                    183: time_t time();
                    184: DINODE *ginode();
                    185: BUFAREA        *getblk();
                    186: int    findino();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.