diff options
author | Andreas Schwab <schwab@suse.de> | 2024-03-11 15:13:09 +0100 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2024-03-12 10:00:22 +0100 |
commit | 2173173d57971d042c0ad4b281431ae127e9b5b8 (patch) | |
tree | 5adeba44bb88ebdb80cdf9f76d7a00f126efceff /sysdeps/unix | |
parent | aeee41f1cf9bf58d3d316af36bb7f5a8699ab129 (diff) | |
download | glibc-2173173d57971d042c0ad4b281431ae127e9b5b8.zip glibc-2173173d57971d042c0ad4b281431ae127e9b5b8.tar.gz glibc-2173173d57971d042c0ad4b281431ae127e9b5b8.tar.bz2 |
linux/sigsetops: fix type confusion (bug 31468)
Each mask in the sigset array is an unsigned long, so fix __sigisemptyset
to use that instead of int. The __sigword function returns a simple array
index, so it can return int instead of unsigned long.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/internal-sigset.h | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sigsetops.h | 10 |
2 files changed, 9 insertions, 9 deletions
diff --git a/sysdeps/unix/sysv/linux/internal-sigset.h b/sysdeps/unix/sysv/linux/internal-sigset.h index 3c21c3b..5d7020b 100644 --- a/sysdeps/unix/sysv/linux/internal-sigset.h +++ b/sysdeps/unix/sysv/linux/internal-sigset.h @@ -54,7 +54,7 @@ static inline int internal_sigisemptyset (const internal_sigset_t *set) { int cnt = __NSIG_WORDS; - int ret = set->__val[--cnt]; + unsigned long int ret = set->__val[--cnt]; while (ret == 0 && --cnt >= 0) ret = set->__val[cnt]; return ret == 0; @@ -82,7 +82,7 @@ static inline int internal_sigismember (const internal_sigset_t *set, int sig) { unsigned long int mask = __sigmask (sig); - unsigned long int word = __sigword (sig); + int word = __sigword (sig); return set->__val[word] & mask ? 1 : 0; } @@ -90,7 +90,7 @@ static inline void internal_sigaddset (internal_sigset_t *set, int sig) { unsigned long int mask = __sigmask (sig); - unsigned long int word = __sigword (sig); + int word = __sigword (sig); set->__val[word] |= mask; } @@ -98,7 +98,7 @@ static inline void internal_sigdelset (internal_sigset_t *set, int sig) { unsigned long int mask = __sigmask (sig); - unsigned long int word = __sigword (sig); + int word = __sigword (sig); set->__val[word] &= ~mask; } diff --git a/sysdeps/unix/sysv/linux/sigsetops.h b/sysdeps/unix/sysv/linux/sigsetops.h index abd5576..33db4f7 100644 --- a/sysdeps/unix/sysv/linux/sigsetops.h +++ b/sysdeps/unix/sysv/linux/sigsetops.h @@ -28,7 +28,7 @@ (1UL << (((sig) - 1) % ULONG_WIDTH)) /* Return the word index for SIG. */ -static inline unsigned long int +static inline int __sigword (int sig) { return (sig - 1) / ULONG_WIDTH; @@ -66,7 +66,7 @@ static inline int __sigisemptyset (const sigset_t *set) { int cnt = __NSIG_WORDS; - int ret = set->__val[--cnt]; + unsigned long int ret = set->__val[--cnt]; while (ret == 0 && --cnt >= 0) ret = set->__val[cnt]; return ret == 0; @@ -92,7 +92,7 @@ static inline int __sigismember (const sigset_t *set, int sig) { unsigned long int mask = __sigmask (sig); - unsigned long int word = __sigword (sig); + int word = __sigword (sig); return set->__val[word] & mask ? 1 : 0; } @@ -100,7 +100,7 @@ static inline void __sigaddset (sigset_t *set, int sig) { unsigned long int mask = __sigmask (sig); - unsigned long int word = __sigword (sig); + int word = __sigword (sig); set->__val[word] |= mask; } @@ -108,7 +108,7 @@ static inline void __sigdelset (sigset_t *set, int sig) { unsigned long int mask = __sigmask (sig); - unsigned long int word = __sigword (sig); + int word = __sigword (sig); set->__val[word] &= ~mask; } |