initial check-in, version 0.5.0
[musl] / src / signal / sigsetjmp.c
1 #include <setjmp.h>
2 #include <signal.h>
3 #include <stdlib.h>
4
5 /* !!! This function will not work unless the compiler performs
6  * tail call optimization. Machine-specific asm versions should
7  * be created instead even though the workaround (tail call)
8  * is entirely non-machine-specific... */
9
10 int sigsetjmp(sigjmp_buf buf, int save)
11 {
12         long *flag = buf + sizeof(jmp_buf)/sizeof(long);
13         sigset_t *mask = (void *)(flag + 1);
14         if ((*flag = save))
15                 sigprocmask (SIG_SETMASK, NULL, mask);
16         return setjmp((void *)buf);
17 }