diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-04-04 15:34:33 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-04-04 15:34:33 +0000 |
commit | b0b60fc2f1e1c9a778ce9142771945a9d9f0c705 (patch) | |
tree | 6883765c03e049ff4c708515b26bdf01b167f78a /sysdeps/unix | |
parent | 6a11e51e2c560d592d60298b24c48e82f8cb9653 (diff) |
Add sigisempty, sigorset, and sigandset
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/sigset.h | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/sigset.h b/sysdeps/unix/sysv/linux/sigset.h index 752d13adff..741ff9ac9d 100644 --- a/sysdeps/unix/sysv/linux/sigset.h +++ b/sysdeps/unix/sysv/linux/sigset.h @@ -54,16 +54,47 @@ typedef struct #define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int))) #if defined __GNUC__ && __GNUC__ >= 2 -#define __sigemptyset(set) \ +# define __sigemptyset(set) \ (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ sigset_t *__set = (set); \ while (--__cnt >= 0) __set->__val[__cnt] = 0; \ 0; })) -#define __sigfillset(set) \ +# define __sigfillset(set) \ (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ sigset_t *__set = (set); \ while (--__cnt >= 0) __set->__val[__cnt] = ~0UL; \ 0; })) + +# ifdef _GNU_SOURCE +/* The POSIX does not specify for handling the whole signal set in one + command. This is often wanted and so we define three more functions + here. */ +# define __sigisemptyset(set) \ + (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ + const sigset_t *__set = (set); \ + int __ret = __set->__val[--__cnt]; \ + while (!__ret && --__cnt >= 0) \ + __ret = __set->__val[__cnt]; \ + __ret == 0; })) +# define __sigandset(dest, left, right) \ + (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ + sigset_t *__dest = (dest); \ + const sigset_t *__left = (left); \ + const sigset_t *__right = (right); \ + while (--__cnt >= 0) \ + __dest->__val[__cnt] = (__left->__val[__cnt] \ + & __right->__val[__cnt]); \ + 0; })) +# define __sigorset(dest, left, right) \ + (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ + sigset_t *__dest = (dest); \ + const sigset_t *__left = (left); \ + const sigset_t *__right = (right); \ + while (--__cnt >= 0) \ + __dest->__val[__cnt] = (__left->__val[__cnt] \ + | __right->__val[__cnt]); \ + 0; })) +# endif #endif /* These functions needn't check for a bogus signal number -- error |