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