1 #include "stdinc.h" 2 3 #include "9.h" 4 5 int Dflag; 6 char* none = "none"; 7 int stdfd[2]; 8 9 static char* myname = "numpty"; 10 11 static void 12 usage(void) 13 { 14 argv0 = myname; 15 sysfatal("usage: %s" 16 " [-Dt]" 17 " [-c cmd]", 18 myname); 19 } 20 21 void 22 main(int argc, char* argv[]) 23 { 24 char **cmd, *p; 25 int i, ncmd, tflag; 26 27 myname = argv[0]; 28 fmtinstall('D', dirfmt); 29 fmtinstall('F', fcallfmt); 30 fmtinstall('M', dirmodefmt); 31 quotefmtinstall(); 32 33 /* 34 * Insulate from the invoker's environment. 35 */ 36 if(rfork(RFREND|RFNOTEG|RFNAMEG) < 0) 37 sysfatal("rfork: %r"); 38 39 close(0); 40 open("/dev/null", OREAD); 41 close(1); 42 open("/dev/null", OWRITE); 43 44 cmd = nil; 45 ncmd = tflag = 0; 46 47 vtAttach(); 48 49 ARGBEGIN{ 50 case '?': 51 default: 52 usage(); 53 break; 54 case 'D': 55 Dflag ^= 1; 56 break; 57 case 'c': 58 p = ARGF(); 59 if(p == nil) 60 usage(); 61 cmd = vtMemRealloc(cmd, (ncmd+1)*sizeof(char*)); 62 cmd[ncmd++] = p; 63 break; 64 case 't': 65 tflag = 1; 66 break; 67 }ARGEND 68 if(argc != 0) 69 usage(); 70 71 consInit(); 72 cliInit(); 73 msgInit(); 74 conInit(); 75 cmdInit(); 76 fsysInit(); 77 exclInit(); 78 fidInit(); 79 80 srvInit(); 81 lstnInit(); 82 usersInit(); 83 84 for(i = 0; i < ncmd; i++){ 85 if(cliExec(cmd[i]) == 0) 86 break; 87 } 88 vtMemFree(cmd); 89 90 if(tflag && consTTY() == 0) 91 consPrint("%s\n", vtGetError()); 92 93 vtDetach(); 94 exits(0); 95 } 96