]> mj.ucw.cz Git - libucw.git/blob - lib/sighandler.c
Fixed a nasty bug in hash table allocation. HASH_AUTO_POOL must use
[libucw.git] / lib / sighandler.c
1 /*
2  *      UCW Library -- Catching of signals and calling callback functions
3  *
4  *      (c) 2004, Robert Spalek <robert@ucw.cz>
5  */
6
7 #include "lib/lib.h"
8
9 #include <stdlib.h>
10 #include <string.h>
11 #include <signal.h>
12
13 sh_sighandler_t signal_handler[_NSIG];
14
15 static void
16 signal_handler_internal(int sig)
17 {
18   if (signal_handler[sig])
19   {
20     if (!signal_handler[sig](sig))
21       return;
22   }
23   abort();
24 }
25
26 void
27 handle_signal(int signum, struct sigaction *oldact)
28 {
29   struct sigaction act;
30   bzero(&act, sizeof(act));
31   act.sa_handler = signal_handler_internal;
32   act.sa_flags = SA_NOMASK;
33   if (sigaction(signum, &act, oldact) < 0)
34     die("sigaction: %m");
35 }
36
37 void
38 unhandle_signal(int signum, struct sigaction *oldact)
39 {
40   if (sigaction(signum, oldact, NULL) < 0)
41     die("sigaction: %m");
42 }