2023-03-28 17:40:48 +00:00
|
|
|
#include <setjmp.h>
|
2023-07-24 17:39:22 +00:00
|
|
|
#include <signal.h>
|
2023-03-28 17:40:48 +00:00
|
|
|
|
|
|
|
extern "C"
|
|
|
|
{
|
2023-07-24 17:39:22 +00:00
|
|
|
int sigsetjmp(sigjmp_buf env, int savesigs)
|
2023-03-28 17:40:48 +00:00
|
|
|
{
|
2023-07-24 17:39:22 +00:00
|
|
|
if (savesigs) env->saved = 1, sigprocmask(0, nullptr, &env->set);
|
|
|
|
return setjmp(env->buf);
|
2023-03-28 17:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
__noreturn void siglongjmp(sigjmp_buf env, int val)
|
|
|
|
{
|
2023-07-24 17:39:22 +00:00
|
|
|
if (env->saved) sigprocmask(SIG_SETMASK, &env->set, nullptr);
|
|
|
|
longjmp(env->buf, val);
|
2023-03-28 17:40:48 +00:00
|
|
|
}
|
|
|
|
}
|