X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftty%2Flib_tstp.c;h=aa05daf4d1f020ae4a9485356fc7f0f50bbdba77;hp=c850e41da2c2da122f5a71c40a5753b7048f145b;hb=f70db18a0c3c6a828d8a5999be37239f01c9d98a;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/ncurses/tty/lib_tstp.c b/ncurses/tty/lib_tstp.c index c850e41d..aa05daf4 100644 --- a/ncurses/tty/lib_tstp.c +++ b/ncurses/tty/lib_tstp.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2001,2002 Free Software Foundation, Inc. * + * Copyright (c) 1998-2002,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -29,7 +29,7 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * - * and: Thomas Dickey 1995-2001 * + * and: Thomas E. Dickey 1995-on * ****************************************************************************/ /* @@ -46,7 +46,7 @@ #define _POSIX_SOURCE #endif -MODULE_ID("$Id: lib_tstp.c,v 1.30 2002/05/18 19:55:38 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 @@ -277,11 +277,7 @@ cleanup(int sig) static void sigwinch(int sig GCC_UNUSED) { - SCREEN *scan = _nc_screen_chain; - while (scan) { - scan->_sig_winch = TRUE; - scan = scan->_next_screen; - } + _nc_handle_sigwinch(-1); } #endif /* USE_SIGWINCH */ @@ -363,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; }