From 88dfa52e48532594996ee1120e615b32809d703c Mon Sep 17 00:00:00 2001 From: Nadav Har'El <nyh@cloudius-systems.com> Date: Tue, 11 Mar 2014 18:44:10 +0200 Subject: [PATCH] signal() using sigaction() Instead of duplicating sigaction()'s code, let's just use it. Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com> Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com> --- libc/signal.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libc/signal.cc b/libc/signal.cc index 18f5f6e7e..122f689ff 100644 --- a/libc/signal.cc +++ b/libc/signal.cc @@ -153,13 +153,14 @@ int sigaction(int signum, const struct sigaction* act, struct sigaction* oldact) // programs like to call to do simple things, like ignoring a certain signal. sighandler_t signal(int signum, sighandler_t handler) { - if (signum < 0 || signum >= (int)nsignals) { - errno = EINVAL; + struct sigaction act; + memset(&act, 0, sizeof(act)); + act.sa_handler = handler; + act.sa_flags = SA_RESTART; + struct sigaction old; + if (sigaction(signum, &act, &old) < 0) { return SIG_ERR; } - struct sigaction old = signal_actions[signum]; - memset(&signal_actions[signum], 0, sizeof(signal_actions[signum])); - signal_actions[signum].sa_handler = handler; if (old.sa_flags & SA_SIGINFO) { // TODO: Is there anything sane to do here? return nullptr; -- GitLab