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 <venti.h>
4 004aa293 2005-07-13 devnull #include <diskfs.h>
5 004aa293 2005-07-13 devnull #include <thread.h>
6 004aa293 2005-07-13 devnull
7 004aa293 2005-07-13 devnull void
8 004aa293 2005-07-13 devnull usage(void)
9 004aa293 2005-07-13 devnull {
10 004aa293 2005-07-13 devnull fprint(2, "usage: vcat [-z] score >diskfile\n");
11 004aa293 2005-07-13 devnull threadexitsall("usage");
12 004aa293 2005-07-13 devnull }
13 004aa293 2005-07-13 devnull
14 004aa293 2005-07-13 devnull void
15 004aa293 2005-07-13 devnull threadmain(int argc, char **argv)
16 004aa293 2005-07-13 devnull {
17 004aa293 2005-07-13 devnull extern int nfilereads;
18 004aa293 2005-07-13 devnull char *pref;
19 004aa293 2005-07-13 devnull int zerotoo;
20 004aa293 2005-07-13 devnull uchar score[VtScoreSize];
21 004aa293 2005-07-13 devnull u8int *zero;
22 004aa293 2005-07-13 devnull u32int i;
23 004aa293 2005-07-13 devnull u32int n;
24 004aa293 2005-07-13 devnull Block *b;
25 004aa293 2005-07-13 devnull Disk *disk;
26 004aa293 2005-07-13 devnull Fsys *fsys;
27 004aa293 2005-07-13 devnull VtCache *c;
28 004aa293 2005-07-13 devnull VtConn *z;
29 004aa293 2005-07-13 devnull
30 004aa293 2005-07-13 devnull zerotoo = 0;
31 004aa293 2005-07-13 devnull ARGBEGIN{
32 004aa293 2005-07-13 devnull case 'z':
33 004aa293 2005-07-13 devnull zerotoo = 1;
34 004aa293 2005-07-13 devnull break;
35 004aa293 2005-07-13 devnull default:
36 004aa293 2005-07-13 devnull usage();
37 004aa293 2005-07-13 devnull }ARGEND
38 004aa293 2005-07-13 devnull
39 004aa293 2005-07-13 devnull if(argc != 1)
40 004aa293 2005-07-13 devnull usage();
41 004aa293 2005-07-13 devnull
42 004aa293 2005-07-13 devnull fmtinstall('V', vtscorefmt);
43 004aa293 2005-07-13 devnull
44 004aa293 2005-07-13 devnull if(vtparsescore(argv[0], &pref, score) < 0)
45 004aa293 2005-07-13 devnull sysfatal("bad score '%s'", argv[0]);
46 004aa293 2005-07-13 devnull if((z = vtdial(nil)) == nil)
47 004aa293 2005-07-13 devnull sysfatal("vtdial: %r");
48 004aa293 2005-07-13 devnull if(vtconnect(z) < 0)
49 004aa293 2005-07-13 devnull sysfatal("vtconnect: %r");
50 e781b7b6 2009-06-16 rsc if((c = vtcachealloc(z, 16384*32)) == nil)
51 004aa293 2005-07-13 devnull sysfatal("vtcache: %r");
52 004aa293 2005-07-13 devnull if((disk = diskopenventi(c, score)) == nil)
53 004aa293 2005-07-13 devnull sysfatal("diskopenventi: %r");
54 004aa293 2005-07-13 devnull if((fsys = fsysopen(disk)) == nil)
55 83ab7d88 2007-11-27 rsc sysfatal("fsysopen: %r");
56 004aa293 2005-07-13 devnull
57 004aa293 2005-07-13 devnull zero = emalloc(fsys->blocksize);
58 004aa293 2005-07-13 devnull fprint(2, "%d blocks total\n", fsys->nblock);
59 004aa293 2005-07-13 devnull n = 0;
60 004aa293 2005-07-13 devnull for(i=0; i<fsys->nblock; i++){
61 004aa293 2005-07-13 devnull if((b = fsysreadblock(fsys, i)) != nil){
62 004aa293 2005-07-13 devnull if(pwrite(1, b->data, fsys->blocksize,
63 004aa293 2005-07-13 devnull (u64int)fsys->blocksize*i) != fsys->blocksize)
64 004aa293 2005-07-13 devnull fprint(2, "error writing block %lud: %r\n", i);
65 004aa293 2005-07-13 devnull n++;
66 004aa293 2005-07-13 devnull blockput(b);
67 933a8625 2007-06-12 devnull }else if(zerotoo || i==fsys->nblock-1)
68 004aa293 2005-07-13 devnull if(pwrite(1, zero, fsys->blocksize,
69 004aa293 2005-07-13 devnull (u64int)fsys->blocksize*i) != fsys->blocksize)
70 004aa293 2005-07-13 devnull fprint(2, "error writing block %lud: %r\n", i);
71 004aa293 2005-07-13 devnull }
72 004aa293 2005-07-13 devnull fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);
73 004aa293 2005-07-13 devnull threadexitsall(nil);
74 004aa293 2005-07-13 devnull }