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) {
/*