Module Name: src Committed By: roy Date: Mon Jan 30 14:55:58 UTC 2017
Modified Files: src/lib/libcurses: curses.c curses_private.h get_wch.c getch.c ins_wch.c ins_wstr.c setterm.c Log Message: If either set_escdelay(3) or set_tabsize(3) are called, set _reentrant to ensure we use the saved value for the sceen. This effectively makes ESCDELAY and TABSIZE read-only when either of these functions are called. To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/lib/libcurses/curses.c cvs rdiff -u -r1.60 -r1.61 src/lib/libcurses/curses_private.h cvs rdiff -u -r1.12 -r1.13 src/lib/libcurses/get_wch.c cvs rdiff -u -r1.62 -r1.63 src/lib/libcurses/getch.c cvs rdiff -u -r1.9 -r1.10 src/lib/libcurses/ins_wch.c \ src/lib/libcurses/ins_wstr.c cvs rdiff -u -r1.61 -r1.62 src/lib/libcurses/setterm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libcurses/curses.c diff -u src/lib/libcurses/curses.c:1.26 src/lib/libcurses/curses.c:1.27 --- src/lib/libcurses/curses.c:1.26 Sat Oct 22 21:55:06 2016 +++ src/lib/libcurses/curses.c Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: curses.c,v 1.26 2016/10/22 21:55:06 christos Exp $ */ +/* $NetBSD: curses.c,v 1.27 2017/01/30 14:55:58 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -35,7 +35,7 @@ #if 0 static char sccsid[] = "@(#)curses.c 8.3 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: curses.c,v 1.26 2016/10/22 21:55:06 christos Exp $"); +__RCSID("$NetBSD: curses.c,v 1.27 2017/01/30 14:55:58 roy Exp $"); #endif #endif /* not lint */ @@ -64,6 +64,7 @@ WINDOW *curscr; /* Current screen. */ WINDOW *stdscr; /* Standard screen. */ WINDOW *__virtscr; /* Virtual screen (for doupdate()). */ SCREEN *_cursesi_screen; /* the current screen we are using */ +volatile bool _reentrant; /* If true, some global vars are ro. */ int COLS; /* Columns on the screen. */ int LINES; /* Lines on the screen. */ int TABSIZE; /* Size of a tab. */ Index: src/lib/libcurses/curses_private.h diff -u src/lib/libcurses/curses_private.h:1.60 src/lib/libcurses/curses_private.h:1.61 --- src/lib/libcurses/curses_private.h:1.60 Tue Jan 24 17:27:30 2017 +++ src/lib/libcurses/curses_private.h Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: curses_private.h,v 1.60 2017/01/24 17:27:30 roy Exp $ */ +/* $NetBSD: curses_private.h,v 1.61 2017/01/30 14:55:58 roy Exp $ */ /*- * Copyright (c) 1998-2000 Brett Lymn @@ -314,6 +314,7 @@ extern char __UPPERCASE; /* Terminal i extern int My_term; /* Use Def_term regardless. */ extern const char *Def_term; /* Default terminal type. */ extern SCREEN *_cursesi_screen; /* The current screen in use */ +extern volatile bool _reentrant; /* If true, some global vars are ro. */ /* Debugging options/functions. */ #ifdef DEBUG Index: src/lib/libcurses/get_wch.c diff -u src/lib/libcurses/get_wch.c:1.12 src/lib/libcurses/get_wch.c:1.13 --- src/lib/libcurses/get_wch.c:1.12 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/get_wch.c Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: get_wch.c,v 1.12 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: get_wch.c,v 1.13 2017/01/30 14:55:58 roy Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: get_wch.c,v 1.12 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: get_wch.c,v 1.13 2017/01/30 14:55:58 roy Exp $"); #endif /* not lint */ #include <string.h> @@ -91,7 +91,8 @@ inkey(wchar_t *wc, int to, int delay) *working = &_cursesi_screen->cbuf_cur, *end = &_cursesi_screen->cbuf_tail; char *inbuf = &_cursesi_screen->cbuf[ 0 ]; - int escdelay = _cursesi_screen->ESCDELAY; + int escdelay = _reentrant ? + _cursesi_screen->ESCDELAY : ESCDELAY; #ifdef DEBUG __CTRACE(__CTRACE_INPUT, "inkey (%p, %d, %d)\n", wc, to, delay); Index: src/lib/libcurses/getch.c diff -u src/lib/libcurses/getch.c:1.62 src/lib/libcurses/getch.c:1.63 --- src/lib/libcurses/getch.c:1.62 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/getch.c Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: getch.c,v 1.62 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: getch.c,v 1.63 2017/01/30 14:55:58 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)getch.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: getch.c,v 1.62 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: getch.c,v 1.63 2017/01/30 14:55:58 roy Exp $"); #endif #endif /* not lint */ @@ -550,7 +550,8 @@ inkey(int to, int delay) int c, mapping; keymap_t *current = _cursesi_screen->base_keymap; FILE *infd = _cursesi_screen->infd; - int escdelay = _cursesi_screen->ESCDELAY; + int escdelay = _reentrant ? + _cursesi_screen->ESCDELAY : ESCDELAY; k = 0; /* XXX gcc -Wuninitialized */ @@ -988,6 +989,7 @@ set_escdelay(int escdelay) { _cursesi_screen->ESCDELAY = escdelay; + _reentrant = true; ESCDELAY = escdelay; return OK; } Index: src/lib/libcurses/ins_wch.c diff -u src/lib/libcurses/ins_wch.c:1.9 src/lib/libcurses/ins_wch.c:1.10 --- src/lib/libcurses/ins_wch.c:1.9 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/ins_wch.c Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: ins_wch.c,v 1.9 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: ins_wch.c,v 1.10 2017/01/30 14:55:58 roy Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ins_wch.c,v 1.9 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: ins_wch.c,v 1.10 2017/01/30 14:55:58 roy Exp $"); #endif /* not lint */ #include <string.h> @@ -146,7 +146,7 @@ wins_wch(WINDOW *win, const cchar_t *wch } return OK; case L'\t': - tabsize = win->screen->TABSIZE; + tabsize = _reentrant ? win->screen->TABSIZE : TABSIZE; if (wins_nwstr(win, ws, min(win->maxx - x, tabsize - (x % tabsize))) == ERR) return ERR; Index: src/lib/libcurses/ins_wstr.c diff -u src/lib/libcurses/ins_wstr.c:1.9 src/lib/libcurses/ins_wstr.c:1.10 --- src/lib/libcurses/ins_wstr.c:1.9 Mon Jan 2 10:28:34 2017 +++ src/lib/libcurses/ins_wstr.c Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: ins_wstr.c,v 1.9 2017/01/02 10:28:34 roy Exp $ */ +/* $NetBSD: ins_wstr.c,v 1.10 2017/01/30 14:55:58 roy Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ins_wstr.c,v 1.9 2017/01/02 10:28:34 roy Exp $"); +__RCSID("$NetBSD: ins_wstr.c,v 1.10 2017/01/30 14:55:58 roy Exp $"); #endif /* not lint */ #include <string.h> @@ -266,7 +266,8 @@ wins_nwstr(WINDOW *win, const wchar_t *w } continue; case L'\t': - tabsize = win->screen->TABSIZE; + tabsize = _reentrant ? + win->screen->TABSIZE : TABSIZE; if (wins_nwstr(win, ws, min(win->maxx - x, tabsize - (x % tabsize))) == ERR) Index: src/lib/libcurses/setterm.c diff -u src/lib/libcurses/setterm.c:1.61 src/lib/libcurses/setterm.c:1.62 --- src/lib/libcurses/setterm.c:1.61 Wed Jan 11 20:43:03 2017 +++ src/lib/libcurses/setterm.c Mon Jan 30 14:55:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: setterm.c,v 1.61 2017/01/11 20:43:03 roy Exp $ */ +/* $NetBSD: setterm.c,v 1.62 2017/01/30 14:55:58 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)setterm.c 8.8 (Berkeley) 10/25/94"; #else -__RCSID("$NetBSD: setterm.c,v 1.61 2017/01/11 20:43:03 roy Exp $"); +__RCSID("$NetBSD: setterm.c,v 1.62 2017/01/30 14:55:58 roy Exp $"); #endif #endif /* not lint */ @@ -404,6 +404,7 @@ set_tabsize(int tabsize) { _cursesi_screen->TABSIZE = tabsize; + _reentrant = true; TABSIZE = tabsize; return OK; }