* added compilers lcc and bcc (linux86)
[mascara-docs.git] / compilers / linux86-0.16.17 / libc / misc / system.c
blobf48f68d5102cc4a8a9ba0d099bbd1e54cf4e421b
2 #include <stddef.h>
3 #include <signal.h>
5 int
6 system(command)
7 char * command;
9 int wait_val, wait_ret, pid;
10 __sighandler_t save_quit;
11 __sighandler_t save_int;
13 if( command == 0 ) return 1;
15 save_quit = signal(SIGQUIT, SIG_IGN);
16 save_int = signal(SIGINT, SIG_IGN);
18 if( (pid=vfork()) < 0 )
20 signal(SIGQUIT, save_quit);
21 signal(SIGINT, save_int);
22 return -1;
24 if( pid == 0 )
26 signal(SIGQUIT, SIG_DFL);
27 signal(SIGINT, SIG_DFL);
29 execl("/bin/sh", "sh", "-c", command, (char*)0);
30 _exit(127);
32 /* Signals are not absolutly guarenteed with vfork */
33 signal(SIGQUIT, SIG_IGN);
34 signal(SIGINT, SIG_IGN);
38 if( (wait_ret = wait(&wait_val)) == -1 )
40 wait_val = -1;
41 break;
44 while( wait_ret != pid );
46 signal(SIGQUIT, save_quit);
47 signal(SIGINT, save_int);
48 return wait_val;