changes to kernel sigaction struct handling in preparation for mips port
[musl] / src / signal / sigaltstack.c
index 3cc2d45..550f2f9 100644 (file)
@@ -1,8 +1,18 @@
 #include <signal.h>
+#include <errno.h>
 #include "syscall.h"
 
 int sigaltstack(const stack_t *ss, stack_t *old)
 {
-       /* depends on kernel struct matching */
-       return syscall2(__NR_sigaltstack, (long)ss, (long)old);
+       if (ss) {
+               if (ss->ss_size < MINSIGSTKSZ) {
+                       errno = ENOMEM;
+                       return -1;
+               }
+               if (ss->ss_flags & ~SS_DISABLE) {
+                       errno = EINVAL;
+                       return -1;
+               }
+       }
+       return syscall(SYS_sigaltstack, ss, old);
 }