~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/arch/um/kernel/signal_user.c

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, &current_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(&current_mask); 25 current_mask.__val[0] = flags; 26 sigprocmask(SIG_SETMASK, &current_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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.