Blame


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