Module Name:    src
Committed By:   blymn
Date:           Fri Nov 16 10:12:00 UTC 2018

Modified Files:
        src/lib/libcurses: curses_private.h fileio.h screen.c shlib_version
            tty.c

Log Message:
Fix for PR lib/52063
Many thanks to  Onno van der Linden ([email protected]) for providing
the bulk of the patch that fixes the issue.


To generate a diff of this commit:
cvs rdiff -u -r1.67 -r1.68 src/lib/libcurses/curses_private.h
cvs rdiff -u -r1.4 -r1.5 src/lib/libcurses/fileio.h
cvs rdiff -u -r1.34 -r1.35 src/lib/libcurses/screen.c
cvs rdiff -u -r1.42 -r1.43 src/lib/libcurses/shlib_version
cvs rdiff -u -r1.47 -r1.48 src/lib/libcurses/tty.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_private.h
diff -u src/lib/libcurses/curses_private.h:1.67 src/lib/libcurses/curses_private.h:1.68
--- src/lib/libcurses/curses_private.h:1.67	Mon Oct 29 00:25:20 2018
+++ src/lib/libcurses/curses_private.h	Fri Nov 16 10:12:00 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: curses_private.h,v 1.67 2018/10/29 00:25:20 uwe Exp $	*/
+/*	$NetBSD: curses_private.h,v 1.68 2018/11/16 10:12:00 blymn Exp $	*/
 
 /*-
  * Copyright (c) 1998-2000 Brett Lymn
@@ -133,6 +133,7 @@ struct __window {		/* Window structure. 
 #define __ISDERWIN	0x00100000	/* "window" is derived from parent */
 #define __IMMEDOK	0x00200000	/* refreshed when changed */
 #define __SYNCOK	0x00400000	/* sync when changed */
+#define __HALFDELAY	0x00800000	/* In half delay mode */
 	unsigned int flags;
 	int	delay;			/* delay for getch() */
 	attr_t	wattr;			/* Character attributes */
@@ -278,7 +279,6 @@ struct __screen {
 	char padchar;
 	int endwin;
 	int notty;
-	int half_delay;
 	int resized;
 	wchar_t *unget_list;
 	int unget_len, unget_pos;

Index: src/lib/libcurses/fileio.h
diff -u src/lib/libcurses/fileio.h:1.4 src/lib/libcurses/fileio.h:1.5
--- src/lib/libcurses/fileio.h:1.4	Mon Jan  2 12:38:16 2017
+++ src/lib/libcurses/fileio.h	Fri Nov 16 10:12:00 2018
@@ -1,8 +1,8 @@
 /*
  * Do not edit!  Automatically generated file:
- *   from: NetBSD: shlib_version,v 1.41 2015/11/22 04:56:00 kamil Exp 
+ *   from: NetBSD: shlib_version,v 1.42 2017/01/02 12:38:16 roy Exp 
  *   by  : NetBSD: genfileioh.awk,v 1.2 2008/05/02 11:13:02 martin Exp 
  */
 
 #define CURSES_LIB_MAJOR 7
-#define CURSES_LIB_MINOR 1
+#define CURSES_LIB_MINOR 2

Index: src/lib/libcurses/screen.c
diff -u src/lib/libcurses/screen.c:1.34 src/lib/libcurses/screen.c:1.35
--- src/lib/libcurses/screen.c:1.34	Tue Oct  2 17:35:44 2018
+++ src/lib/libcurses/screen.c	Fri Nov 16 10:12:00 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: screen.c,v 1.34 2018/10/02 17:35:44 roy Exp $	*/
+/*	$NetBSD: screen.c,v 1.35 2018/11/16 10:12:00 blymn Exp $	*/
 
 /*
  * Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)screen.c	8.2 (blymn) 11/27/2001";
 #else
-__RCSID("$NetBSD: screen.c,v 1.34 2018/10/02 17:35:44 roy Exp $");
+__RCSID("$NetBSD: screen.c,v 1.35 2018/11/16 10:12:00 blymn Exp $");
 #endif
 #endif					/* not lint */
 
@@ -167,7 +167,6 @@ newterm(char *type, FILE *outfd, FILE *i
 	new_screen->__virtscr = NULL;
 	new_screen->curwin = 0;
 	new_screen->notty = FALSE;
-	new_screen->half_delay = FALSE;
 	new_screen->resized = 0;
 	new_screen->unget_len = 32;
 

Index: src/lib/libcurses/shlib_version
diff -u src/lib/libcurses/shlib_version:1.42 src/lib/libcurses/shlib_version:1.43
--- src/lib/libcurses/shlib_version:1.42	Mon Jan  2 12:38:16 2017
+++ src/lib/libcurses/shlib_version	Fri Nov 16 10:12:00 2018
@@ -1,8 +1,8 @@
-#	$NetBSD: shlib_version,v 1.42 2017/01/02 12:38:16 roy Exp $
+#	$NetBSD: shlib_version,v 1.43 2018/11/16 10:12:00 blymn Exp $
 #	Remember to update distrib/sets/lists/base/shl.* when changing
 #	Remember to run `make fileio.h` when changing
 #	Remember to increment the major numbers of libform, libmenu and
 #	libpanel when the libcurses major number increments.
 #
 major=7
-minor=1
+minor=2

Index: src/lib/libcurses/tty.c
diff -u src/lib/libcurses/tty.c:1.47 src/lib/libcurses/tty.c:1.48
--- src/lib/libcurses/tty.c:1.47	Thu Oct 18 07:53:13 2018
+++ src/lib/libcurses/tty.c	Fri Nov 16 10:12:00 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.c,v 1.47 2018/10/18 07:53:13 roy Exp $	*/
+/*	$NetBSD: tty.c,v 1.48 2018/11/16 10:12:00 blymn Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993, 1994
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)tty.c	8.6 (Berkeley) 1/10/95";
 #else
-__RCSID("$NetBSD: tty.c,v 1.47 2018/10/18 07:53:13 roy Exp $");
+__RCSID("$NetBSD: tty.c,v 1.48 2018/11/16 10:12:00 blymn Exp $");
 #endif
 #endif				/* not lint */
 
@@ -250,11 +250,11 @@ nocbreak(void)
 	if (_cursesi_screen->notty == TRUE)
 		return OK;
 	  /* if we were in halfdelay mode then nuke the timeout */
-	if ((_cursesi_screen->half_delay == TRUE) &&
+	if ((stdscr->flags & __HALFDELAY) &&
 	    (__notimeout() == ERR))
 		return ERR;
 
-	_cursesi_screen->half_delay = FALSE;
+	stdscr->flags &= ~__HALFDELAY;
 	_cursesi_screen->curt = _cursesi_screen->useraw ?
 		&_cursesi_screen->rawt : &_cursesi_screen->baset;
 	return tcsetattr(fileno(_cursesi_screen->infd), TCSASOFT | TCSADRAIN,
@@ -275,10 +275,12 @@ halfdelay(int duration)
 	if (cbreak() == ERR)
 		return ERR;
 
-	if (__timeout(duration) == ERR)
-		return ERR;
+	if (duration > 255)
+		stdscr->delay = 255;
+	else
+		stdscr->delay = duration;
 
-	_cursesi_screen->half_delay = TRUE;
+	stdscr->flags |= __HALFDELAY;
 	return OK;
 }
 

Reply via email to