| 1 | #include <signal.h> |
| 2 | #include <errno.h> |
| 3 | #include "syscall.h" |
| 4 | |
| 5 | int pthread_sigmask(int how, const sigset_t *restrict set, sigset_t *restrict old) |
| 6 | { |
| 7 | 	int ret; |
| 8 | 	if (set && (unsigned)how - SIG_BLOCK > 2U) return EINVAL; |
| 9 | 	ret = -__syscall(SYS_rt_sigprocmask, how, set, old, _NSIG/8); |
| 10 | 	if (!ret && old) { |
| 11 | 		if (sizeof old->__bits[0] == 8) { |
| 12 | 			old->__bits[0] &= ~0x380000000ULL; |
| 13 | 		} else { |
| 14 | 			old->__bits[0] &= ~0x80000000UL; |
| 15 | 			old->__bits[1] &= ~0x3UL; |
| 16 | 		} |
| 17 | 	} |
| 18 | 	return ret; |
| 19 | } |