change sigset_t functions to restrict to _NSIG
authorRich Felker <dalias@aerifal.cx>
Sat, 10 Aug 2013 01:25:29 +0000 (21:25 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 10 Aug 2013 01:25:29 +0000 (21:25 -0400)
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.

src/signal/sigaddset.c
src/signal/sigdelset.c
src/signal/sigisemptyset.c
src/signal/sigismember.c

index edb48d1c344c4b585bb885743208ea3fbaae8a3d..085d1f4ab98d2d726ad401bebd89881e11c633af 100644 (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;
        }
index a77c638f919d4dbb9644e8fc0e7b09aea41e66b7..ce69280e0cbf36f391b2a818114679143314a900 100644 (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;
        }
index e24105144497645235162d7a60b0d33d2ac5b546..312c66cf84f14362cb29bec7dd3111624993df92 100644 (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);
 }
index 1a22108b549538d9f3ccdc7a4730c5d51d23bf1a..dd1a8dbed435c290da29b8269040f7a51627fbab 100644 (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));
 }