1
0

siglongjmp.c 288 B

123456789101112
  1. #include <setjmp.h>
  2. #include <signal.h>
  3. #include <stdlib.h>
  4. void siglongjmp(sigjmp_buf buf, int ret)
  5. {
  6. unsigned long *flag = buf + sizeof(jmp_buf)/sizeof(long) - 1;
  7. sigset_t *mask = (void *)(flag + 1);
  8. if (*flag)
  9. sigprocmask (SIG_SETMASK, mask, NULL);
  10. longjmp((void *)buf, ret);
  11. }