diff options
author | Pete Batard <pete@akeo.ie> | 2013-02-21 00:11:37 +0000 |
---|---|---|
committer | Pete Batard <pete@akeo.ie> | 2013-02-21 00:11:37 +0000 |
commit | 4a924eb1c4a302426efdde7196b299e045f4ff96 (patch) | |
tree | 670749ba384230a20278c73bc8964badda4f52b4 | |
parent | eea7ebe6ca5645bc3a80b8f3c9a1627cf6884ee9 (diff) | |
download | libusb-4a924eb1c4a302426efdde7196b299e045f4ff96.tar.gz |
Windows: Don't duplicate paths for HID interfaces
* This caused the many_device_lists to fail after 32 iterations
* Closes #69
-rw-r--r-- | libusb/os/windows_usb.c | 8 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c index f134431..ffcfc01 100644 --- a/libusb/os/windows_usb.c +++ b/libusb/os/windows_usb.c @@ -1286,6 +1286,7 @@ static int set_composite_interface(struct libusb_context* ctx, struct libusb_dev static int set_hid_interface(struct libusb_context* ctx, struct libusb_device* dev, char* dev_interface_path) { + int i; struct windows_device_priv *priv = _device_priv(dev); if (priv->hid == NULL) { @@ -1296,8 +1297,11 @@ static int set_hid_interface(struct libusb_context* ctx, struct libusb_device* d usbi_err(ctx, "program assertion failed: max USB interfaces reached for HID device"); return LIBUSB_ERROR_NO_DEVICE; } - if (priv->usb_interface[priv->hid->nb_interfaces].path != NULL) { - safe_free(priv->usb_interface[priv->hid->nb_interfaces].path); + for (i=0; i<priv->hid->nb_interfaces; i++) { + if (safe_strcmp(priv->usb_interface[i].path, dev_interface_path) == 0) { + usbi_dbg("interface[%d] already set to %s", i, dev_interface_path); + return LIBUSB_SUCCESS; + } } priv->usb_interface[priv->hid->nb_interfaces].path = dev_interface_path; diff --git a/libusb/version_nano.h b/libusb/version_nano.h index abfd4b3..62b3532 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 10616 +#define LIBUSB_NANO 10617 |