Blob


1 #include "stdinc.h"
2 #include <bio.h>
3 #include "dat.h"
4 #include "fns.h"
6 Biobuf bout;
7 Fsck fsck;
9 static void
10 usage(void)
11 {
12 fprint(2, "usage: %s [-c cachesize] [-h host] file\n", argv0);
13 threadexitsall("usage");
14 }
16 #pragma varargck argpos flprint 1
18 static int
19 flprint(char *fmt, ...)
20 {
21 int n;
22 va_list arg;
24 va_start(arg, fmt);
25 n = Bvprint(&bout, fmt, arg);
26 va_end(arg);
27 return n;
28 }
30 static void
31 flclre(Fsck *chk, Block *b, int o)
32 {
33 USED(chk);
34 Bprint(&bout, "# clre 0x%ux %d\n", b->addr, o);
35 }
37 static void
38 flclrp(Fsck *chk, Block *b, int o)
39 {
40 USED(chk);
41 Bprint(&bout, "# clrp 0x%ux %d\n", b->addr, o);
42 }
44 static void
45 flclri(Fsck *chk, char *name, MetaBlock *mb, int i, Block *b)
46 {
47 USED(chk);
48 USED(mb);
49 USED(i);
50 USED(b);
51 Bprint(&bout, "# clri %s\n", name);
52 }
54 static void
55 flclose(Fsck *chk, Block *b, u32int epoch)
56 {
57 USED(chk);
58 Bprint(&bout, "# bclose 0x%ux %ud\n", b->addr, epoch);
59 }
61 void
62 threadmain(int argc, char *argv[])
63 {
64 int csize = 1000;
65 VtConn *z;
66 char *host = nil;
68 fsck.useventi = 1;
69 Binit(&bout, 1, OWRITE);
70 ARGBEGIN{
71 default:
72 usage();
73 case 'c':
74 csize = atoi(ARGF());
75 if(csize <= 0)
76 usage();
77 break;
78 case 'f':
79 fsck.useventi = 0;
80 break;
81 case 'h':
82 host = ARGF();
83 break;
84 case 'v':
85 fsck.printdirs = 1;
86 break;
87 }ARGEND;
89 if(argc != 1)
90 usage();
92 fmtinstall('L', labelFmt);
93 fmtinstall('V', scoreFmt);
95 /*
96 * Connect to Venti.
97 */
98 z = vtdial(host);
99 if(z == nil){
100 if(fsck.useventi)
101 sysfatal("could not connect to server: %r");
102 }else if(vtconnect(z) < 0)
103 sysfatal("vtconnect: %r");
105 /*
106 * Initialize file system.
107 */
108 fsck.fs = fsOpen(argv[0], z, csize, OReadOnly);
109 if(fsck.fs == nil)
110 sysfatal("could not open file system: %r");
112 fsck.print = flprint;
113 fsck.clre = flclre;
114 fsck.clrp = flclrp;
115 fsck.close = flclose;
116 fsck.clri = flclri;
118 fsCheck(&fsck);
120 threadexitsall(0);