Blame


1 23fb2edb 2005-07-24 devnull #include <u.h>
2 23fb2edb 2005-07-24 devnull #include <libc.h>
3 23fb2edb 2005-07-24 devnull #include <venti.h>
4 23fb2edb 2005-07-24 devnull #include <libsec.h>
5 23fb2edb 2005-07-24 devnull #include <thread.h>
6 23fb2edb 2005-07-24 devnull
7 23fb2edb 2005-07-24 devnull void
8 23fb2edb 2005-07-24 devnull usage(void)
9 23fb2edb 2005-07-24 devnull {
10 23fb2edb 2005-07-24 devnull fprint(2, "usage: root [-h host] score\n");
11 23fb2edb 2005-07-24 devnull threadexitsall("usage");
12 23fb2edb 2005-07-24 devnull }
13 23fb2edb 2005-07-24 devnull
14 23fb2edb 2005-07-24 devnull void
15 23fb2edb 2005-07-24 devnull threadmain(int argc, char *argv[])
16 23fb2edb 2005-07-24 devnull {
17 23fb2edb 2005-07-24 devnull int i, n;
18 23fb2edb 2005-07-24 devnull uchar score[VtScoreSize];
19 23fb2edb 2005-07-24 devnull uchar *buf;
20 23fb2edb 2005-07-24 devnull VtConn *z;
21 23fb2edb 2005-07-24 devnull char *host;
22 23fb2edb 2005-07-24 devnull VtRoot root;
23 23fb2edb 2005-07-24 devnull
24 23fb2edb 2005-07-24 devnull fmtinstall('F', vtfcallfmt);
25 23fb2edb 2005-07-24 devnull fmtinstall('V', vtscorefmt);
26 23fb2edb 2005-07-24 devnull quotefmtinstall();
27 23fb2edb 2005-07-24 devnull
28 23fb2edb 2005-07-24 devnull host = nil;
29 23fb2edb 2005-07-24 devnull ARGBEGIN{
30 23fb2edb 2005-07-24 devnull case 'h':
31 23fb2edb 2005-07-24 devnull host = EARGF(usage());
32 23fb2edb 2005-07-24 devnull break;
33 23fb2edb 2005-07-24 devnull default:
34 23fb2edb 2005-07-24 devnull usage();
35 23fb2edb 2005-07-24 devnull break;
36 23fb2edb 2005-07-24 devnull }ARGEND
37 23fb2edb 2005-07-24 devnull
38 23fb2edb 2005-07-24 devnull if(argc == 0)
39 23fb2edb 2005-07-24 devnull usage();
40 23fb2edb 2005-07-24 devnull
41 23fb2edb 2005-07-24 devnull buf = vtmallocz(VtMaxLumpSize);
42 23fb2edb 2005-07-24 devnull
43 23fb2edb 2005-07-24 devnull z = vtdial(host);
44 23fb2edb 2005-07-24 devnull if(z == nil)
45 23fb2edb 2005-07-24 devnull sysfatal("could not connect to server: %r");
46 23fb2edb 2005-07-24 devnull
47 23fb2edb 2005-07-24 devnull if(vtconnect(z) < 0)
48 23fb2edb 2005-07-24 devnull sysfatal("vtconnect: %r");
49 23fb2edb 2005-07-24 devnull
50 23fb2edb 2005-07-24 devnull for(i=0; i<argc; i++){
51 23fb2edb 2005-07-24 devnull if(vtparsescore(argv[i], nil, score) < 0){
52 23fb2edb 2005-07-24 devnull fprint(2, "cannot parse score '%s': %r\n", argv[i]);
53 23fb2edb 2005-07-24 devnull continue;
54 23fb2edb 2005-07-24 devnull }
55 23fb2edb 2005-07-24 devnull n = vtread(z, score, VtRootType, buf, VtMaxLumpSize);
56 23fb2edb 2005-07-24 devnull if(n < 0){
57 23fb2edb 2005-07-24 devnull fprint(2, "could not read block %V: %r\n", score);
58 23fb2edb 2005-07-24 devnull continue;
59 23fb2edb 2005-07-24 devnull }
60 23fb2edb 2005-07-24 devnull if(n != VtRootSize){
61 23fb2edb 2005-07-24 devnull fprint(2, "block %V is wrong size %d != 300\n", score, n);
62 23fb2edb 2005-07-24 devnull continue;
63 23fb2edb 2005-07-24 devnull }
64 23fb2edb 2005-07-24 devnull if(vtrootunpack(&root, buf) < 0){
65 23fb2edb 2005-07-24 devnull fprint(2, "unpacking block %V: %r\n", score);
66 23fb2edb 2005-07-24 devnull continue;
67 23fb2edb 2005-07-24 devnull }
68 23fb2edb 2005-07-24 devnull print("%V: %q %q %V %d %V\n", score, root.name, root.type, root.score, root.blocksize, root.prev);
69 23fb2edb 2005-07-24 devnull }
70 23fb2edb 2005-07-24 devnull vthangup(z);
71 23fb2edb 2005-07-24 devnull threadexitsall(0);
72 23fb2edb 2005-07-24 devnull }