Blame


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