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