#include <setjmp.h>
#include <signal.h>
#include <stdlib.h>
+#include "syscall.h"
void siglongjmp(sigjmp_buf buf, int ret)
{
- long *flag = buf + sizeof(jmp_buf)/sizeof(long);
- sigset_t *mask = (void *)(flag + 1);
- if (*flag)
- sigprocmask (SIG_SETMASK, mask, NULL);
- longjmp((void *)buf, ret);
+ if (buf->__fl) __syscall(SYS_rt_sigprocmask, SIG_SETMASK,
+ buf->__ss, 0, __SYSCALL_SSLEN);
+ longjmp(buf->__jb, ret);
}