On Nov 4, 2016, at 12:26 AM, Ken Thomases ken@codeweavers.com wrote:
On Nov 3, 2016, at 7:15 AM, Aric Stewart aric@codeweavers.com wrote:
static int compare_platform_device(DEVICE_OBJECT *device, void *platform_dev) {
- return 0;
- IOHIDDeviceRef dev1 = *(IOHIDDeviceRef*)get_platform_private(device);
- IOHIDDeviceRef dev2 = (IOHIDDeviceRef)platform_dev;
- return dev1 == dev2;
The return value here has the reverse sense from how the caller interprets it. The caller, bus_find_hid_device(), interprets it like the result from strcmp() or memcmp(). A value of 0 means equal. Here, you're returning true (1) when the devices are equal.
By the way, I would recommend that you change this vtable entry to be equal_platform_device (or same_platform_device or matches_platform_device) and make its return type a boolean which is true when the devices are equal and false otherwise.
You can't really do the strcmp/memcmp scheme where < 0 means less than and > 0 means greater than. Put another way, in the current scheme there's no clear value to return for "not equal" when the bus can't support an ordering of devices.
-Ken