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