Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <diskfs.h>
5 void
6 usage(void)
7 {
8 fprint(2, "usage: fscat fspartition\n");
9 exits("usage");
10 }
12 int
13 main(int argc, char **argv)
14 {
15 extern int nfilereads;
16 u8int *zero;
17 u32int i;
18 u32int n;
19 Block *b;
20 Disk *disk;
21 Fsys *fsys;
23 ARGBEGIN{
24 default:
25 usage();
26 }ARGEND
28 if(argc != 1)
29 usage();
31 if((disk = diskopenfile(argv[0])) == nil)
32 sysfatal("diskopen: %r");
33 if((disk = diskcache(disk, 16384, 16)) == nil)
34 sysfatal("diskcache: %r");
35 if((fsys = fsysopen(disk)) == nil)
36 sysfatal("ffsopen: %r");
38 zero = emalloc(fsys->blocksize);
39 fprint(2, "%d blocks total\n", fsys->nblock);
40 n = 0;
41 for(i=0; i<fsys->nblock; i++){
42 if((b = fsysreadblock(fsys, i)) != nil){
43 write(1, b->data, fsys->blocksize);
44 n++;
45 blockput(b);
46 }else
47 write(1, zero, fsys->blocksize);
48 if(b == nil && i < 2)
49 sysfatal("block %d not in use", i);
50 }
51 fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);
52 exits(nil);
53 return 0;
54 }