/* This code is all obsolete & should be thrown away. 8/23/96 Olin. */ #include <unistd.h> #include <sys/types.h> #include <signal.h> #include "cstuff.h" extern int errno; /* Hack the blocked-signal mask. ******************************************************************************* */ #include "machine/sigset.h" int set_procmask(int hi, int lo, int *old_lo_p) { sigset_t mask, old_mask; int old_hi; make_sigset(&mask, hi, lo); sigprocmask(SIG_SETMASK, &mask, &old_mask); split_sigset(old_mask, &old_hi, old_lo_p); return old_hi; } int get_procmask(int *old_lo_p) { sigset_t old_mask; int old_hi; sigprocmask(SIG_SETMASK, NULL, &old_mask); split_sigset(old_mask, &old_hi, old_lo_p); return old_hi; } /* Set/Get signal handlers ******************************************************************************* */ long int pending_signals = 0; void scm_handle_sig(int sig) {pending_signals |= (1<<sig);} s48_value set_int_handler(int sig, s48_value handler, int flags, s48_value *ohandler, int *oflags) { struct sigaction new, old; sigemptyset(&new.sa_mask); /* WTF */ new.sa_flags = flags; if( handler == S48_FALSE ) new.sa_handler = SIG_IGN; else if( handler == S48_TRUE ) new.sa_handler = SIG_DFL; else { new.sa_handler = scm_handle_sig; /* Do other stuff. */ } if( sigaction(sig, &new, &old) ) { *ohandler = S48_FALSE; return s48_enter_fixnum(errno); } *oflags = old.sa_flags; /* if( old.sa_handler == SIG_IGN ) *ohandler = S48_FALSE; else if( old.sa_handler == SIG_DFL ) *ohandler = S48_TRUE; else if( old.sa_handler == scm_handle_sig ) { *ohandler = s48_enter_fixnum(0); /* Fix later. */ } else *ohandler = s48_enter_fixnum(-1); /* Unknown signal handler. */ return S48_FALSE; } s48_value get_int_handler(int signal, s48_value *handler, int *flags) { struct sigaction old; if( sigaction(signal, NULL, &old) ) { *handler = S48_FALSE; return s48_enter_fixnum(errno); } *flags = old.sa_flags; if( old.sa_handler == SIG_IGN ) *handler = S48_FALSE; else if( old.sa_handler == SIG_DFL ) *handler = S48_TRUE; else if( old.sa_handler == scm_handle_sig ) { *handler = s48_enter_fixnum(0); /* Fix later. */ } else *handler = s48_enter_fixnum(-1); /* Unknown signal handler. */ return S48_FALSE; }