about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/sigset.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/sigset.h')
-rw-r--r--sysdeps/unix/sysv/linux/sigset.h37
1 files changed, 20 insertions, 17 deletions
diff --git a/sysdeps/unix/sysv/linux/sigset.h b/sysdeps/unix/sysv/linux/sigset.h
index 69648b7e9c..752d13adff 100644
--- a/sysdeps/unix/sysv/linux/sigset.h
+++ b/sysdeps/unix/sysv/linux/sigset.h
@@ -22,13 +22,13 @@
 
 typedef int __sig_atomic_t;
 
-/* A `sigset_t' has a bit for each signal.  Having 32 * 4 * 8 bits gives
-   us up to 1024 signals.  */
-#define _SIGSET_NWORDS	32
+/* A `sigset_t' has a bit for each signal.  */
+
+#define _SIGSET_NWORDS	(1024 / (8 * sizeof (unsigned long int)))
 typedef struct
-{
-  unsigned int __val[_SIGSET_NWORDS];
-} __sigset_t;
+  {
+    unsigned long int __val[_SIGSET_NWORDS];
+  } __sigset_t;
 
 #endif
 
@@ -47,20 +47,23 @@ typedef struct
 #endif
 
 /* Return a mask that includes the bit for SIG only.  */
-#define	__sigmask(sig)	(((unsigned int) 1) << (((sig) - 1) \
-						% (8 * sizeof (unsigned int))))
+#define __sigmask(sig) \
+  (((unsigned long) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
+
 /* Return the word index for SIG.  */
-#define __sigword(sig)	(((sig) - 1) / (8 * sizeof (unsigned int)))
+#define __sigword(sig)	(((sig) - 1) / (8 * sizeof (unsigned long int)))
 
 #if defined __GNUC__ && __GNUC__ >= 2
 #define __sigemptyset(set) \
-  (__extension__ ({ unsigned int __cnt;					      \
-		    for (__cnt = 0; __cnt < _SIGSET_NWORDS; ++__cnt)	      \
-		      (set)->__val[__cnt] = 0; 0; }))
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;				      \
+		    sigset_t *__set = (set);				      \
+		    while (--__cnt >= 0) __set->__val[__cnt] = 0;	      \
+		    0; }))
 #define __sigfillset(set) \
-  (__extension__ ({ unsigned int __cnt;					      \
-		    for (__cnt = 0; __cnt < _SIGSET_NWORDS; ++__cnt)	      \
-		      (set)->__val[__cnt] = ~0; 0; }))
+  (__extension__ ({ int __cnt = _SIGSET_NWORDS;				      \
+		    sigset_t *__set = (set);				      \
+		    while (--__cnt >= 0) __set->__val[__cnt] = ~0UL;	      \
+		    0; }))
 #endif
 
 /* These functions needn't check for a bogus signal number -- error
@@ -74,8 +77,8 @@ extern int __sigdelset (__sigset_t *, int);
   _EXTERN_INLINE int							      \
   NAME (CONST __sigset_t *__set, int __sig)				      \
   {									      \
-    unsigned int __mask = __sigmask (__sig);				      \
-    unsigned int __word = __sigword (__sig);				      \
+    unsigned long int __mask = __sigmask (__sig);			      \
+    unsigned long int __word = __sigword (__sig);			      \
     return BODY;							      \
   }