xref: /plan9/sys/src/9/boot/testboot.c (revision 6a9fc400c33447ef5e1cda7185cb4de2c8e8010e)
1*6a9fc400SDavid du Colombier #include <u.h>
2*6a9fc400SDavid du Colombier #include <libc.h>
3*6a9fc400SDavid du Colombier #include <auth.h>
4*6a9fc400SDavid du Colombier 
5*6a9fc400SDavid du Colombier void
usage(void)6*6a9fc400SDavid du Colombier usage(void)
7*6a9fc400SDavid du Colombier {
8*6a9fc400SDavid du Colombier 	fprint(2, "usage: testboot cmd args...\n");
9*6a9fc400SDavid du Colombier 	exits("usage");
10*6a9fc400SDavid du Colombier }
11*6a9fc400SDavid du Colombier 
12*6a9fc400SDavid du Colombier void
main(int argc,char ** argv)13*6a9fc400SDavid du Colombier main(int argc, char **argv)
14*6a9fc400SDavid du Colombier {
15*6a9fc400SDavid du Colombier 	int p[2];
16*6a9fc400SDavid du Colombier 
17*6a9fc400SDavid du Colombier 	if(argc == 1)
18*6a9fc400SDavid du Colombier 		usage();
19*6a9fc400SDavid du Colombier 
20*6a9fc400SDavid du Colombier 	pipe(p);
21*6a9fc400SDavid du Colombier 	switch(rfork(RFPROC|RFFDG|RFNAMEG)){
22*6a9fc400SDavid du Colombier 	case -1:
23*6a9fc400SDavid du Colombier 		sysfatal("fork: %r");
24*6a9fc400SDavid du Colombier 
25*6a9fc400SDavid du Colombier 	case 0:
26*6a9fc400SDavid du Colombier 		dup(p[0], 0);
27*6a9fc400SDavid du Colombier 		dup(p[1], 1);
28*6a9fc400SDavid du Colombier 		exec(argv[1], argv+1);
29*6a9fc400SDavid du Colombier 		sysfatal("exec: %r");
30*6a9fc400SDavid du Colombier 
31*6a9fc400SDavid du Colombier 	default:
32*6a9fc400SDavid du Colombier 		if(amount(p[0], "/n/kremvax", MREPL, "") < 0)
33*6a9fc400SDavid du Colombier 			sysfatal("amount: %r");
34*6a9fc400SDavid du Colombier 		break;
35*6a9fc400SDavid du Colombier 	}
36*6a9fc400SDavid du Colombier 	exits(nil);
37*6a9fc400SDavid du Colombier }
38