change sigset_t functions to restrict to _NSIG

the idea here is to avoid advertising signals that don't exist and to
make these functions safe to call (e.g. from within other parts of the
implementation) on fake sigset_t objects which do not have the HURD
padding.
This commit is contained in:
Rich Felker 2013-08-09 21:25:29 -04:00
parent 3c5c5e6f92
commit 76fbf6ad4b
4 changed files with 5 additions and 5 deletions

View File

@ -4,7 +4,7 @@
int sigaddset(sigset_t *set, int sig)
{
unsigned s = sig-1;
if (s >= 8*sizeof(sigset_t) || sig-32U<3) {
if (s >= _NSIG-1 || sig-32U < 3) {
errno = EINVAL;
return -1;
}

View File

@ -4,7 +4,7 @@
int sigdelset(sigset_t *set, int sig)
{
unsigned s = sig-1;
if (s >= 8*sizeof(sigset_t) || sig-32U<3) {
if (s >= _NSIG-1 || sig-32U < 3) {
errno = EINVAL;
return -1;
}

View File

@ -4,6 +4,6 @@
int sigisemptyset(const sigset_t *set)
{
static const sigset_t zeroset;
return !memcmp(set, &zeroset, 8);
static const unsigned long zeroset[_NSIG/8/sizeof(long)];
return !memcmp(set, &zeroset, _NSIG/8);
}

View File

@ -4,6 +4,6 @@
int sigismember(const sigset_t *set, int sig)
{
unsigned s = sig-1;
if (s >= 8*sizeof(sigset_t)) return 0;
if (s >= _NSIG-1) return 0;
return !!(set->__bits[s/8/sizeof *set->__bits] & 1UL<<(s&8*sizeof *set->__bits-1));
}