| /* | |
| * bsdsignal.c | |
| * | |
| * Use sigaction() to simulate BSD signal() | |
| */ | |
| #include "config.h" | |
| void (*bsd_signal(int signum, void (*handler) (int))) (int) { | |
| struct sigaction action, oldaction; | |
| memset(&action, 0, sizeof action); | |
| action.sa_handler = handler; | |
| sigemptyset(&action.sa_mask); | |
| sigaddset(&action.sa_mask, signum); | |
| action.sa_flags = SA_RESTART; | |
| if (sigaction(signum, &action, &oldaction) == -1) { | |
| #ifdef SIG_ERR | |
| return SIG_ERR; | |
| #else | |
| return NULL; | |
| #endif | |
| } | |
| return oldaction.sa_handler; | |
| } |