Module Name:    src
Committed By:   mlelstv
Date:           Fri Mar 29 07:47:33 UTC 2019

Modified Files:
        src/usr.sbin/wsmuxctl: wsmuxctl.c

Log Message:
Add support for WSMUX_BELL, also avoid crashes when the kernel returns
unknown device types.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/wsmuxctl/wsmuxctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/wsmuxctl/wsmuxctl.c
diff -u src/usr.sbin/wsmuxctl/wsmuxctl.c:1.12 src/usr.sbin/wsmuxctl/wsmuxctl.c:1.13
--- src/usr.sbin/wsmuxctl/wsmuxctl.c:1.12	Sun Feb  3 03:19:31 2019
+++ src/usr.sbin/wsmuxctl/wsmuxctl.c	Fri Mar 29 07:47:33 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: wsmuxctl.c,v 1.12 2019/02/03 03:19:31 mrg Exp $ */
+/* $NetBSD: wsmuxctl.c,v 1.13 2019/03/29 07:47:33 mlelstv Exp $ */
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -45,8 +45,6 @@ __dead static void usage(void);
 
 static const char *ctlpath = "/dev/wsmuxctl";
 
-static const char *devnames[] = { "?", "wsmouse", "wskbd", "wsmux" };
-
 static void
 usage(void)
 {
@@ -71,6 +69,10 @@ parsedev(const char *dev, struct wsmux_d
 		mdev->type = WSMUX_MUX;
 		return;
 	}
+	if (sscanf(dev, "wsbell%d", &mdev->idx) == 1) {
+		mdev->type = WSMUX_BELL;
+		return;
+	}
 	errx(1, "bad device: `%s', use wsmouse, wskdb, or wsmux", dev);
 }
 
@@ -80,12 +82,19 @@ listdevs(int fd, int rec, int ind)
 	int i, rfd;
 	char buf[100];
 	struct wsmux_device_list devs;
+	const char *name;
 
 	if (ioctl(fd, WSMUXIO_LIST_DEVICES, &devs) < 0)
 		err(1, "WSMUXIO_LIST_DEVICES");
 	for (i = 0; i < devs.ndevices; i++) {
-		printf("%*s%s%d\n", ind, "", devnames[devs.devices[i].type],
-		       devs.devices[i].idx);
+		switch (devs.devices[i].type) {
+		case WSMUX_MOUSE:   name = "wsmouse"; break;
+		case WSMUX_KBD:     name = "wskbd"; break;
+		case WSMUX_MUX:     name = "wsmux"; break;
+		case WSMUX_BELL:    name = "wsbell"; break;
+		default:            name = "?"; break;
+		}
+		printf("%*s%s%d\n", ind, "", name, devs.devices[i].idx);
 		if (rec && devs.devices[i].type == WSMUX_MUX) {
 			snprintf(buf, sizeof(buf), "%s%d", ctlpath,
 			    devs.devices[i].idx);

Reply via email to