jsignal.c   [plain text]


/*
 * A compatible implementation of signal which relies of sigaction.
 * More or less taken from teh Stevens book.
 */

#include <signal.h>
#include <util.h>

jsighandler_t* jabber_signal(int signo,  jsighandler_t *func)
{
    struct sigaction act, oact;

    act.sa_handler = func;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
#ifdef SA_RESTART
    if (signo != SIGALRM)
        act.sa_flags |= SA_RESTART;
#endif
    if (sigaction(signo, &act, &oact) < 0)
        return (SIG_ERR);
    return (oact.sa_handler);
}