7 void _default_handler(int signal
);
9 typedef void (*__p_sig_fn_t
)(int);
12 typedef struct _sig_element
21 static sig_element signal_list
[] =
23 { SIGINT
, "CTRL+C",SIG_DFL
},
24 { SIGILL
, "Illegal instruction",SIG_DFL
},
25 { SIGFPE
, "Floating-point exception",SIG_DFL
},
26 { SIGSEGV
, "Illegal storage access",SIG_DFL
},
27 { SIGTERM
, "Termination request",SIG_DFL
},
28 { SIGBREAK
, "CTRL+BREAK",SIG_DFL
},
29 { SIGABRT
, "Abnormal termination",SIG_DFL
}
37 //void ( *signal( int sig, void (__cdecl *func) ( int sig [, int subcode ] )) ) ( int sig );
42 __p_sig_fn_t
signal(int sig
, __p_sig_fn_t func
)
63 // check with IsBadCodePtr
64 if ( func
< (__p_sig_fn_t
)4096 && func
!= SIG_DFL
&& func
!= SIG_IGN
)
70 for(i
=0; i
< sizeof(signal_list
)/sizeof(signal_list
[0]); i
++)
72 if ( signal_list
[i
].signal
== sig
)
74 temp
= signal_list
[i
].handler
;
75 signal_list
[i
].handler
= func
;
80 /* should be impossible to get here */
92 __p_sig_fn_t temp
= 0;
107 //FIXME: set last err?
117 for(i
=0;i
<sizeof(signal_list
)/sizeof(signal_list
[0]);i
++)
119 if ( signal_list
[i
].signal
== sig
)
121 temp
= signal_list
[i
].handler
;
126 if(temp
== SIG_IGN
)// || (sig == SIGQUIT && temp == (_p_sig_fn_t)SIG_DFL))
127 return 0; /* Ignore it */
130 _default_handler(sig
); /* this does not return */
139 void _default_handler(int sig
)