[PATCH libinput] udev: prepend the libinput group with the product string

Peter Hutterer peter.hutterer at who-t.net
Sun Jun 21 19:03:10 PDT 2015


Multiple devices plugged into the same USB hub have the same
PHYS path and are assigned to the same group.

Prepend the content of the PRODUCT env to the phys path, this at least ensures
that different devices are never grouped together.

https://bugs.freedesktop.org/show_bug.cgi?id=89802

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 udev/libinput-device-group.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/udev/libinput-device-group.c b/udev/libinput-device-group.c
index 50bfbe0..adbd6b7 100644
--- a/udev/libinput-device-group.c
+++ b/udev/libinput-device-group.c
@@ -10,8 +10,9 @@ int main(int argc, char **argv)
 	struct udev_device *device = NULL;
 	const char *syspath,
 	           *phys = NULL;
-	char *group,
-	     *str;
+	const char *product;
+	char group[1024];
+	char *str;
 
 	if (argc != 2)
 		return 1;
@@ -45,9 +46,12 @@ int main(int argc, char **argv)
 	if (!phys)
 		goto out;
 
-	group = strdup(phys);
-	if (!group)
-		goto out;
+	/* udev sets PRODUCT on the same device we find PHYS on, let's rely
+	   on that*/
+	product = udev_device_get_property_value(device, "PRODUCT");
+	if (!product)
+		product = "";
+	snprintf(group, sizeof(group), "%s:%s", product, phys);
 
 	str = strstr(group, "/input");
 	if (str)
@@ -64,7 +68,6 @@ int main(int argc, char **argv)
 		*str = '\0';
 
 	printf("%s\n", group);
-	free(group);
 
 	rc = 0;
 out:
-- 
2.4.3



More information about the wayland-devel mailing list