Version:
~ [ 0.6-2.3.46 ] ~
Architecture:
~ [ um ] ~
** Warning: Cannot open xref database.
1 #include <stdlib.h>
2 #include <signal.h>
3 #include "user_util.h"
4 #include "user.h"
5
6 /* XXX These need to be per-cpu */
7
8 static sigset_t none_mask;
9 static sigset_t handled_mask;
10
11 unsigned long save_sigmask(void)
12 {
13 sigset_t current_mask;
14
15 sigprocmask(SIG_BLOCK, &none_mask, ¤t_mask);
16 /* XXX Yuck */
17 return(current_mask.__val[0]);
18 }
19
20 void restore_sigmask(unsigned long flags)
21 {
22 sigset_t current_mask;
23
24 sigemptyset(¤t_mask);
25 current_mask.__val[0] = flags;
26 sigprocmask(SIG_SETMASK, ¤t_mask, NULL);
27 }
28
29 void signal_init(void)
30 {
31 sigemptyset(&none_mask);
32 sigprocmask(SIG_SETMASK, &none_mask, &handled_mask);
33 }
34
35 void *add_signal_handler(int sig, void (*handler)(int))
36 {
37 void *old;
38
39 if(sig > 8 * sizeof(int)) panic("signal number >= %d", 8 * sizeof(int));
40 sigaddset(&handled_mask, sig);
41 old = signal(sig, handler);
42 if(old < 0) return(old);
43 else return(0);
44 }
45
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.