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
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