20 lines
449 B
C
20 lines
449 B
C
|
#include <signal.h>
|
||
|
|
||
|
/*
|
||
|
* Uses our bridge in sigaction.s when calling the signal handler.
|
||
|
* Mimics Linux __NR_signal by using SA_NODEFER | SA_RESETHAND.
|
||
|
*/
|
||
|
sighandler_t signal(int signum, sighandler_t handler) {
|
||
|
struct sigaction new, old;
|
||
|
int i;
|
||
|
|
||
|
new.sa_handler = handler;
|
||
|
new.sa_mask = 0; /* empty set */
|
||
|
new.sa_flags = SA_NODEFER | SA_RESETHAND;
|
||
|
|
||
|
i = sigaction(signum, &new, &old);
|
||
|
if (i < 0)
|
||
|
return SIG_ERR;
|
||
|
return old.sa_handler;
|
||
|
}
|