aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/fossil/flchk.c
diff options
context:
space:
mode:
authorDavid du Colombier <0intro@gmail.com>2013-09-23 23:00:39 +0200
committerDavid du Colombier <0intro@gmail.com>2013-09-23 23:00:39 +0200
commit6f4d00ee45693290fae042b27536b54f77b96acd (patch)
tree60ad31bf16ed2000661c02345dd2a63851588a5d /src/cmd/fossil/flchk.c
parentfea86f063930ea187f1c77e93207ac8d39125520 (diff)
downloadplan9port-6f4d00ee45693290fae042b27536b54f77b96acd.tar.gz
plan9port-6f4d00ee45693290fae042b27536b54f77b96acd.tar.bz2
plan9port-6f4d00ee45693290fae042b27536b54f77b96acd.zip
fossil: import from plan 9
R=rsc https://codereview.appspot.com/7988047
Diffstat (limited to 'src/cmd/fossil/flchk.c')
-rw-r--r--src/cmd/fossil/flchk.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/cmd/fossil/flchk.c b/src/cmd/fossil/flchk.c
new file mode 100644
index 00000000..b19fd5be
--- /dev/null
+++ b/src/cmd/fossil/flchk.c
@@ -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);
+}
+