|
|
1.1 ! root 1: #ifndef __COMMON__SIGNAL_H__ ! 2: #define __COMMON__SIGNAL_H__ ! 3: ! 4: #include <common/ccompat.h> ! 5: #include <common/_limits.h> ! 6: #include <common/_tricks.h> ! 7: ! 8: /* ! 9: * This header file contains a number of definitions for signal-related data ! 10: * types which are variously used by kernel and user-level mechanisms to ! 11: * support the variety of existing binary interfacs. ! 12: */ ! 13: ! 14: /* ! 15: * The following constant gives the number of signals for which kernel storage ! 16: * is actually made available; this number is traditionally made available to ! 17: * user code though the NSIG constant, although neither Standard C nor POSIX.1 ! 18: * applications can use this. ! 19: */ ! 20: ! 21: #define _SIGNAL_MAX 31 ! 22: ! 23: ! 24: /* ! 25: * Be aware that while ISO C and POSIX.1 specify the signature of a signal- ! 26: * catching function as "void (*) (int sig)", extra parameters to the signal ! 27: * functions are supported. ! 28: */ ! 29: ! 30: typedef void (* __sigfunc_t) __PROTO ((__ANY_ARGS__)); ! 31: ! 32: ! 33: /* ! 34: * For dealing with signal actions. For maximum efficiency, we deal with ! 35: * signals as collections of bit-vectors; various user-level binary ! 36: * compatibility standards specify the lengths of the vectors, while the ! 37: * kernel internally allocates exactly as much as is really needed. ! 38: */ ! 39: ! 40: typedef unsigned long __sigmask_t; ! 41: ! 42: typedef struct { ! 43: __sigmask_t _sigbits [4]; ! 44: } n_sigset_t; ! 45: ! 46: typedef struct { ! 47: __sigmask_t _sigbits [1]; ! 48: } o_sigset_t; ! 49: ! 50: typedef struct { ! 51: __sigmask_t _sigbits [__DIVIDE_ROUNDUP_CONST (_SIGNAL_MAX, ! 52: __CHAR_BIT * sizeof (__sigmask_t))]; ! 53: } __sigset_t; ! 54: ! 55: /* ! 56: * Signal-action flags that are relevant for all signals. ! 57: */ ! 58: ! 59: enum { ! 60: __SA_ONSTACK = 1, ! 61: __SA_RESETHAND = 2, ! 62: __SA_RESTART = 4, ! 63: __SA_SIGINFO = 8, ! 64: __SA_NODEFER = 16 ! 65: }; ! 66: typedef unsigned short __sigactfl_t; ! 67: ! 68: ! 69: /* ! 70: * Signal-action flags that are only relevant for particular signals. ! 71: */ ! 72: ! 73: enum { ! 74: __SF_NOCLDWAIT = 1, ! 75: __SF_NOCLDSTOP = 2 ! 76: }; ! 77: ! 78: typedef unsigned short __sigmiscfl_t; ! 79: ! 80: ! 81: /* ! 82: * Some simple macros for dealing with the bit-set operations on sigset_t's. ! 83: */ ! 84: ! 85: #define __SIGSET_UNIT(ss,n) \ ! 86: (sizeof ((ss)._sigbits) == sizeof (__sigmask_t) ? 0 : \ ! 87: (unsigned) ((n) - 1) / (sizeof (__sigmask_t) * __CHAR_BIT)) ! 88: ! 89: #define __SIGSET_EMPTY(ss) memset ((ss)._sigbits, 0, sizeof (ss)) ! 90: #define __SIGSET_FILL(ss) memset ((ss)._sigbits, 0xFF, sizeof (ss)); ! 91: ! 92: #define __SIGSET_MASK(n) (1UL << ((unsigned) ((n) - 1) & \ ! 93: (sizeof (__sigmask_t) * __CHAR_BIT - 1))) ! 94: ! 95: #define __SIGSET_ADDBIT(ss,n) \ ! 96: ((ss)._sigbits [__SIGSET_UNIT (ss, n)] |= __SIGSET_MASK (n)) ! 97: #define __SIGSET_CLRBIT(ss,n) \ ! 98: ((ss)._sigbits [__SIGSET_UNIT (ss, n)] &= ~ __SIGSET_MASK (n)) ! 99: #define __SIGSET_TSTBIT(ss,n) \ ! 100: (((ss)._sigbits [__SIGSET_UNIT (ss, n)] & \ ! 101: __SIGSET_MASK (n)) != 0) ! 102: #define __SIGSET_ADDMASK(ss,n,m) \ ! 103: ((ss)._sigbits [__SIGSET_UNIT (ss, n)] |= (m)) ! 104: #define __SIGSET_CLRMASK(ss,n,m) \ ! 105: ((ss)._sigbits [__SIGSET_UNIT (ss, n)] &= ~ (m)) ! 106: #define __SIGSET_TSTMASK(ss,n,m) \ ! 107: (((ss)._sigbits [__SIGSET_UNIT (ss, n)] & (m)) != 0) ! 108: #define __SIGSET_FIRSTBIT(mask) (__LEAST_BIT_ULONG (mask) + 1) ! 109: ! 110: ! 111: #endif /* ! defined (__COMMON__SIGNAL_H__) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.