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

Hans de Goede hdegoede at redhat.com
Mon Jun 22 02:03:21 PDT 2015


Hi,

On 22-06-15 04:03, Peter Hutterer wrote:
> 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>

LGTM: Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


> ---
>   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:
>


More information about the wayland-devel mailing list