13e12c5d1SDavid du Colombier #include "lib.h" 23e12c5d1SDavid du Colombier #include <stdlib.h> 3219b2ee8SDavid du Colombier #include <stdio.h> 43e12c5d1SDavid du Colombier #include <sys/wait.h> 53e12c5d1SDavid du Colombier #include <unistd.h> 63e12c5d1SDavid du Colombier 73e12c5d1SDavid du Colombier int system(const char * s)83e12c5d1SDavid du Colombiersystem(const char *s) 93e12c5d1SDavid du Colombier { 103e12c5d1SDavid du Colombier int w, status; 113e12c5d1SDavid du Colombier pid_t pid; 12219b2ee8SDavid du Colombier char cmd[30], *oty; 133e12c5d1SDavid du Colombier 14*7c6618bfSDavid du Colombier oty = getenv("cputype"); 15219b2ee8SDavid du Colombier if(!oty) 16219b2ee8SDavid du Colombier return -1; 173e12c5d1SDavid du Colombier if(!s) 183e12c5d1SDavid du Colombier return 1; /* a command interpreter is available */ 193e12c5d1SDavid du Colombier pid = fork(); 204d44ba9bSDavid du Colombier snprintf(cmd, sizeof cmd, "/%s/bin/ape/sh", oty); 213e12c5d1SDavid du Colombier if(pid == 0) { 22f19e7b74SDavid du Colombier execl(cmd, "sh", "-c", s, NULL); 233e12c5d1SDavid du Colombier _exit(1); 243e12c5d1SDavid du Colombier } 253e12c5d1SDavid du Colombier if(pid < 0){ 263e12c5d1SDavid du Colombier _syserrno(); 273e12c5d1SDavid du Colombier return -1; 283e12c5d1SDavid du Colombier } 293e12c5d1SDavid du Colombier for(;;) { 303e12c5d1SDavid du Colombier w = wait(&status); 313e12c5d1SDavid du Colombier if(w == -1 || w == pid) 323e12c5d1SDavid du Colombier break; 333e12c5d1SDavid du Colombier } 343e12c5d1SDavid du Colombier 353e12c5d1SDavid du Colombier if(w == -1){ 363e12c5d1SDavid du Colombier _syserrno(); 373e12c5d1SDavid du Colombier return w; 383e12c5d1SDavid du Colombier } 393e12c5d1SDavid du Colombier return status; 403e12c5d1SDavid du Colombier } 41