X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftty%2Flib_tstp.c;h=06c8411caa4d2a2891b63c3febc79b6d0d5e6ba9;hp=aa05daf4d1f020ae4a9485356fc7f0f50bbdba77;hb=9fab8ab6b69130169a6880e63585d83efb1c1722;hpb=f70db18a0c3c6a828d8a5999be37239f01c9d98a diff --git a/ncurses/tty/lib_tstp.c b/ncurses/tty/lib_tstp.c index aa05daf4..06c8411c 100644 --- a/ncurses/tty/lib_tstp.c +++ b/ncurses/tty/lib_tstp.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2002,2006 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 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 * @@ -46,7 +46,7 @@ #define _POSIX_SOURCE #endif -MODULE_ID("$Id: lib_tstp.c,v 1.33 2006/12/30 21:44:53 tom Exp $") +MODULE_ID("$Id: lib_tstp.c,v 1.37 2008/05/03 16:24:56 tom Exp $") #if defined(SIGTSTP) && (HAVE_SIGACTION || HAVE_SIGVEC) #define USE_SIGTSTP 1 @@ -234,14 +234,12 @@ tstp(int dummy GCC_UNUSED) static void cleanup(int sig) { - static int nested; - /* * Actually, doing any sort of I/O from within an signal handler is * "unsafe". But we'll _try_ to clean up the screen and terminal * settings on the way out. */ - if (!nested++ + if (!_nc_globals.cleanup_nested++ && (sig == SIGINT || sig == SIGQUIT)) { #if HAVE_SIGACTION || HAVE_SIGVEC @@ -254,19 +252,17 @@ cleanup(int sig) if (signal(sig, SIG_IGN) != SIG_ERR) #endif { - SCREEN *scan = _nc_screen_chain; - while (scan) { - if (SP != 0 - && SP->_ofp != 0 - && isatty(fileno(SP->_ofp))) { - SP->_cleanup = TRUE; - SP->_outch = _nc_outch; + SCREEN *scan; + for (each_screen(scan)) { + if (scan->_ofp != 0 + && isatty(fileno(scan->_ofp))) { + scan->_cleanup = TRUE; + scan->_outch = _nc_outch; } set_term(scan); endwin(); if (SP) SP->_endwin = FALSE; /* in case we have an atexit! */ - scan = scan->_next_screen; } } } @@ -277,7 +273,7 @@ cleanup(int sig) static void sigwinch(int sig GCC_UNUSED) { - _nc_handle_sigwinch(-1); + _nc_globals.have_sigwinch = 1; } #endif /* USE_SIGWINCH */ @@ -351,8 +347,6 @@ CatchIfDefault(int sig, RETSIGTYPE (*handler) (int)) NCURSES_EXPORT(void) _nc_signal_handler(bool enable) { - static bool initialized = FALSE; - T((T_CALLED("_nc_signal_handler(%d)"), enable)); #if USE_SIGTSTP /* Xenix 2.x doesn't have SIGTSTP, for example */ { @@ -381,14 +375,14 @@ _nc_signal_handler(bool enable) } #endif /* !USE_SIGTSTP */ - if (!initialized) { + if (!_nc_globals.init_signals) { if (enable) { CatchIfDefault(SIGINT, cleanup); CatchIfDefault(SIGTERM, cleanup); #if USE_SIGWINCH CatchIfDefault(SIGWINCH, sigwinch); #endif - initialized = TRUE; + _nc_globals.init_signals = TRUE; } } returnVoid;