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

unix.superglobalmegacorp.com

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