-
- udev_enumerate_add_match_subsystem(enumerate, "usb");
-
- /* match all childs of the parent */
- util_strscpyl(str, sizeof(str), udev_device_get_sysname(udev_parent), "*", NULL);
- udev_enumerate_add_match_sysname(enumerate, str);
-
- /* match the specified interface */
- util_strscpy(str, sizeof(str), sibling_intf);
- str[2] = '\0';
- str[5] = '\0';
- str[8] = '\0';
- if (strcmp(str, "-1") != 0)
- udev_enumerate_add_match_sysattr(enumerate, "bInterfaceClass", str);
- if (strcmp(&str[3], "-1") != 0)
- udev_enumerate_add_match_sysattr(enumerate, "bInterfaceSubClass", &str[3]);
- if (strcmp(&str[6], "-1") != 0)
- udev_enumerate_add_match_sysattr(enumerate, "bInterfaceProtocol", &str[6]);
-
- udev_enumerate_scan_devices(enumerate);
- udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(enumerate)) {
- struct udev_device *udev_device;
-
- udev_device = udev_device_new_from_syspath(udev, udev_list_entry_get_name(entry));
- if (udev_device != NULL) {
- /* get the usb_device of the usb_interface we matched */
- udev_parent = udev_device_get_parent_with_subsystem_devtype(udev_device, "usb", "usb_device");
- if (udev_parent == NULL)
- continue;
- /* only look at the first matching device */
- dev = usb_device_open_from_udev(udev_parent);
- if (dev != NULL)
- handle = usb_open(dev);
- udev_device_unref(udev_device);
- break;
- }
-}
- udev_enumerate_unref(enumerate);
- return handle;