1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 07:38:10 +00:00

Compat work towards making bash-5.0 build with less patches.

Hacked implementations of sigsetjmp() and siglongjmp(). I didn't know about
these APIs until just now, but I hope I got them right.
This commit is contained in:
Andreas Kling 2019-02-26 14:05:28 +01:00
parent 4a5b474f1d
commit e0c1541847
7 changed files with 46 additions and 3 deletions

View file

@ -2,6 +2,8 @@
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <setjmp.h>
#include <assert.h>
#include <Kernel/Syscall.h>
extern "C" {
@ -106,4 +108,24 @@ const char* sys_siglist[NSIG] = {
#undef __SIGNAL
};
int sigsetjmp(jmp_buf env, int savesigs)
{
if (savesigs) {
int rc = sigprocmask(0, nullptr, &env->saved_signal_mask);
assert(rc == 0);
env->did_save_signal_mask = true;
} else {
env->did_save_signal_mask = false;
}
return setjmp(env);
}
void siglongjmp(jmp_buf env, int val)
{
if (env->did_save_signal_mask) {
int rc = sigprocmask(SIG_SETMASK, &env->saved_signal_mask, nullptr);
assert(rc == 0);
}
longjmp(env, val);
}
}