URI:
       tflchk.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tflchk.c (1857B)
       ---
            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         threadexitsall("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 *chk, Block *b, int o)
           32 {
           33         USED(chk);
           34         Bprint(&bout, "# clre 0x%ux %d\n", b->addr, o);
           35 }
           36 
           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 }
           43 
           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 }
           53 
           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 }
           60 
           61 void
           62 threadmain(int argc, char *argv[])
           63 {
           64         int csize = 1000;
           65         VtConn *z;
           66         char *host = nil;
           67 
           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;
           88 
           89         if(argc != 1)
           90                 usage();
           91 
           92         fmtinstall('L', labelFmt);
           93         fmtinstall('V', scoreFmt);
           94 
           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");
          104 
          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");
          111 
          112         fsck.print = flprint;
          113         fsck.clre = flclre;
          114         fsck.clrp = flclrp;
          115         fsck.close = flclose;
          116         fsck.clri = flclri;
          117 
          118         fsCheck(&fsck);
          119 
          120         threadexitsall(0);
          121 }