anyone?
On Sun, Apr 17, 2022 at 08:20:40PM +0200, Alexander Bluhm wrote:
> Hi,
>
> After fixing the kbd -l error handling, kbd set needs the same diff.
> While there, shorten long lines and avoid v--; v++; logic.
>
> $ ./kbd de
> kbd: /dev/wskbd0: Permission denied
>
> ok?
>
> bluhm
>
> Index: sbin/kbd/kbd_wscons.c
> ===
> RCS file: /data/mirror/openbsd/cvs/src/sbin/kbd/kbd_wscons.c,v
> retrieving revision 1.35
> diff -u -p -r1.35 kbd_wscons.c
> --- sbin/kbd/kbd_wscons.c 17 Apr 2022 17:33:50 - 1.35
> +++ sbin/kbd/kbd_wscons.c 17 Apr 2022 17:39:56 -
> @@ -232,7 +232,7 @@ void
> kbd_set(char *name, int verbose)
> {
> charbuf[LINE_MAX], *c, *b, device[sizeof "/dev/wskbd00"];
> - int map = 0, v, i, fd;
> + int map = 0, v, i, fd, error = 0;
> struct nameint *n;
>
> c = name;
> @@ -271,19 +271,29 @@ kbd_set(char *name, int verbose)
> fd = open(device, O_WRONLY);
> if (fd == -1)
> fd = open(device, O_RDONLY);
> - if (fd >= 0) {
> + if (fd == -1) {
> + /* remember the first error number */
> + if (error == 0)
> + error = errno;
> + } else {
> + /* at least one success, do not print error */
> + error = -1;
> +
> if (ioctl(fd, WSKBDIO_SETENCODING, &map) == -1) {
> - if (errno == EINVAL) {
> - fprintf(stderr,
> - "%s: unsupported encoding %s on
> %s\n",
> - __progname, name, device);
> - } else
> - err(1, "WSKBDIO_SETENCODING: %s",
> device);
> - v--;
> - }
> - v++;
> + if (errno != EINVAL)
> + err(1, "WSKBDIO_SETENCODING %s",
> + device);
> + fprintf(stderr,
> + "%s: unsupported encoding %s on %s\n",
> + __progname, name, device);
> + } else
> + v++;
> close(fd);
> }
> + }
> + if (error > 0) {
> + errno = error;
> + err(1, "/dev/wskbd0");
> }
>
> if (verbose && v > 0)