| Index: fusl/src/signal/block.c
|
| diff --git a/fusl/src/signal/block.c b/fusl/src/signal/block.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d7f6100134572aeaa42131dc001ff287ffc9fbbd
|
| --- /dev/null
|
| +++ b/fusl/src/signal/block.c
|
| @@ -0,0 +1,44 @@
|
| +#include "pthread_impl.h"
|
| +#include "syscall.h"
|
| +#include <signal.h>
|
| +
|
| +static const unsigned long all_mask[] = {
|
| +#if ULONG_MAX == 0xffffffff && _NSIG == 129
|
| + -1UL, -1UL, -1UL, -1UL
|
| +#elif ULONG_MAX == 0xffffffff
|
| + -1UL, -1UL
|
| +#else
|
| + -1UL
|
| +#endif
|
| +};
|
| +
|
| +static const unsigned long app_mask[] = {
|
| +#if ULONG_MAX == 0xffffffff
|
| +#if _NSIG == 65
|
| + 0x7fffffff, 0xfffffffc
|
| +#else
|
| + 0x7fffffff, 0xfffffffc, -1UL, -1UL
|
| +#endif
|
| +#else
|
| +#if _NSIG == 65
|
| + 0xfffffffc7fffffff
|
| +#else
|
| + 0xfffffffc7fffffff, -1UL
|
| +#endif
|
| +#endif
|
| +};
|
| +
|
| +void __block_all_sigs(void *set)
|
| +{
|
| + __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &all_mask, set, _NSIG/8);
|
| +}
|
| +
|
| +void __block_app_sigs(void *set)
|
| +{
|
| + __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &app_mask, set, _NSIG/8);
|
| +}
|
| +
|
| +void __restore_sigs(void *set)
|
| +{
|
| + __syscall(SYS_rt_sigprocmask, SIG_SETMASK, set, 0, _NSIG/8);
|
| +}
|
|
|