61 lines · 1.2 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <venti.h>#include <thread.h> char *host; voidusage(void){	fprint(2, "usage: mkroot [-h host] name type score blocksize prev\n");	threadexitsall("usage");} voidthreadmain(int argc, char *argv[]){	uchar score[VtScoreSize];	uchar buf[VtRootSize];	VtConn *z;	VtRoot root; 	ARGBEGIN{	case 'h':		host = EARGF(usage());		break;	default:		usage();		break;	}ARGEND 	if(argc != 5)		usage(); 	fmtinstall('V', vtscorefmt);	fmtinstall('F', vtfcallfmt); 	strecpy(root.name, root.name+sizeof root.name, argv[0]);	strecpy(root.type, root.type+sizeof root.type, argv[1]);	if(vtparsescore(argv[2], nil, root.score) < 0)		sysfatal("bad score '%s'", argv[2]);	root.blocksize = atoi(argv[3]);	if(vtparsescore(argv[4], nil, root.prev) < 0)		sysfatal("bad score '%s'", argv[4]);	vtrootpack(&root, buf); 	z = vtdial(host);	if(z == nil)		sysfatal("could not connect to server: %r"); 	if(vtconnect(z) < 0)		sysfatal("vtconnect: %r"); 	if(vtwrite(z, score, VtRootType, buf, VtRootSize) < 0)		sysfatal("vtwrite: %r");	if(vtsync(z) < 0)		sysfatal("vtsync: %r");	vthangup(z);	print("%V\n", score);	threadexitsall(0);}