system.c - scc - simple c99 compiler
HTML git clone git://git.simple-cc.org/scc
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
system.c (451B)
---
1 #include <sys.h>
2
3 #include <errno.h>
4 #include <stdlib.h>
5
6 #include "../../syscall.h"
7
8 #define SHELL "/bin/sh"
9
10 #undef system
11
12 int
13 system(const char *cmd)
14 {
15 int st;
16 pid_t pid;
17
18 if (!cmd)
19 return _access(SHELL, X_OK);
20
21 switch ((pid = _fork())) {
22 case -1:
23 return -1;
24 case 0:
25 _execve(SHELL, (const char*[]) {"sh", "-c", cmd, NULL}, _environ);
26 _exit(127);
27 default:
28 while (_waitpid(pid, &st, 0) < 0 && errno == EINTR)
29 ;
30 return st;
31 }
32 }