summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2020-06-08 14:32:16 +0200
committerTormod Volden <debian.tormod@gmail.com>2021-11-07 12:58:15 +0100
commit7b342030d293019696ff536a95105c654167461a (patch)
tree16d98b15a4e6d4810fe541623feee0e1819e191e
parent3178abb79093231f46d7fa544335a58ddd58a324 (diff)
downloadlibusb-7b342030d293019696ff536a95105c654167461a.tar.gz
Windows: Fix timeouts if only endpoint 0 exists
The default timeouts of 5 seconds used by WinUSB are cleared in configure_endpoints(). This was not called if not at least one extra endpoint apart from endpoint 0 existed, so that in those cases the default timeout of 5 seconds remained in place. Fix this by calling configure_endpoints, even if no interface specific endpoints were found, so that it can configure endpoint 0. Closes #963 Signed-off-by: Julian Scheel <julian@jusst.de> [Tormod: Refactored to reduce duplicated code] Signed-off-by: Tormod Volden <debian.tormod@gmail.com>
-rw-r--r--libusb/os/windows_winusb.c26
-rw-r--r--libusb/version_nano.h2
2 files changed, 12 insertions, 16 deletions
diff --git a/libusb/os/windows_winusb.c b/libusb/os/windows_winusb.c
index 5c860ea..df17d81 100644
--- a/libusb/os/windows_winusb.c
+++ b/libusb/os/windows_winusb.c
@@ -528,21 +528,17 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, uin
if (if_desc->bNumEndpoints == 0) {
usbi_dbg(HANDLE_CTX(dev_handle), "no endpoints found for interface %u", iface);
- libusb_free_config_descriptor(conf_desc);
- priv->usb_interface[iface].current_altsetting = altsetting;
- return LIBUSB_SUCCESS;
- }
-
- priv->usb_interface[iface].endpoint = malloc(if_desc->bNumEndpoints);
- if (priv->usb_interface[iface].endpoint == NULL) {
- libusb_free_config_descriptor(conf_desc);
- return LIBUSB_ERROR_NO_MEM;
- }
-
- priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints;
- for (i = 0; i < if_desc->bNumEndpoints; i++) {
- priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress;
- usbi_dbg(HANDLE_CTX(dev_handle), "(re)assigned endpoint %02X to interface %u", priv->usb_interface[iface].endpoint[i], iface);
+ } else {
+ priv->usb_interface[iface].endpoint = malloc(if_desc->bNumEndpoints);
+ if (priv->usb_interface[iface].endpoint == NULL) {
+ libusb_free_config_descriptor(conf_desc);
+ return LIBUSB_ERROR_NO_MEM;
+ }
+ priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints;
+ for (i = 0; i < if_desc->bNumEndpoints; i++) {
+ priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress;
+ usbi_dbg(HANDLE_CTX(dev_handle), "(re)assigned endpoint %02X to interface %u", priv->usb_interface[iface].endpoint[i], iface);
+ }
}
libusb_free_config_descriptor(conf_desc);
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index c65a80b..838c0a6 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11672
+#define LIBUSB_NANO 11673