12345678910111213141516171819202122232425262728293031323334353637383940 |
- #include "lib.h"
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/wait.h>
- #include <unistd.h>
- int
- system(const char *s)
- {
- int w, status;
- pid_t pid;
- char cmd[30], *oty;
- oty = getenv("objtype");
- if(!oty)
- return -1;
- if(!s)
- return 1; /* a command interpreter is available */
- pid = fork();
- sprintf(cmd, "/%s/bin/ape/sh", oty);
- if(pid == 0) {
- execl(cmd, "sh", "-c", s, 0);
- _exit(1);
- }
- if(pid < 0){
- _syserrno();
- return -1;
- }
- for(;;) {
- w = wait(&status);
- if(w == -1 || w == pid)
- break;
- }
- if(w == -1){
- _syserrno();
- return w;
- }
- return status;
- }
|