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