ref: a901b27da57ae3df5a05f29b958104a55a10282b
dir: /src/libc/arch/posix/system.c/
#include <sys.h> #include <errno.h> #include <stdlib.h> #include "../../syscall.h" #define SHELL "/bin/sh" #undef system extern char **_environ; int system(const char *cmd) { int st; pid_t pid; if (!cmd) return _access(SHELL, X_OK); switch ((pid = _fork())) { case -1: return -1; case 0: _execve(SHELL, (char*[]) {"sh", "-c", cmd, NULL}, _environ); _exit(127); default: while (_waitpid(pid, &st, 0) < 0 && errno == EINTR) ; return st; } }