diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-11-29 16:46:07 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-11-29 16:46:07 +0000 |
commit | 7357e8836f7c742602f59cc8f2b97382634c59b8 (patch) | |
tree | 0c8c736305cb1922b70cd99d4d8e5f80114653e8 /libc/signal/sigset.c | |
parent | 35ae1599438a15568818bf09b493d7b49039d452 (diff) |
shring sugnal-relared stuff a bit. BTW why constant memset is not inlined by gcc?
text data bss dec hex filename
- 38015 18096 8636 64747 fceb lib/libpthread-0.9.30-svn.so
+ 38001 18096 8636 64733 fcdd lib/libpthread-0.9.30-svn.so
- 274842 1835 19012 295689 48309 lib/libuClibc-0.9.30-svn.so
+ 274779 1835 19012 295626 482ca lib/libuClibc-0.9.30-svn.so
Diffstat (limited to 'libc/signal/sigset.c')
-rw-r--r-- | libc/signal/sigset.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/libc/signal/sigset.c b/libc/signal/sigset.c index f4c04dc3e..3efbf3ea3 100644 --- a/libc/signal/sigset.c +++ b/libc/signal/sigset.c @@ -31,17 +31,20 @@ __sighandler_t sigset (int sig, __sighandler_t disp) struct sigaction act, oact; sigset_t set; + /* Check signal extents to protect __sigismember. */ + if (disp == SIG_ERR || sig < 1 || sig >= NSIG) + { + __set_errno (EINVAL); + return SIG_ERR; + } + #ifdef SIG_HOLD /* Handle SIG_HOLD first. */ if (disp == SIG_HOLD) { /* Create an empty signal set. */ - if (__sigemptyset (&set) < 0) - return SIG_ERR; - - /* Add the specified signal. */ - if (__sigaddset (&set, sig) < 0) - return SIG_ERR; + __sigemptyset (&set); + __sigaddset (&set, sig); /* Add the signal set to the current signal mask. */ if (sigprocmask (SIG_BLOCK, &set, NULL) < 0) @@ -51,27 +54,16 @@ __sighandler_t sigset (int sig, __sighandler_t disp) } #endif /* SIG_HOLD */ - /* Check signal extents to protect __sigismember. */ - if (disp == SIG_ERR || sig < 1 || sig >= NSIG) - { - __set_errno (EINVAL); - return SIG_ERR; - } - + memset(&act, 0, sizeof(act)); + //__sigemptyset (&act.sa_mask); + //act.sa_flags = 0; act.sa_handler = disp; - if (__sigemptyset (&act.sa_mask) < 0) - return SIG_ERR; - act.sa_flags = 0; if (sigaction (sig, &act, &oact) < 0) return SIG_ERR; - /* Create an empty signal set. */ - if (__sigemptyset (&set) < 0) - return SIG_ERR; - - /* Add the specified signal. */ - if (__sigaddset (&set, sig) < 0) - return SIG_ERR; + /* Create an empty signal set. Add the specified signal. */ + __sigemptyset (&set); + __sigaddset (&set, sig); /* Remove the signal set from the current signal mask. */ if (sigprocmask (SIG_UNBLOCK, &set, NULL) < 0) |