From f5cb619eb24ba3501a1b1a1c3edd93689714b1f6 Mon Sep 17 00:00:00 2001 From: Robert Spalek Date: Thu, 24 Jun 2004 11:52:21 +0000 Subject: [PATCH] added a wrapper for signal handlers in sighandler.c --- lib/Makefile | 2 +- lib/lib.h | 6 ++++++ lib/sighandler.c | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 lib/sighandler.c diff --git a/lib/Makefile b/lib/Makefile index cd51bb8b..06e11a90 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -11,7 +11,7 @@ LIBSH_MODS=alloc alloc_str ctmatch db fastbuf fb-file fb-mem lists \ finger proctitle ipaccess profile bitsig randomkey \ hashfunc base64 base224 fb-temp fb-mmap fb-printf urlkey \ partmap fb-limfd fb-buffer mainloop exitstatus runcmd carefulio \ - lizard lizard-safe + lizard lizard-safe sighandler ifdef CONFIG_OWN_REGEX include lib/regex/Makefile diff --git a/lib/lib.h b/lib/lib.h index 2186b5d4..39ee0de6 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -207,4 +207,10 @@ void echo_command_v(byte *buf, int size, byte *cmd, va_list args); int careful_read(int fd, void *buf, int len); int careful_write(int fd, void *buf, int len); +/* sighandler.c */ +typedef void (*my_sighandler_t)(void); +extern my_sighandler_t signal_handler[]; + +void *handle_signal(int signum); + #endif diff --git a/lib/sighandler.c b/lib/sighandler.c new file mode 100644 index 00000000..00bd81ff --- /dev/null +++ b/lib/sighandler.c @@ -0,0 +1,27 @@ +/* + * Catching of signals and calling callback functions + * + * (c) 2004, Robert Spalek + */ + +#include "lib/lib.h" + +#include +#include + +my_sighandler_t signal_handler[_NSIG]; + +static void +signal_handler_internal(int sig) +{ + signal(sig, signal_handler_internal); + if (signal_handler[sig]) + signal_handler[sig](); + abort(); +} + +void * +handle_signal(int signum) +{ + return signal(signum, signal_handler_internal); +} -- 2.39.2