[PATCH v3 1/5] winebus.sys: Handle linux input event device via udev
Sebastian Lackner
sebastian at fds-team.de
Wed Mar 1 10:53:40 CST 2017
I haven't done a full review yet, but here are some first comments.
On 01.03.2017 17:16, Aric Stewart wrote:
> + subsystem = udev_device_get_subsystem(dev);
> usbdev = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device");
> if (usbdev)
> {
> + #ifdef HAS_PROPER_INPUT_HEADER
> + const platform_vtbl *other_vtbl = NULL;
> + DEVICE_OBJECT *dup = NULL;
> + if (strcmp(subsystem, "hidraw") == 0)
> + other_vtbl = &lnxev_vtbl;
> + else if (strcmp(subsystem, "input") == 0)
> + other_vtbl = &hidraw_vtbl;
> +
> + if (other_vtbl)
> + dup = bus_enumerate_hid_devices(other_vtbl, check_same_device, dev);
Shouldn't we have some preference of either hidraw or linux event devices?
Otherwise this could lead to different results in each run.
> }
>
> +DEVICE_OBJECT* bus_enumerate_hid_devices(const platform_vtbl *vtbl, enum_func function, void* context)
> +{
> + struct pnp_device *dev;
> + DEVICE_OBJECT *ret = NULL;
> +
> + TRACE("(%p)\n", vtbl);
> +
> + EnterCriticalSection(&device_list_cs);
> + LIST_FOR_EACH_ENTRY(dev, &pnp_devset, struct pnp_device, entry)
> + {
> + struct device_extension *ext = (struct device_extension *)dev->device->DeviceExtension;
> + if (ext->vtbl != vtbl) continue;
> + if (function(dev->device, context) == 0)
> + ret = dev->device;
> + break;
This is wrong and will always abort after the first function call.
> + }
> + LeaveCriticalSection(&device_list_cs);
> + return ret;
> +}
> +
More information about the wine-devel
mailing list