Luna/libc/src/setjmp.cpp

18 lines
394 B
C++
Raw Normal View History

#include <setjmp.h>
#include <signal.h>
extern "C"
{
int sigsetjmp(sigjmp_buf env, int savesigs)
{
if (savesigs) env->saved = 1, sigprocmask(0, nullptr, &env->set);
return setjmp(env->buf);
}
__noreturn void siglongjmp(sigjmp_buf env, int val)
{
if (env->saved) sigprocmask(SIG_SETMASK, &env->set, nullptr);
longjmp(env->buf, val);
}
}