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>
9 f5a8ea6f 2011-06-02 rsc // XXX What to do here?
10 71ce470a 2012-05-29 rsc VtMaxLumpSize = 65535,
14 23fb2edb 2005-07-24 devnull usage(void)
16 23fb2edb 2005-07-24 devnull fprint(2, "usage: root [-h host] score\n");
17 23fb2edb 2005-07-24 devnull threadexitsall("usage");
21 23fb2edb 2005-07-24 devnull threadmain(int argc, char *argv[])
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;
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();
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());
44 23fb2edb 2005-07-24 devnull if(argc == 0)
47 f5a8ea6f 2011-06-02 rsc buf = vtmallocz(VtMaxLumpSize);
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");
53 23fb2edb 2005-07-24 devnull if(vtconnect(z) < 0)
54 23fb2edb 2005-07-24 devnull sysfatal("vtconnect: %r");
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;
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;
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;
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;
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);
76 23fb2edb 2005-07-24 devnull vthangup(z);
77 23fb2edb 2005-07-24 devnull threadexitsall(0);