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 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 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 31 flclre(Fsck*, Block *b, int o) 32 { 33 Bprint(&bout, "# clre 0x%ux %d\n", b->addr, o); 34 } 35 36 static void 37 flclrp(Fsck*, Block *b, int o) 38 { 39 Bprint(&bout, "# clrp 0x%ux %d\n", b->addr, o); 40 } 41 42 static void 43 flclri(Fsck*, char *name, MetaBlock*, int, Block*) 44 { 45 Bprint(&bout, "# clri %s\n", name); 46 } 47 48 static void 49 flclose(Fsck*, Block *b, u32int epoch) 50 { 51 Bprint(&bout, "# bclose 0x%ux %ud\n", b->addr, epoch); 52 } 53 54 void 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