diff options
Diffstat (limited to 'usr.sbin/xntpd/lib/syssignal.c')
-rw-r--r-- | usr.sbin/xntpd/lib/syssignal.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/lib/syssignal.c b/usr.sbin/xntpd/lib/syssignal.c new file mode 100644 index 0000000..f8abfdd --- /dev/null +++ b/usr.sbin/xntpd/lib/syssignal.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <sys/types.h> +#include <signal.h> + +#include "ntp_stdlib.h" + +#if defined(NTP_POSIX_SOURCE) +#include <errno.h> + +extern int errno; + +void +signal_no_reset(sig, func) +int sig; +void (*func)(); +{ + int n; + struct sigaction vec; + + vec.sa_handler = func; + sigemptyset(&vec.sa_mask); + vec.sa_flags = 0; + + while (1) { + n = sigaction(sig, &vec, NULL); + if (n == -1 && errno == EINTR) continue; + break; + } + if (n == -1) { + perror("sigaction"); + exit(1); + } +} + +#else +RETSIGTYPE +signal_no_reset(sig, func) +int sig; +RETSIGTYPE (*func)(); +{ + signal(sig, func); + +} +#endif + |