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