A block of AlternateSettings for a certain InterfaceNumber does not necessarily
start with AlternateSetting 0, so check Interface Descriptors belong to
each other by using InterfaceNumber, as specified in the spec.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
int len;
int r;
int parsed = 0;
+ int interface_number = -1;
size_t tmp;
struct usb_descriptor_header header;
struct libusb_interface_descriptor *ifp;
ifp->extra_length = 0;
ifp->endpoint = NULL;
+ if (interface_number == -1)
+ interface_number = ifp->bInterfaceNumber;
+
/* Skip over the interface */
buffer += ifp->bLength;
parsed += ifp->bLength;
ifp = (struct libusb_interface_descriptor *) buffer;
if (size < LIBUSB_DT_INTERFACE_SIZE ||
ifp->bDescriptorType != LIBUSB_DT_INTERFACE ||
- !ifp->bAlternateSetting)
+ ifp->bInterfaceNumber != interface_number)
return parsed;
}
-#define LIBUSB_NANO 10720
+#define LIBUSB_NANO 10721