Module Name:    src
Committed By:   mrg
Date:           Tue Sep 18 06:19:28 UTC 2018

Modified Files:
        src/sys/dev/wscons: wsdisplay.c wskbd.c

Log Message:
fix wsdisplay/wskbd and cngetc() return value issues:
- return -1 for error / no character
- allow 0 as a character

cngetc() itself considers any value >= 0 valid, and this matches
the usage in other drivers that return -1 for "not data", vs
polling until something arrives.

removes ^G from spewing out the askname/etc prompts when no key
has been pressed (these come from cngetsn(), ignoring unknown
non printable characters.)

from @skrll with help from @mlelstv.


To generate a diff of this commit:
cvs rdiff -u -r1.145 -r1.146 src/sys/dev/wscons/wsdisplay.c
cvs rdiff -u -r1.141 -r1.142 src/sys/dev/wscons/wskbd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/wscons/wsdisplay.c
diff -u src/sys/dev/wscons/wsdisplay.c:1.145 src/sys/dev/wscons/wsdisplay.c:1.146
--- src/sys/dev/wscons/wsdisplay.c:1.145	Mon Dec 18 22:44:30 2017
+++ src/sys/dev/wscons/wsdisplay.c	Tue Sep 18 06:19:28 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: wsdisplay.c,v 1.145 2017/12/18 22:44:30 christos Exp $ */
+/* $NetBSD: wsdisplay.c,v 1.146 2018/09/18 06:19:28 mrg Exp $ */
 
 /*
  * Copyright (c) 1996, 1997 Christopher G. Demetriou.  All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wsdisplay.c,v 1.145 2017/12/18 22:44:30 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wsdisplay.c,v 1.146 2018/09/18 06:19:28 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_wsdisplay_compat.h"
@@ -2303,19 +2303,18 @@ wsdisplay_getc(dev_t dev)
 
 	if (wsdisplay_cons_kbd_getc) {
 		c = wsdisplay_cons_kbd_getc(wsdisplay_cons.cn_dev);
-		if (c > 0)
+		if (c >= 0)
 			return c;
 	}
 
 #ifdef WSDISPLAY_MULTICONS
 	if (wsdisplay_ocn && wsdisplay_ocn->cn_getc) {
 		c = wsdisplay_ocn->cn_getc(wsdisplay_ocn->cn_dev);
-		if (c > 0)
+		if (c >= 0)
 			return c;
 	}
 #endif
-	/* panic? */
-	return (0);
+	return -1;
 }
 
 static void

Index: src/sys/dev/wscons/wskbd.c
diff -u src/sys/dev/wscons/wskbd.c:1.141 src/sys/dev/wscons/wskbd.c:1.142
--- src/sys/dev/wscons/wskbd.c:1.141	Mon Dec 18 18:57:21 2017
+++ src/sys/dev/wscons/wskbd.c	Tue Sep 18 06:19:28 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: wskbd.c,v 1.141 2017/12/18 18:57:21 jmcneill Exp $ */
+/* $NetBSD: wskbd.c,v 1.142 2018/09/18 06:19:28 mrg Exp $ */
 
 /*
  * Copyright (c) 1996, 1997 Christopher G. Demetriou.  All rights reserved.
@@ -105,7 +105,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wskbd.c,v 1.141 2017/12/18 18:57:21 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wskbd.c,v 1.142 2018/09/18 06:19:28 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -1385,11 +1385,11 @@ wskbd_cngetc(dev_t dev)
 	keysym_t ks;
 
 	if (!wskbd_console_initted)
-		return 0;
+		return -1;
 
 	if (wskbd_console_device != NULL &&
 	    !wskbd_console_device->sc_translating)
-		return 0;
+		return -1;
 
 	for(;;) {
 		if (num-- > 0) {
@@ -1402,7 +1402,7 @@ wskbd_cngetc(dev_t dev)
 				 &type, &data);
 			if (type == 0) {
 				/* No data returned */
-				return 0;
+				return -1;
 			}
 			if (type == WSCONS_EVENT_ASCII) {
 				/*

Reply via email to