diff options
Diffstat (limited to 'contrib/tcsh/tc.sig.c')
-rw-r--r-- | contrib/tcsh/tc.sig.c | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/contrib/tcsh/tc.sig.c b/contrib/tcsh/tc.sig.c deleted file mode 100644 index 343754f..0000000 --- a/contrib/tcsh/tc.sig.c +++ /dev/null @@ -1,139 +0,0 @@ -/* $Header: /p/tcsh/cvsroot/tcsh/tc.sig.c,v 3.36 2006/08/24 20:56:31 christos Exp $ */ -/* - * tc.sig.c: Signal routine emulations - */ -/*- - * Copyright (c) 1980, 1991 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include "sh.h" - -RCSID("$tcsh: tc.sig.c,v 3.36 2006/08/24 20:56:31 christos Exp $") - -#include "tc.wait.h" - -void -sigset_interrupting(int sig, void (*fn) (int)) -{ - struct sigaction act; - - act.sa_handler = fn; - sigemptyset(&act.sa_mask); - act.sa_flags = 0; - if (sigaction(sig, &act, NULL) == 0) { - sigset_t set; - sigemptyset(&set); - sigaddset(&set, sig); - sigprocmask(SIG_UNBLOCK, &set, NULL); - } -} - -static volatile sig_atomic_t alrmcatch_pending; /* = 0; */ -static volatile sig_atomic_t pchild_pending; /* = 0; */ -static volatile sig_atomic_t phup_pending; /* = 0; */ -static volatile sig_atomic_t pintr_pending; /* = 0; */ -int alrmcatch_disabled; /* = 0; */ -int phup_disabled; /* = 0; */ -int pchild_disabled; /* = 0; */ -int pintr_disabled; /* = 0; */ - -void -handle_pending_signals(void) -{ - if (!phup_disabled && phup_pending) { - phup_pending = 0; - phup(); - } - if (!pintr_disabled && pintr_pending) { - pintr_pending = 0; - pintr(); - } - if (!pchild_disabled && pchild_pending) { - pchild_pending = 0; - pchild(); - } - if (!alrmcatch_disabled && alrmcatch_pending) { - alrmcatch_pending = 0; - alrmcatch(); - } -} - -void -queue_alrmcatch(int sig) -{ - USE(sig); - alrmcatch_pending = 1; -} - -void -queue_pchild(int sig) -{ - USE(sig); - pchild_pending = 1; -} - -void -queue_phup(int sig) -{ - USE(sig); - phup_pending = 1; -} - -void -queue_pintr(int sig) -{ - USE(sig); - pintr_pending = 1; -} - -void -disabled_cleanup(void *xdisabled) -{ - int *disabled; - - disabled = xdisabled; - if (--*disabled == 0) - handle_pending_signals(); -} - -void -pintr_disabled_restore(void *xold) -{ - int *old; - - old = xold; - pintr_disabled = *old; -} - -void -pintr_push_enable(int *saved) -{ - *saved = pintr_disabled; - pintr_disabled = 0; - cleanup_push(saved, pintr_disabled_restore); - handle_pending_signals(); -} |