1: #include <stdio.h>
   2: #include <sys/param.h>
   3: #include <sys/filsys.h>
   4: #include <sys/fblk.h>
   5: 
   6: daddr_t blkno   = 1;
   7: char    *dargv[] = {
   8:     0,
   9:     "/dev/rp0",
  10:     "/dev/rp3",
  11:     0
  12: };
  13: 
  14: 
  15: struct  filsys sblock;
  16: 
  17: int fi;
  18: daddr_t alloc();
  19: 
  20: main(argc, argv)
  21: char **argv;
  22: {
  23:     int i;
  24: 
  25:     if(argc <= 1) {
  26:         for(argc = 1; dargv[argc]; argc++);
  27:         argv = dargv;
  28:     }
  29: 
  30:     for(i=1; i<argc; i++) {
  31:         dfree(argv[i]);
  32:     }
  33: }
  34: 
  35: dfree(file)
  36: char *file;
  37: {
  38:     daddr_t i;
  39: 
  40:     fi = open(file, 0);
  41:     if(fi < 0) {
  42:         fprintf(stderr,"cannot open %s\n", file);
  43:         return;
  44:     }
  45:     sync();
  46:     bread(1L, (char *)&sblock, sizeof(sblock));
  47:     i = 0;
  48:     while(alloc())
  49:         i++;
  50:     printf("%s %D\n", file, i);
  51:     close(fi);
  52: }
  53: 
  54: daddr_t
  55: alloc()
  56: {
  57:     int i;
  58:     daddr_t b;
  59:     struct fblk buf;
  60: 
  61:     i = --sblock.s_nfree;
  62:     if(i<0 || i>=NICFREE) {
  63:         printf("bad free count, b=%D\n", blkno);
  64:         return(0);
  65:     }
  66:     b = sblock.s_free[i];
  67:     if(b == 0)
  68:         return(0);
  69:     if(b<sblock.s_isize || b>=sblock.s_fsize) {
  70:         printf("bad free block (%D)\n", b);
  71:         return(0);
  72:     }
  73:     if(sblock.s_nfree <= 0) {
  74:         bread(b, (char *)&buf, sizeof(buf));
  75:         blkno = b;
  76:         sblock.s_nfree = buf.df_nfree;
  77:         for(i=0; i<NICFREE; i++)
  78:             sblock.s_free[i] = buf.df_free[i];
  79:     }
  80:     return(b);
  81: }
  82: 
  83: bread(bno, buf, cnt)
  84: daddr_t bno;
  85: char *buf;
  86: {
  87:     int n;
  88:     extern errno;
  89: 
  90:     lseek(fi, bno<<BSHIFT, 0);
  91:     if((n=read(fi, buf, cnt)) != cnt) {
  92:         printf("read error %D\n", bno);
  93:         printf("count = %d; errno = %d\n", n, errno);
  94:         exit(0);
  95:     }
  96: }

Defined functions

alloc defined in line 54; used 2 times
bread defined in line 83; used 2 times
dfree defined in line 35; used 1 times
  • in line 31
main defined in line 20; never used

Defined variables

blkno defined in line 6; used 2 times
dargv defined in line 7; used 2 times
fi defined in line 17; used 5 times
sblock defined in line 15; used 9 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 667
Valid CSS Valid XHTML 1.0 Strict