Re: kbd set error message

2022-05-05 Thread Alexander Bluhm
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, ) == -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)



kbd set error message

2022-04-17 Thread Alexander Bluhm
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, ) == -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)