From 8bb423daf7d58af130bd1b4418bf3a08a46cb8d0 Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Mon, 25 Dec 2023 15:43:56 +0200 Subject: [PATCH] LibC: Implement siginterrupt() This is just a simple wrapper around the more-modern sigaction. --- Userland/Libraries/LibC/signal.cpp | 14 ++++++++++++++ Userland/Libraries/LibC/signal.h | 1 + 2 files changed, 15 insertions(+) diff --git a/Userland/Libraries/LibC/signal.cpp b/Userland/Libraries/LibC/signal.cpp index f13e094113..e26fb5e817 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 c3cb70a386..355d13cf54 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*);