Jelajahi Sumber

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.
Rich Felker 11 tahun lalu
induk
melakukan
76fbf6ad4b
4 mengubah file dengan 5 tambahan dan 5 penghapusan
  1. 1 1
      src/signal/sigaddset.c
  2. 1 1
      src/signal/sigdelset.c
  3. 2 2
      src/signal/sigisemptyset.c
  4. 1 1
      src/signal/sigismember.c

+ 1 - 1
src/signal/sigaddset.c

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

+ 1 - 1
src/signal/sigdelset.c

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

+ 2 - 2
src/signal/sigisemptyset.c

@@ -4,6 +4,6 @@
 
 
 int sigisemptyset(const sigset_t *set)
 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);
 }
 }

+ 1 - 1
src/signal/sigismember.c

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