#include #include int signalsetup(struct sigaction *def, sigset_t *mask, void (*handler)(int)) { struct sigaction catch; catch.sa_handler = handler; /* Set up signal structures */ def->sa_handler = SIG_DFL; catch.sa_flags = 0; def->sa_flags = 0; if ((sigemptyset(&(def->sa_mask)) == -1) || (sigemptyset(&(catch.sa_mask)) == -1) || (sigaddset(&(catch.sa_mask), SIGINT) == -1) || (sigaddset(&(catch.sa_mask), SIGQUIT) == -1) || (sigaction(SIGINT, &catch, NULL) == -1) || (sigaction(SIGQUIT, &catch, NULL) == -1) || (sigemptyset(mask) == -1) || (sigaddset(mask, SIGINT) == -1) || (sigaddset(mask, SIGQUIT) == -1)) return -1; return 0; }