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