9 #include "ntp_syslog.h"
10 #include "ntp_stdlib.h"
12 static ctrl_c_fn ctrl_c_hook;
14 RETSIGTYPE sigint_handler(int);
16 BOOL WINAPI console_event_handler(DWORD);
23 # define Z_SA_RESTART SA_RESTART
25 # define Z_SA_RESTART 0
36 struct sigaction ovec;
39 sigemptyset(&vec.sa_mask);
40 vec.sa_handler = func;
42 /* Added for PPS clocks on Solaris 7 which get EINTR errors */
45 vec.sa_flags = Z_SA_RESTART;
49 vec.sa_flags = Z_SA_RESTART;
53 n = sigaction(sig, &vec, &ovec);
54 while (-1 == n && EINTR == errno);
66 RETSIGTYPE (*func)(int)
74 n = sigvec(sig, &sv, (struct sigvec *)NULL);
86 RETSIGTYPE (*func)(int)
91 n = sigset(sig, func);
100 /* Beware! This implementation resets the signal to SIG_DFL */
104 RETSIGTYPE (*func)(int)
108 # define SIG_ERR (-1)
110 if (SIG_ERR == signal(sig, func)) {
120 * POSIX implementation of set_ctrl_c_hook()
128 if (ctrl_c_hook != NULL)
137 RETSIGTYPE (*handler)(int);
139 if (NULL == c_hook) {
143 handler = &sigint_handler;
144 ctrl_c_hook = c_hook;
146 signal_no_reset(SIGINT, handler);
148 #else /* SYS_WINNT follows */
150 * Windows implementation of set_ctrl_c_hook()
153 console_event_handler(
159 if (CTRL_C_EVENT == dwCtrlType && ctrl_c_hook != NULL) {
175 if (NULL == c_hook) {
179 ctrl_c_hook = c_hook;
182 if (!SetConsoleCtrlHandler(&console_event_handler, install))
183 msyslog(LOG_ERR, "Can't %s console control handler: %m",
188 #endif /* SYS_WINNT */