diff options
Diffstat (limited to 'sysdeps/posix')
-rw-r--r-- | sysdeps/posix/profil.c | 1 | ||||
-rw-r--r-- | sysdeps/posix/sigignore.c | 5 | ||||
-rw-r--r-- | sysdeps/posix/sigintr.c | 1 | ||||
-rw-r--r-- | sysdeps/posix/signal.c | 7 | ||||
-rw-r--r-- | sysdeps/posix/sigset.c | 63 | ||||
-rw-r--r-- | sysdeps/posix/sprofil.c | 1 | ||||
-rw-r--r-- | sysdeps/posix/sysv_signal.c | 5 |
7 files changed, 34 insertions, 49 deletions
diff --git a/sysdeps/posix/profil.c b/sysdeps/posix/profil.c index f5b8ee19fc..4d3fbe0b8a 100644 --- a/sysdeps/posix/profil.c +++ b/sysdeps/posix/profil.c @@ -22,6 +22,7 @@ #include <signal.h> #include <sys/time.h> #include <libc-internal.h> +#include <sigsetops.h> #ifndef SIGPROF diff --git a/sysdeps/posix/sigignore.c b/sysdeps/posix/sigignore.c index e7975739e8..601ae9685a 100644 --- a/sysdeps/posix/sigignore.c +++ b/sysdeps/posix/sigignore.c @@ -22,7 +22,7 @@ #include <stddef.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> int sigignore (int sig) @@ -30,8 +30,7 @@ sigignore (int sig) struct sigaction act; act.sa_handler = SIG_IGN; - if (__sigemptyset (&act.sa_mask) < 0) - return -1; + __sigemptyset (&act.sa_mask); act.sa_flags = 0; return __sigaction (sig, &act, NULL); diff --git a/sysdeps/posix/sigintr.c b/sysdeps/posix/sigintr.c index d02469a8dd..a6202de6a9 100644 --- a/sysdeps/posix/sigintr.c +++ b/sysdeps/posix/sigintr.c @@ -18,6 +18,7 @@ #include <stddef.h> #include <signal.h> #include <errno.h> +#include <sigsetops.h> /* If INTERRUPT is nonzero, make signal SIG interrupt system calls (causing them to fail with EINTR); if INTERRUPT is zero, make system diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c index 32db07b519..81ba17745d 100644 --- a/sysdeps/posix/signal.c +++ b/sysdeps/posix/signal.c @@ -19,7 +19,7 @@ #include <errno.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */ @@ -38,9 +38,8 @@ __bsd_signal (int sig, __sighandler_t handler) } act.sa_handler = handler; - if (__sigemptyset (&act.sa_mask) < 0 - || __sigaddset (&act.sa_mask, sig) < 0) - return SIG_ERR; + __sigemptyset (&act.sa_mask); + __sigaddset (&act.sa_mask, sig); act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART; if (__sigaction (sig, &act, &oact) < 0) return SIG_ERR; diff --git a/sysdeps/posix/sigset.c b/sysdeps/posix/sigset.c index 0c2aa76ad4..a4dfe0ae93 100644 --- a/sysdeps/posix/sigset.c +++ b/sysdeps/posix/sigset.c @@ -8,7 +8,7 @@ The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public @@ -20,7 +20,7 @@ #include <stddef.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> /* Set the disposition for SIG. */ __sighandler_t @@ -31,19 +31,19 @@ sigset (int sig, __sighandler_t disp) sigset_t set; sigset_t oset; -#ifdef SIG_HOLD - /* Handle SIG_HOLD first. */ - if (disp == SIG_HOLD) + /* Check signal extents to protect __sigismember. */ + if (disp == SIG_ERR || sig < 1 || sig >= NSIG) { - /* Create an empty signal set. */ - if (__sigemptyset (&set) < 0) - return SIG_ERR; + __set_errno (EINVAL); + 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 (disp == SIG_HOLD) + { + /* Add the signal to the current signal mask. */ if (__sigprocmask (SIG_BLOCK, &set, &oset) < 0) return SIG_ERR; @@ -57,34 +57,19 @@ sigset (int sig, __sighandler_t disp) return oact.sa_handler; } -#endif /* SIG_HOLD */ - - /* Check signal extents to protect __sigismember. */ - if (disp == SIG_ERR || sig < 1 || sig >= NSIG) + else { - __set_errno (EINVAL); - return SIG_ERR; - } - - 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; + act.sa_handler = disp; + __sigemptyset (&act.sa_mask); + act.sa_flags = 0; + if (__sigaction (sig, &act, &oact) < 0) + return SIG_ERR; - /* Remove the signal set from the current signal mask. */ - if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0) - return SIG_ERR; + /* Remove the signal from the current signal mask. */ + if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0) + return SIG_ERR; - /* If the signal was already blocked return SIG_HOLD. */ - return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler; + /* If the signal was already blocked return SIG_HOLD. */ + return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler; + } } diff --git a/sysdeps/posix/sprofil.c b/sysdeps/posix/sprofil.c index f72245cb52..f704b9e8f4 100644 --- a/sysdeps/posix/sprofil.c +++ b/sysdeps/posix/sprofil.c @@ -21,6 +21,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <sigsetops.h> #include <sys/time.h> #include <sys/profil.h> diff --git a/sysdeps/posix/sysv_signal.c b/sysdeps/posix/sysv_signal.c index 6d80803fd5..6893ec23e4 100644 --- a/sysdeps/posix/sysv_signal.c +++ b/sysdeps/posix/sysv_signal.c @@ -18,7 +18,7 @@ #include <errno.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> /* Tolerate non-threads versions of Posix */ #ifndef SA_ONESHOT @@ -46,8 +46,7 @@ __sysv_signal (int sig, __sighandler_t handler) } act.sa_handler = handler; - if (__sigemptyset (&act.sa_mask) < 0) - return SIG_ERR; + __sigemptyset (&act.sa_mask); act.sa_flags = SA_ONESHOT | SA_NOMASK | SA_INTERRUPT; act.sa_flags &= ~SA_RESTART; if (__sigaction (sig, &act, &oact) < 0) |