Skip to content

Commit 7793462

Browse files
authored
libusb: fix enumerating device path w/o root access (signal11#442)
1 parent c3ae3d0 commit 7793462

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

libusb/hid.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ static void invasive_fill_device_info_usage(struct hid_device_info *cur_dev, lib
629629
* Create and fill up most of hid_device_info fields.
630630
* usage_page/usage is not filled up.
631631
*/
632-
static struct hid_device_info * create_device_info_for_device(libusb_device_handle *handle, struct libusb_device_descriptor *desc, int config_number, int interface_num)
632+
static struct hid_device_info * create_device_info_for_device(libusb_device *device, libusb_device_handle *handle, struct libusb_device_descriptor *desc, int config_number, int interface_num)
633633
{
634634
struct hid_device_info *cur_dev = calloc(1, sizeof(struct hid_device_info));
635635
if (cur_dev == NULL) {
@@ -644,12 +644,12 @@ static struct hid_device_info * create_device_info_for_device(libusb_device_hand
644644

645645
cur_dev->interface_number = interface_num;
646646

647+
cur_dev->path = make_path(device, config_number, interface_num);
648+
647649
if (!handle) {
648650
return cur_dev;
649651
}
650652

651-
cur_dev->path = make_path(libusb_get_device(handle), config_number, interface_num);
652-
653653
if (desc->iSerialNumber > 0)
654654
cur_dev->serial_number = get_usb_string(handle, desc->iSerialNumber);
655655

@@ -720,7 +720,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
720720
}
721721
#endif
722722

723-
tmp = create_device_info_for_device(handle, &desc, conf_desc->bConfigurationValue, intf_desc->bInterfaceNumber);
723+
tmp = create_device_info_for_device(dev, handle, &desc, conf_desc->bConfigurationValue, intf_desc->bInterfaceNumber);
724724
if (tmp) {
725725
#ifdef INVASIVE_GET_USAGE
726726
/* TODO: have a runtime check for this section. */
@@ -1515,9 +1515,10 @@ int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *dev, wchar_t *s
15151515
HID_API_EXPORT struct hid_device_info *HID_API_CALL hid_get_device_info(hid_device *dev) {
15161516
if (!dev->device_info) {
15171517
struct libusb_device_descriptor desc;
1518-
libusb_get_device_descriptor(libusb_get_device(dev->device_handle), &desc);
1518+
libusb_device *usb_device = libusb_get_device(dev->device_handle);
1519+
libusb_get_device_descriptor(usb_device, &desc);
15191520

1520-
dev->device_info = create_device_info_for_device(dev->device_handle, &desc, dev->config_number, dev->interface);
1521+
dev->device_info = create_device_info_for_device(usb_device, dev->device_handle, &desc, dev->config_number, dev->interface);
15211522
// device error already set by create_device_info_for_device, if any
15221523

15231524
if (dev->device_info) {

0 commit comments

Comments
 (0)