summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-12-01 18:41:55 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-12-01 18:41:55 +0000
commit513720b73b403c3c9aca3f25c085422f4132c292 (patch)
treed79fe1353bbc081042673bafd494f8a90d94b227
parent83eb4d5219f920fde59c9edd9204664f0c2f9f36 (diff)
remove checks for "impossible" errors,
clarify uses of unoptimized sigXXX ops (they check signo), use faster sigops where approproate. text data bss dec hex filename - 68 0 0 68 44 libc/signal/sighold.o + 63 0 0 63 3f libc/signal/sighold.o - 114 0 0 114 72 libc/signal/sigintr.o + 110 0 0 110 6e libc/signal/sigintr.o - 113 0 0 113 71 libc/signal/sigpause.o + 108 0 0 108 6c libc/signal/sigpause.o - 68 0 0 68 44 libc/signal/sigrelse.o + 63 0 0 63 3f libc/signal/sigrelse.o
-rw-r--r--libc/pwd_grp/lckpwdf.c2
-rw-r--r--libc/signal/sighold.c5
-rw-r--r--libc/signal/sigintr.c7
-rw-r--r--libc/signal/sigpause.c8
-rw-r--r--libc/signal/sigrelse.c5
-rw-r--r--libc/sysdeps/linux/common/ssp.c3
6 files changed, 11 insertions, 19 deletions
diff --git a/libc/pwd_grp/lckpwdf.c b/libc/pwd_grp/lckpwdf.c
index 41987ca5d..ff98dcb76 100644
--- a/libc/pwd_grp/lckpwdf.c
+++ b/libc/pwd_grp/lckpwdf.c
@@ -123,7 +123,7 @@ lckpwdf (void)
/* Now make sure the alarm signal is not blocked. */
__sigemptyset (&new_set);
- sigaddset (&new_set, SIGALRM);
+ __sigaddset (&new_set, SIGALRM);
#if 1
sigprocmask (SIG_UNBLOCK, &new_set, &saved_set);
#else /* never fails */
diff --git a/libc/signal/sighold.c b/libc/signal/sighold.c
index f8003d60f..fde0a0c2a 100644
--- a/libc/signal/sighold.c
+++ b/libc/signal/sighold.c
@@ -30,10 +30,9 @@ int sighold (int sig)
sigset_t set;
/* Retrieve current signal set. */
- if (sigprocmask (SIG_SETMASK, NULL, &set) < 0)
- return -1;
+ sigprocmask (SIG_SETMASK, NULL, &set); /* can't fail */
- /* Add the specified signal. */
+ /* Bound-check sig, add it to the set. */
if (sigaddset (&set, sig) < 0)
return -1;
diff --git a/libc/signal/sigintr.c b/libc/signal/sigintr.c
index 351c82b75..23f87e199 100644
--- a/libc/signal/sigintr.c
+++ b/libc/signal/sigintr.c
@@ -34,7 +34,7 @@ int siginterrupt (int sig, int interrupt)
#ifdef SA_RESTART
struct sigaction action;
- if (sigaction (sig, (struct sigaction *) NULL, &action) < 0)
+ if (sigaction (sig, NULL, &action) < 0)
return -1;
if (interrupt)
@@ -48,10 +48,7 @@ int siginterrupt (int sig, int interrupt)
action.sa_flags |= SA_RESTART;
}
- if (sigaction (sig, &action, (struct sigaction *) NULL) < 0)
- return -1;
-
- return 0;
+ return sigaction (sig, &action, NULL);
#else
__set_errno (ENOSYS);
return -1;
diff --git a/libc/signal/sigpause.c b/libc/signal/sigpause.c
index 96dd93368..152f9ca32 100644
--- a/libc/signal/sigpause.c
+++ b/libc/signal/sigpause.c
@@ -40,12 +40,10 @@ int __sigpause (int sig_or_mask, int is_sig)
if (is_sig)
{
-//TODO: error check for sig_or_mask = BIGNUM?
-
/* The modern X/Open implementation is requested. */
- if (sigprocmask (0, NULL, &set) < 0
- /* Yes, we call `sigdelset' and not `__sigdelset'. */
- || sigdelset (&set, sig_or_mask) < 0)
+ sigprocmask (SIG_BLOCK, NULL, &set);
+ /* Bound-check sig_or_mask, remove it from the set. */
+ if (sigdelset (&set, sig_or_mask) < 0)
return -1;
}
else
diff --git a/libc/signal/sigrelse.c b/libc/signal/sigrelse.c
index f5ee6fedc..1a7141ac5 100644
--- a/libc/signal/sigrelse.c
+++ b/libc/signal/sigrelse.c
@@ -30,10 +30,9 @@ int sigrelse (int sig)
sigset_t set;
/* Retrieve current signal set. */
- if (sigprocmask (SIG_SETMASK, NULL, &set) < 0)
- return -1;
+ sigprocmask (SIG_SETMASK, NULL, &set); /* can't fail */
- /* Remove the specified signal. */
+ /* Bound-check sig, remove it from the set. */
if (sigdelset (&set, sig) < 0)
return -1;
diff --git a/libc/sysdeps/linux/common/ssp.c b/libc/sysdeps/linux/common/ssp.c
index fadf6077b..564e14d71 100644
--- a/libc/sysdeps/linux/common/ssp.c
+++ b/libc/sysdeps/linux/common/ssp.c
@@ -52,8 +52,7 @@ static void block_signals(void)
sigset_t mask;
__sigfillset(&mask);
-
- sigdelset(&mask, SSP_SIGTYPE); /* Block all signal handlers */
+ __sigdelset(&mask, SSP_SIGTYPE); /* Block all signal handlers */
sigprocmask(SIG_BLOCK, &mask, NULL); /* except SSP_SIGTYPE */
/* Make the default handler associated with the signal handler */