sigset.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021: #ifndef _SIGSET_H_types
022: # define _SIGSET_H_types 1
023:
024: typedef int __sig_atomic_t;
025:
026:
027:
028: # define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
029: typedef struct
030: {
031: unsigned long int __val[_SIGSET_NWORDS];
032: } __sigset_t;
033:
034: #endif
035:
036:
037:
038:
039:
040:
041:
042:
043: #if !defined _SIGSET_H_fns && defined _SIGNAL_H
044: # define _SIGSET_H_fns 1
045:
046: # ifndef _EXTERN_INLINE
047: # define _EXTERN_INLINE __extern_inline
048: # endif
049:
050:
051: # define __sigmask(sig) \
052: (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
053:
054:
055: # define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int)))
056:
057: # if defined __GNUC__ && __GNUC__ >= 2
058: # define __sigemptyset(set) \
059: (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
060: sigset_t *__set = (set); \
061: while (--__cnt >= 0) __set->__val[__cnt] = 0; \
062: 0; }))
063: # define __sigfillset(set) \
064: (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
065: sigset_t *__set = (set); \
066: while (--__cnt >= 0) __set->__val[__cnt] = ~0UL; \
067: 0; }))
068:
069: # ifdef __USE_GNU
070:
071:
072:
073: # define __sigisemptyset(set) \
074: (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
075: const sigset_t *__set = (set); \
076: int __ret = __set->__val[--__cnt]; \
077: while (!__ret && --__cnt >= 0) \
078: __ret = __set->__val[__cnt]; \
079: __ret == 0; }))
080: # define __sigandset(dest, left, right) \
081: (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
082: sigset_t *__dest = (dest); \
083: const sigset_t *__left = (left); \
084: const sigset_t *__right = (right); \
085: while (--__cnt >= 0) \
086: __dest->__val[__cnt] = (__left->__val[__cnt] \
087: & __right->__val[__cnt]); \
088: 0; }))
089: # define __sigorset(dest, left, right) \
090: (__extension__ ({ int __cnt = _SIGSET_NWORDS; \
091: sigset_t *__dest = (dest); \
092: const sigset_t *__left = (left); \
093: const sigset_t *__right = (right); \
094: while (--__cnt >= 0) \
095: __dest->__val[__cnt] = (__left->__val[__cnt] \
096: | __right->__val[__cnt]); \
097: 0; }))
098: # endif
099: # endif
100:
101:
102:
103:
104: extern int __sigismember (__const __sigset_t *, int);
105: extern int __sigaddset (__sigset_t *, int);
106: extern int __sigdelset (__sigset_t *, int);
107:
108: # ifdef __USE_EXTERN_INLINES
109: # define __SIGSETFN(NAME, BODY, CONST) \
110: _EXTERN_INLINE int \
111: NAME (CONST __sigset_t *__set, int __sig) \
112: { \
113: unsigned long int __mask = __sigmask (__sig); \
114: unsigned long int __word = __sigword (__sig); \
115: return BODY; \
116: }
117:
118: __SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, __const)
119: __SIGSETFN (__sigaddset, ((__set->__val[__word] |= __mask), 0), )
120: __SIGSETFN (__sigdelset, ((__set->__val[__word] &= ~__mask), 0), )
121:
122: # undef __SIGSETFN
123: # endif
124:
125:
126: #endif
127:
© Andrew Scott 2006 -
2025,
All Rights Reserved