xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/system.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1 #include "lib.h"
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <sys/wait.h>
5 #include <unistd.h>
6 
7 int
8 system(const char *s)
9 {
10 	int w, status;
11 	pid_t pid;
12 	char cmd[30], *oty;
13 
14 	oty = getenv("objtype");
15 	if(!oty)
16 		return -1;
17 	if(!s)
18 		return 1; /* a command interpreter is available */
19 	pid = fork();
20 	sprintf(cmd, "/%s/bin/ape/sh", oty);
21 	if(pid == 0) {
22 		execl(cmd, "sh", "-c", s, 0);
23 		_exit(1);
24 	}
25 	if(pid < 0){
26 		_syserrno();
27 		return -1;
28 	}
29 	for(;;) {
30 		w = wait(&status);
31 		if(w == -1 || w == pid)
32 			break;
33 	}
34 
35 	if(w == -1){
36 		_syserrno();
37 		return w;
38 	}
39 	return status;
40 }
41