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 Colombierusage(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 Colombiermain(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