int safe_signal (int n, void (*p) (int)) { struct sigaction u, v; u.sa_handler = p; sigemptyset (&u.sa_mask); u.sa_flags = 0; return (safe_sigaction (n, &u, &v)); }
void os_init_prolog_globals(void) { struct sigaction action; action.sa_handler = sigsegv_handler; sigemptyset(&action.sa_mask); action.sa_flags = 0; safe_sigaction(SIGSEGV, &action, &original_sigsegv_action); }
static void setup_signals (void) { unsigned i = 0; struct sigaction sa; sa.sa_handler = handle_signal; sa.sa_flags = SA_NOCLDSTOP; sigfillset(&sa.sa_mask); while (forward_signals[i].code!= NO_SIGNAL) { safe_sigaction (forward_signals[i].name, forward_signals[i].code, &sa); i++; } safe_sigaction ("CHLD", SIGCHLD, &sa); safe_sigaction ("TERM", SIGTERM, &sa); safe_sigaction ("INT" , SIGINT , &sa); }