X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/0b2e8a2408ef323bbdb097707fce79ee74c1b5c7..db505a5ab635ea698dca37a5e199a80399ec2b50:/usr/src/lib/libc/stdlib/system.c diff --git a/usr/src/lib/libc/stdlib/system.c b/usr/src/lib/libc/stdlib/system.c index d42d8069a3..d3c4853bc8 100644 --- a/usr/src/lib/libc/stdlib/system.c +++ b/usr/src/lib/libc/stdlib/system.c @@ -16,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)system.c 5.4 (Berkeley) %G%"; +static char sccsid[] = "@(#)system.c 5.5 (Berkeley) %G%"; #endif /* LIBC_SCCS and not lint */ #include @@ -29,19 +29,25 @@ system(command) { union wait pstat; pid_t pid, waitpid(); - int omask; + int omask, (*i)(), (*q)(); + omask = sigblock(sigmask(SIGCHLD)); switch(pid = vfork()) { case -1: /* error */ + (void)sigsetmask(omask); pstat.w_status = 0; pstat.w_retcode = 127; return(pstat.w_status); case 0: /* child */ + (void)sigsetmask(omask); execl("/bin/sh", "sh", "-c", command, (char *)NULL); _exit(127); } - omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGHUP)); + i = signal(SIGINT, SIG_IGN); + q = signal(SIGQUIT, SIG_IGN); pid = waitpid(pid, &pstat, 0); (void)sigsetmask(omask); + (void)signal(SIGINT, i); + (void)signal(SIGQUIT, q); return(pid == -1 ? -1 : pstat.w_status); }