Rich Felker | 0b44a03 | 2011-02-12 00:22:29 -0500 | [diff] [blame] | 1 | #include <signal.h> |
Rich Felker | 6871fd7 | 2011-03-10 10:17:29 -0500 | [diff] [blame] | 2 | #include <errno.h> |
Rich Felker | 0b44a03 | 2011-02-12 00:22:29 -0500 | [diff] [blame] | 3 | #include "syscall.h" |
4 | |||||
Rich Felker | 400c5e5 | 2012-09-06 22:44:55 -0400 | [diff] [blame] | 5 | int sigaltstack(const stack_t *restrict ss, stack_t *restrict old) |
Rich Felker | 0b44a03 | 2011-02-12 00:22:29 -0500 | [diff] [blame] | 6 | { |
Rich Felker | 6871fd7 | 2011-03-10 10:17:29 -0500 | [diff] [blame] | 7 | if (ss) { |
8 | if (ss->ss_size < MINSIGSTKSZ) { | ||||
9 | errno = ENOMEM; | ||||
10 | return -1; | ||||
11 | } | ||||
Rich Felker | 4918b7f | 2019-03-05 11:02:15 -0500 | [diff] [blame^] | 12 | if (ss->ss_flags & SS_ONSTACK) { |
Rich Felker | 6871fd7 | 2011-03-10 10:17:29 -0500 | [diff] [blame] | 13 | errno = EINVAL; |
14 | return -1; | ||||
15 | } | ||||
16 | } | ||||
Rich Felker | aa398f5 | 2011-03-20 00:16:43 -0400 | [diff] [blame] | 17 | return syscall(SYS_sigaltstack, ss, old); |
Rich Felker | 0b44a03 | 2011-02-12 00:22:29 -0500 | [diff] [blame] | 18 | } |