Home
       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 }