plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

mkroot.c (1178B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <venti.h>
      4 #include <thread.h>
      5 
      6 char *host;
      7 
      8 void
      9 usage(void)
     10 {
     11 	fprint(2, "usage: mkroot [-h host] name type score blocksize prev\n");
     12 	threadexitsall("usage");
     13 }
     14 
     15 void
     16 threadmain(int argc, char *argv[])
     17 {
     18 	uchar score[VtScoreSize];
     19 	uchar buf[VtRootSize];
     20 	VtConn *z;
     21 	VtRoot root;
     22 
     23 	ARGBEGIN{
     24 	case 'h':
     25 		host = EARGF(usage());
     26 		break;
     27 	default:
     28 		usage();
     29 		break;
     30 	}ARGEND
     31 
     32 	if(argc != 5)
     33 		usage();
     34 
     35 	fmtinstall('V', vtscorefmt);
     36 	fmtinstall('F', vtfcallfmt);
     37 
     38 	strecpy(root.name, root.name+sizeof root.name, argv[0]);
     39 	strecpy(root.type, root.type+sizeof root.type, argv[1]);
     40 	if(vtparsescore(argv[2], nil, root.score) < 0)
     41 		sysfatal("bad score '%s'", argv[2]);
     42 	root.blocksize = atoi(argv[3]);
     43 	if(vtparsescore(argv[4], nil, root.prev) < 0)
     44 		sysfatal("bad score '%s'", argv[4]);
     45 	vtrootpack(&root, buf);
     46 
     47 	z = vtdial(host);
     48 	if(z == nil)
     49 		sysfatal("could not connect to server: %r");
     50 
     51 	if(vtconnect(z) < 0)
     52 		sysfatal("vtconnect: %r");
     53 
     54 	if(vtwrite(z, score, VtRootType, buf, VtRootSize) < 0)
     55 		sysfatal("vtwrite: %r");
     56 	if(vtsync(z) < 0)
     57 		sysfatal("vtsync: %r");
     58 	vthangup(z);
     59 	print("%V\n", score);
     60 	threadexitsall(0);
     61 }