summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPete Batard <pete@akeo.ie>2013-02-21 00:11:37 +0000
committerPete Batard <pete@akeo.ie>2013-02-21 00:11:37 +0000
commit4a924eb1c4a302426efdde7196b299e045f4ff96 (patch)
tree670749ba384230a20278c73bc8964badda4f52b4
parenteea7ebe6ca5645bc3a80b8f3c9a1627cf6884ee9 (diff)
downloadlibusb-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.c8
-rw-r--r--libusb/version_nano.h2
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