diff options
author | jilles <jilles@FreeBSD.org> | 2009-11-11 23:13:24 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2009-11-11 23:13:24 +0000 |
commit | 5d65dda8ecee783683c731c300a3e781aaa929d2 (patch) | |
tree | d27a4bb027727271c422fa647c8cf5a2ff0b2acd /bin | |
parent | 13a19ef806aacb68fca8a06969fe760e790cf191 (diff) | |
download | FreeBSD-src-5d65dda8ecee783683c731c300a3e781aaa929d2.zip FreeBSD-src-5d65dda8ecee783683c731c300a3e781aaa929d2.tar.gz |
sh: Use sigaction instead of signal/siginterrupt combination.
Diffstat (limited to 'bin')
-rw-r--r-- | bin/sh/trap.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/bin/sh/trap.c b/bin/sh/trap.c index a0cd0ba..48aa264 100644 --- a/bin/sh/trap.c +++ b/bin/sh/trap.c @@ -244,7 +244,8 @@ void setsignal(int signo) { int action; - sig_t sig, sigact = SIG_DFL; + sig_t sigact = SIG_DFL; + struct sigaction sa; char *t; if ((t = trap[signo]) == NULL) @@ -320,9 +321,10 @@ setsignal(int signo) case S_IGN: sigact = SIG_IGN; break; } *t = action; - sig = signal(signo, sigact); - if (sig != SIG_ERR && action == S_CATCH) - siginterrupt(signo, 1); + sa.sa_handler = sigact; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(signo, &sa, NULL); } |