1: #
   2: 
   3: char    *dargv[]
   4: {
   5:     "/dev/rrk2",
   6:     "/dev/rrp0",
   7:     0
   8: };
   9: 
  10: #define NINODE  16*16
  11: #define NI  20
  12: 
  13: #include "/usr/sys/ino.h"
  14: #include "/usr/sys/filsys.h"
  15: 
  16: struct  inode   inode[NINODE];
  17: struct  filsys  sblock;
  18: 
  19: int sflg;
  20: int headpr;
  21: 
  22: int ilist[NI] { -1};
  23: int fi;
  24: char    *ecount;
  25: char    *lasts;
  26: int ino;
  27: int nerror;
  28: int nfiles;
  29: struct dir {
  30:     int ino;
  31:     char    name[14];
  32: };
  33: 
  34: main(argc, argv)
  35: char **argv;
  36: {
  37:     register char **p;
  38:     register int n, *lp;
  39: 
  40:     ecount = sbrk(0);
  41:     if (argc == 1) {
  42:         for (p = dargv; *p;)
  43:             check(*p++);
  44:         return(nerror);
  45:     }
  46:     while (--argc) {
  47:         argv++;
  48:         if (**argv=='-') switch ((*argv)[1]) {
  49:         case 's':
  50:             sflg++;
  51:             continue;
  52: 
  53:         case 'i':
  54:             lp = ilist;
  55:             while (lp < &ilist[NI-1] && (n = number(argv[1]))) {
  56:                 *lp++ = n;
  57:                 argv++;
  58:                 argc--;
  59:             }
  60:             *lp++ = -1;
  61:             continue;
  62: 
  63:         default:
  64:             printf("Bad flag\n");
  65:         }
  66:         check(*argv);
  67:     }
  68:     return(nerror);
  69: }
  70: 
  71: check(file)
  72: char *file;
  73: {
  74:     register i, j;
  75:     fi = open(file, 0);
  76:     if(fi < 0) {
  77:         printf("cannot open %s\n", file);
  78:         return;
  79:     }
  80:     headpr = 0;
  81:     printf("%s:\n", file);
  82:     sync();
  83:     bread(1, &sblock, 512);
  84:     nfiles = sblock.s_isize*16;
  85:     if (lasts < nfiles) {
  86:         if ((sbrk(nfiles - lasts)) == -1) {
  87:             printf("Not enough core\n");
  88:             exit(04);
  89:         }
  90:         lasts = nfiles;
  91:     }
  92:     for (i=0; i<nfiles; i++)
  93:         ecount[i] = 0;
  94:     for(i=0; ino<nfiles; i =+ NINODE/16) {
  95:         bread(i+2, inode, sizeof inode);
  96:         for(j=0; j<NINODE && ino<nfiles; j++) {
  97:             ino++;
  98:             pass1(&inode[j]);
  99:         }
 100:     }
 101:     ino = 0;
 102:     for (i=0; ino<nfiles; i =+ NINODE/16) {
 103:         bread(i+2, inode, sizeof inode);
 104:         for (j=0; j<NINODE && ino<nfiles; j++) {
 105:             ino++;
 106:             pass2(&inode[j]);
 107:         }
 108:     }
 109: }
 110: 
 111: pass1(aip)
 112: struct inode *aip;
 113: {
 114:     register doff;
 115:     register struct inode *ip;
 116:     register struct dir *dp;
 117:     int i;
 118: 
 119:     ip = aip;
 120:     if((ip->i_mode&IALLOC) == 0)
 121:         return;
 122:     if((ip->i_mode&IFMT) != IFDIR)
 123:         return;
 124:     doff = 0;
 125:     while (dp = dread(ip, doff)) {
 126:         doff =+ 16;
 127:         if (dp->ino==0)
 128:             continue;
 129:         for (i=0; ilist[i] != -1; i++)
 130:             if (ilist[i]==dp->ino)
 131:                 printf("%5l arg; %l/%.14s\n", dp->ino, ino, dp->name);
 132:         ecount[dp->ino]++;
 133:     }
 134: }
 135: 
 136: pass2(aip)
 137: {
 138:     register struct inode *ip;
 139:     register i;
 140: 
 141:     ip = aip;
 142:     i = ino;
 143:     if ((ip->i_mode&IALLOC)==0 && ecount[i]==0)
 144:         return;
 145:     if (ip->i_nlink==ecount[i] && ip->i_nlink!=0)
 146:         return;
 147:     if (headpr==0) {
 148:         printf("entries	link cnt\n");
 149:         headpr++;
 150:     }
 151:     printf("%l	%d	%d\n", ino,
 152:         ecount[i]&0377, ip->i_nlink&0377);
 153: }
 154: 
 155: dread(aip, aoff)
 156: {
 157:     register b, off;
 158:     register struct inode *ip;
 159:     static ibuf[256];
 160:     static char buf[512];
 161: 
 162:     off = aoff;
 163:     ip = aip;
 164:     if ((off&0777)==0) {
 165:         if (off==0177000) {
 166:             printf("Monstrous directory %l\n", ino);
 167:             return(0);
 168:         }
 169:         if ((ip->i_mode&ILARG)==0) {
 170:             if (off>=010000 || (b = ip->i_addr[off>>9])==0)
 171:                 return(0);
 172:             bread(b, buf, 512);
 173:         } else {
 174:             if (off==0) {
 175:                 if (ip->i_addr[0]==0)
 176:                     return(0);
 177:                 bread(ip->i_addr[0], ibuf, 512);
 178:             }
 179:             if ((b = ibuf[(off>>9)&0177])==0)
 180:                 return(0);
 181:             bread(b, buf, 512);
 182:         }
 183:     }
 184:     return(&buf[off&0777]);
 185: }
 186: 
 187: bread(bno, buf, cnt)
 188: {
 189: 
 190:     seek(fi, bno, 3);
 191:     if(read(fi, buf, cnt) != cnt) {
 192:         printf("read error %d\n", bno);
 193:         exit();
 194:     }
 195: }
 196: 
 197: bwrite(bno, buf)
 198: {
 199: 
 200:     seek(fi, bno, 3);
 201:     if(write(fi, buf, 512) != 512) {
 202:         printf("write error %d\n", bno);
 203:         exit();
 204:     }
 205: }
 206: 
 207: number(as)
 208: char *as;
 209: {
 210:     register n, c;
 211:     register char *s;
 212: 
 213:     s = as;
 214:     n = 0;
 215:     while ((c = *s++) >= '0' && c <= '9') {
 216:         n = n*10+c-'0';
 217:     }
 218:     return(n);
 219: }

Defined functions

bread defined in line 187; used 6 times
bwrite defined in line 197; never used
check defined in line 71; used 2 times
dread defined in line 155; used 1 times
main defined in line 34; never used
number defined in line 207; used 1 times
  • in line 55
pass1 defined in line 111; used 1 times
  • in line 98
pass2 defined in line 136; used 1 times

Defined variables

dargv defined in line 3; used 1 times
  • in line 42
ecount defined in line 24; used 6 times
fi defined in line 23; used 6 times
headpr defined in line 20; used 3 times
ilist defined in line 22; used 4 times
ino defined in line 26; used 16 times
inode defined in line 16; used 6 times
lasts defined in line 25; used 3 times
nerror defined in line 27; used 2 times
nfiles defined in line 28; used 9 times
sblock defined in line 17; used 2 times
sflg defined in line 19; used 1 times
  • in line 50

Defined struct's

dir defined in line 29; used 2 times
  • in line 116(2)

Defined macros

NI defined in line 11; used 2 times
NINODE defined in line 10; used 5 times
Last modified: 1975-05-14
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1731
Valid CSS Valid XHTML 1.0 Strict