X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftty%2Flib_tstp.c;fp=ncurses%2Ftty%2Flib_tstp.c;h=aa05daf4d1f020ae4a9485356fc7f0f50bbdba77;hp=4c9f9fbaf1b763a9dce16e64d684f07a2c4ec719;hb=f70db18a0c3c6a828d8a5999be37239f01c9d98a;hpb=6f8ad7d77b390ee433a283e1c5175bcb67317674 diff --git a/ncurses/tty/lib_tstp.c b/ncurses/tty/lib_tstp.c index 4c9f9fba..aa05daf4 100644 --- a/ncurses/tty/lib_tstp.c +++ b/ncurses/tty/lib_tstp.c @@ -46,7 +46,7 @@ #define _POSIX_SOURCE #endif -MODULE_ID("$Id: lib_tstp.c,v 1.32 2006/04/01 19:31:34 tom Exp $") +MODULE_ID("$Id: lib_tstp.c,v 1.33 2006/12/30 21:44:53 tom Exp $") #if defined(SIGTSTP) && (HAVE_SIGACTION || HAVE_SIGVEC) #define USE_SIGTSTP 1 @@ -359,21 +359,21 @@ _nc_signal_handler(bool enable) static bool ignore_tstp = FALSE; if (!ignore_tstp) { - static sigaction_t act, oact; + static sigaction_t new_sigaction, old_sigaction; if (!enable) { - act.sa_handler = SIG_IGN; - sigaction(SIGTSTP, &act, &oact); - } else if (act.sa_handler != SIG_DFL) { - sigaction(SIGTSTP, &oact, NULL); - } else if (sigaction(SIGTSTP, NULL, &oact) == 0 - && (oact.sa_handler == SIG_DFL)) { - sigemptyset(&act.sa_mask); + new_sigaction.sa_handler = SIG_IGN; + sigaction(SIGTSTP, &new_sigaction, &old_sigaction); + } else if (new_sigaction.sa_handler != SIG_DFL) { + sigaction(SIGTSTP, &old_sigaction, NULL); + } else if (sigaction(SIGTSTP, NULL, &old_sigaction) == 0 + && (old_sigaction.sa_handler == SIG_DFL)) { + sigemptyset(&new_sigaction.sa_mask); #ifdef SA_RESTART - act.sa_flags |= SA_RESTART; + new_sigaction.sa_flags |= SA_RESTART; #endif /* SA_RESTART */ - act.sa_handler = tstp; - (void) sigaction(SIGTSTP, &act, NULL); + new_sigaction.sa_handler = tstp; + (void) sigaction(SIGTSTP, &new_sigaction, NULL); } else { ignore_tstp = TRUE; }