Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <venti.h>
4 #include <libsec.h>
5 #include <thread.h>
7 enum
8 {
9 // XXX What to do here?
10 VtMaxLumpSize = 65535,
11 };
13 void
14 usage(void)
15 {
16 fprint(2, "usage: write [-z] [-h host] [-t type] <datablock\n");
17 threadexitsall("usage");
18 }
20 void
21 threadmain(int argc, char *argv[])
22 {
23 char *host;
24 int dotrunc, n, type;
25 uchar *p, score[VtScoreSize];
26 VtConn *z;
28 fmtinstall('F', vtfcallfmt);
29 fmtinstall('V', vtscorefmt);
31 host = nil;
32 dotrunc = 0;
33 type = VtDataType;
34 ARGBEGIN{
35 case 'z':
36 dotrunc = 1;
37 break;
38 case 'h':
39 host = EARGF(usage());
40 break;
41 case 't':
42 type = atoi(EARGF(usage()));
43 break;
44 default:
45 usage();
46 break;
47 }ARGEND
49 if(argc != 0)
50 usage();
52 p = vtmallocz(VtMaxLumpSize+1);
53 n = readn(0, p, VtMaxLumpSize+1);
54 if(n > VtMaxLumpSize)
55 sysfatal("input too big: max block size is %d", VtMaxLumpSize);
56 z = vtdial(host);
57 if(z == nil)
58 sysfatal("could not connect to server: %r");
59 if(vtconnect(z) < 0)
60 sysfatal("vtconnect: %r");
61 if(dotrunc)
62 n = vtzerotruncate(type, p, n);
63 if(vtwrite(z, score, type, p, n) < 0)
64 sysfatal("vtwrite: %r");
65 vthangup(z);
66 print("%V\n", score);
67 threadexitsall(0);
68 }