diff --git a/Userland/Libraries/LibC/signal.cpp b/Userland/Libraries/LibC/signal.cpp index f13e0941137..e26fb5e8173 100644 --- a/Userland/Libraries/LibC/signal.cpp +++ b/Userland/Libraries/LibC/signal.cpp @@ -102,6 +102,20 @@ int sigdelset(sigset_t* set, int sig) return 0; } +// https://pubs.opengroup.org/onlinepubs/009696699/functions/siginterrupt.html +int siginterrupt(int sig, int flag) +{ + struct sigaction act; + int rc = sigaction(sig, nullptr, &act); + if (rc < 0) + return rc; + if (flag) + act.sa_flags &= ~SA_RESTART; + else + act.sa_flags |= SA_RESTART; + return sigaction(sig, &act, nullptr); +} + // https://pubs.opengroup.org/onlinepubs/9699919799/functions/sigismember.html int sigismember(sigset_t const* set, int sig) { diff --git a/Userland/Libraries/LibC/signal.h b/Userland/Libraries/LibC/signal.h index c3cb70a3864..355d13cf547 100644 --- a/Userland/Libraries/LibC/signal.h +++ b/Userland/Libraries/LibC/signal.h @@ -28,6 +28,7 @@ int sigfillset(sigset_t*); int sigaddset(sigset_t*, int sig); int sigaltstack(stack_t const* ss, stack_t* old_ss); int sigdelset(sigset_t*, int sig); +int siginterrupt(int sig, int flag); int sigismember(sigset_t const*, int sig); int sigprocmask(int how, sigset_t const* set, sigset_t* old_set); int sigpending(sigset_t*);