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 -0000      1.35
> +++ sbin/kbd/kbd_wscons.c     17 Apr 2022 17:39:56 -0000
> @@ -232,7 +232,7 @@ void
>  kbd_set(char *name, int verbose)
>  {
>       char    buf[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)

Reply via email to