descriptor.c: AlternateSettings are related by InterfaceNumber
authorHans de Goede <hdegoede@redhat.com>
Fri, 24 May 2013 12:03:54 +0000 (14:03 +0200)
committerHans de Goede <hdegoede@redhat.com>
Thu, 30 May 2013 12:20:08 +0000 (14:20 +0200)
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>
libusb/descriptor.c
libusb/version_nano.h

index ea4ad39..b53df77 100644 (file)
@@ -199,6 +199,7 @@ static int parse_interface(libusb_context *ctx,
        int len;
        int r;
        int parsed = 0;
+       int interface_number = -1;
        size_t tmp;
        struct usb_descriptor_header header;
        struct libusb_interface_descriptor *ifp;
@@ -247,6 +248,9 @@ static int parse_interface(libusb_context *ctx,
                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;
@@ -326,7 +330,7 @@ static int parse_interface(libusb_context *ctx,
                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;
        }
 
index ea3dee4..27ee56f 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 10720
+#define LIBUSB_NANO 10721