summaryrefslogtreecommitdiffstats
path: root/contrib/libreadline/signals.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2006-12-31 09:06:30 +0000
committerache <ache@FreeBSD.org>2006-12-31 09:06:30 +0000
commit0e6bca45b1aeb189311204a2b5d10ca61fdf4ae3 (patch)
tree7ab23277706b512032dc5a9144d193728ba52eae /contrib/libreadline/signals.c
parentead5fc05b9835be798994dfae32172fde03e9d74 (diff)
downloadFreeBSD-src-0e6bca45b1aeb189311204a2b5d10ca61fdf4ae3.zip
FreeBSD-src-0e6bca45b1aeb189311204a2b5d10ca61fdf4ae3.tar.gz
Virgin import of GNU Readline 5.2
Diffstat (limited to 'contrib/libreadline/signals.c')
-rw-r--r--contrib/libreadline/signals.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/contrib/libreadline/signals.c b/contrib/libreadline/signals.c
index f344ed8..54f2a64 100644
--- a/contrib/libreadline/signals.c
+++ b/contrib/libreadline/signals.c
@@ -160,6 +160,7 @@ rl_signal_handler (sig)
rl_cleanup_after_signal ();
#if defined (HAVE_POSIX_SIGNALS)
+ sigemptyset (&set);
sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set);
sigdelset (&set, sig);
#else /* !HAVE_POSIX_SIGNALS */
@@ -288,9 +289,44 @@ rl_set_signals ()
{
sighandler_cxt dummy;
SigHandler *oh;
+#if defined (HAVE_POSIX_SIGNALS)
+ static int sigmask_set = 0;
+ static sigset_t bset, oset;
+#endif
+
+#if defined (HAVE_POSIX_SIGNALS)
+ if (rl_catch_signals && sigmask_set == 0)
+ {
+ sigemptyset (&bset);
+
+ sigaddset (&bset, SIGINT);
+ sigaddset (&bset, SIGINT);
+#if defined (SIGQUIT)
+ sigaddset (&bset, SIGQUIT);
+#endif
+#if defined (SIGALRM)
+ sigaddset (&bset, SIGALRM);
+#endif
+#if defined (SIGTSTP)
+ sigaddset (&bset, SIGTSTP);
+#endif
+#if defined (SIGTTIN)
+ sigaddset (&bset, SIGTTIN);
+#endif
+#if defined (SIGTTOU)
+ sigaddset (&bset, SIGTTOU);
+#endif
+ sigmask_set = 1;
+ }
+#endif /* HAVE_POSIX_SIGNALS */
if (rl_catch_signals && signals_set_flag == 0)
{
+#if defined (HAVE_POSIX_SIGNALS)
+ sigemptyset (&oset);
+ sigprocmask (SIG_BLOCK, &bset, &oset);
+#endif
+
rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int);
rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term);
#if defined (SIGQUIT)
@@ -324,6 +360,10 @@ rl_set_signals ()
#endif /* SIGTTIN */
signals_set_flag = 1;
+
+#if defined (HAVE_POSIX_SIGNALS)
+ sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL);
+#endif
}
#if defined (SIGWINCH)
@@ -390,8 +430,8 @@ rl_cleanup_after_signal ()
_rl_clean_up_for_exit ();
if (rl_deprep_term_function)
(*rl_deprep_term_function) ();
- rl_clear_signals ();
rl_clear_pending_input ();
+ rl_clear_signals ();
}
/* Reset the terminal and readline state after a signal handler returns. */
OpenPOWER on IntegriCloud