make sigaltstack work (missing macros in signal.h, error conditions)

This commit is contained in:
Rich Felker 2011-03-10 10:17:29 -05:00
parent 1b538acb0a
commit 6871fd773d
3 changed files with 15 additions and 1 deletions

View File

@ -131,6 +131,8 @@ struct __siginfo
#define POLL_HUP 6
#define SS_ONSTACK 1
#define SS_DISABLE 2
#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192
#endif
#define SA_NOCLDSTOP 1

View File

@ -137,6 +137,8 @@ struct __siginfo
#define POLL_HUP 6
#define SS_ONSTACK 1
#define SS_DISABLE 2
#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192
#endif
#define SA_NOCLDSTOP 1

View 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 */
if (ss) {
if (ss->ss_size < MINSIGSTKSZ) {
errno = ENOMEM;
return -1;
}
if (ss->ss_flags & ~SS_DISABLE) {
errno = EINVAL;
return -1;
}
}
return syscall2(__NR_sigaltstack, (long)ss, (long)old);
}