#include "db_config.h"
#include "db_int.h"
static int interrupt;
static void set_signal __P((int, int));
static void signal_handler __P((int));
static void
signal_handler(signo)
int signo;
{
#ifndef HAVE_SIGACTION
set_signal(signo, 0);
#endif
if ((interrupt = signo) == 0)
interrupt = SIGINT;
}
static void
set_signal(s, is_dflt)
int s, is_dflt;
{
#ifdef HAVE_SIGACTION
struct sigaction sa, osa;
sa.sa_handler = is_dflt ? SIG_DFL : signal_handler;
(void)sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
(void)sigaction(s, &sa, &osa);
#else
(void)signal(s, is_dflt ? SIG_DFL : signal_handler);
#endif
}
void
__db_util_siginit()
{
#ifdef SIGHUP
set_signal(SIGHUP, 0);
#endif
#ifdef SIGINT
set_signal(SIGINT, 0);
#endif
#ifdef SIGPIPE
set_signal(SIGPIPE, 0);
#endif
#ifdef SIGTERM
set_signal(SIGTERM, 0);
#endif
}
int
__db_util_interrupted()
{
return (interrupt != 0);
}
void
__db_util_sigresend()
{
if (interrupt != 0) {
set_signal(interrupt, 1);
(void)raise(interrupt);
}
}