fossil: import from plan 9
R=rsc https://codereview.appspot.com/7988047
This commit is contained in:
parent
fea86f0639
commit
6f4d00ee45
50 changed files with 22325 additions and 0 deletions
118
src/cmd/fossil/flchk.c
Normal file
118
src/cmd/fossil/flchk.c
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
#include "stdinc.h"
|
||||
#include <bio.h>
|
||||
#include "dat.h"
|
||||
#include "fns.h"
|
||||
|
||||
Biobuf bout;
|
||||
Fsck fsck;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: %s [-c cachesize] [-h host] file\n", argv0);
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
#pragma varargck argpos flprint 1
|
||||
|
||||
static int
|
||||
flprint(char *fmt, ...)
|
||||
{
|
||||
int n;
|
||||
va_list arg;
|
||||
|
||||
va_start(arg, fmt);
|
||||
n = Bvprint(&bout, fmt, arg);
|
||||
va_end(arg);
|
||||
return n;
|
||||
}
|
||||
|
||||
static void
|
||||
flclre(Fsck*, Block *b, int o)
|
||||
{
|
||||
Bprint(&bout, "# clre 0x%ux %d\n", b->addr, o);
|
||||
}
|
||||
|
||||
static void
|
||||
flclrp(Fsck*, Block *b, int o)
|
||||
{
|
||||
Bprint(&bout, "# clrp 0x%ux %d\n", b->addr, o);
|
||||
}
|
||||
|
||||
static void
|
||||
flclri(Fsck*, char *name, MetaBlock*, int, Block*)
|
||||
{
|
||||
Bprint(&bout, "# clri %s\n", name);
|
||||
}
|
||||
|
||||
static void
|
||||
flclose(Fsck*, Block *b, u32int epoch)
|
||||
{
|
||||
Bprint(&bout, "# bclose 0x%ux %ud\n", b->addr, epoch);
|
||||
}
|
||||
|
||||
void
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int csize = 1000;
|
||||
VtSession *z;
|
||||
char *host = nil;
|
||||
|
||||
fsck.useventi = 1;
|
||||
Binit(&bout, 1, OWRITE);
|
||||
ARGBEGIN{
|
||||
default:
|
||||
usage();
|
||||
case 'c':
|
||||
csize = atoi(ARGF());
|
||||
if(csize <= 0)
|
||||
usage();
|
||||
break;
|
||||
case 'f':
|
||||
fsck.useventi = 0;
|
||||
break;
|
||||
case 'h':
|
||||
host = ARGF();
|
||||
break;
|
||||
case 'v':
|
||||
fsck.printdirs = 1;
|
||||
break;
|
||||
}ARGEND;
|
||||
|
||||
if(argc != 1)
|
||||
usage();
|
||||
|
||||
vtAttach();
|
||||
|
||||
fmtinstall('L', labelFmt);
|
||||
fmtinstall('V', scoreFmt);
|
||||
fmtinstall('R', vtErrFmt);
|
||||
|
||||
/*
|
||||
* Connect to Venti.
|
||||
*/
|
||||
z = vtDial(host, 0);
|
||||
if(z == nil){
|
||||
if(fsck.useventi)
|
||||
vtFatal("could not connect to server: %s", vtGetError());
|
||||
}else if(!vtConnect(z, 0))
|
||||
vtFatal("vtConnect: %s", vtGetError());
|
||||
|
||||
/*
|
||||
* Initialize file system.
|
||||
*/
|
||||
fsck.fs = fsOpen(argv[0], z, csize, OReadOnly);
|
||||
if(fsck.fs == nil)
|
||||
vtFatal("could not open file system: %R");
|
||||
|
||||
fsck.print = flprint;
|
||||
fsck.clre = flclre;
|
||||
fsck.clrp = flclrp;
|
||||
fsck.close = flclose;
|
||||
fsck.clri = flclri;
|
||||
|
||||
fsCheck(&fsck);
|
||||
|
||||
exits(0);
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue