X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftty%2Ftty_update.c;h=b91053bced85d6e5034fcd5f25e55169a418fe12;hp=7e99b358eb4e93d796d68fda3d678029b1b7791e;hb=9dda8e1ed1bfb63fa23d99a816f6c046ba0e307c;hpb=404cc3f5b0751dd219565139f825c5a4d445f651;ds=sidebyside diff --git a/ncurses/tty/tty_update.c b/ncurses/tty/tty_update.c index 7e99b358..b91053bc 100644 --- a/ncurses/tty/tty_update.c +++ b/ncurses/tty/tty_update.c @@ -82,7 +82,7 @@ #include -MODULE_ID("$Id: tty_update.c,v 1.255 2009/05/10 00:53:14 tom Exp $") +MODULE_ID("$Id: tty_update.c,v 1.256 2009/05/17 00:13:49 tom Exp $") /* * This define controls the line-breakout optimization. Every once in a @@ -668,8 +668,27 @@ NCURSES_SP_NAME(doupdate) (NCURSES_SP_DCL0) T((T_CALLED("doupdate()"))); +#if !USE_REENTRANT + /* + * It is "legal" but unlikely that an application could assign a new + * value to one of the standard windows. Check for that possibility + * and try to recover. + * + * We do not allow applications to assign new values in the reentrant + * model. + */ +#define SyncScreens(internal,exported) \ + if (internal == 0) internal = exported; \ + if (internal != exported) exported = internal + + SyncScreens(CurScreen(SP_PARM), curscr); + SyncScreens(NewScreen(SP_PARM), newscr); + SyncScreens(StdScreen(SP_PARM), stdscr); +#endif + if (CurScreen(SP_PARM) == 0 - || NewScreen(SP_PARM) == 0) + || NewScreen(SP_PARM) == 0 + || StdScreen(SP_PARM) == 0) returnCode(ERR); #ifdef TRACE