From: Julian Scheel Date: Mon, 8 Jun 2020 12:32:16 +0000 (+0200) Subject: Windows: Fix timeouts if only endpoint 0 exists X-Git-Tag: upstream/1.0.25~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7b342030d293019696ff536a95105c654167461a;hp=3178abb79093231f46d7fa544335a58ddd58a324;p=platform%2Fupstream%2Flibusb.git 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 [Tormod: Refactored to reduce duplicated code] Signed-off-by: Tormod Volden --- 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