/* * 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; }