]> mj.ucw.cz Git - libucw.git/commitdiff
added a wrapper for signal handlers in sighandler.c
authorRobert Spalek <robert@ucw.cz>
Thu, 24 Jun 2004 11:52:21 +0000 (11:52 +0000)
committerRobert Spalek <robert@ucw.cz>
Thu, 24 Jun 2004 11:52:21 +0000 (11:52 +0000)
lib/Makefile
lib/lib.h
lib/sighandler.c [new file with mode: 0644]

index cd51bb8b53177d19b7b568988e285454e58b0709..06e11a90525bbbae6da9c1b6179a680a2ccbe02a 100644 (file)
@@ -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
index 2186b5d456fa4492e18400983614ef2b07cbb914..39ee0de69874dce4cb3939bb03e58e342c387187 100644 (file)
--- 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 (file)
index 0000000..00bd81f
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ *     Catching of signals and calling callback functions
+ *
+ *     (c) 2004, Robert Spalek <robert@ucw.cz>
+ */
+
+#include "lib/lib.h"
+
+#include <stdlib.h>
+#include <signal.h>
+
+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);
+}