aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2024-03-11 15:13:09 +0100
committerAndreas Schwab <schwab@suse.de>2024-03-12 10:00:22 +0100
commit2173173d57971d042c0ad4b281431ae127e9b5b8 (patch)
tree5adeba44bb88ebdb80cdf9f76d7a00f126efceff /sysdeps/unix
parentaeee41f1cf9bf58d3d316af36bb7f5a8699ab129 (diff)
downloadglibc-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.h8
-rw-r--r--sysdeps/unix/sysv/linux/sigsetops.h10
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;
}