usbd.sys: Fix the test for type control endpoints.

Francois Gouget fgouget at free.fr
Thu Jun 24 03:17:22 CDT 2010


The value of USB_ENDPOINT_TYPE_CONTROL is 0 so and-ing with it makes no sense.
---
 dlls/usbd.sys/usbd.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

We had:
if (endpointDescriptor->bmAttributes & USB_ENDPOINT_TYPE_CONTROL)

But USB_ENDPOINT_TYPE_CONTROL is 0 so this line did not make sense. We 
have the chance to have a mask so I converted this to a switch. I didn't 
test this fix though so it could wait until after 1.2.


diff --git a/dlls/usbd.sys/usbd.c b/dlls/usbd.sys/usbd.c
index 4727512..80fd02e 100644
--- a/dlls/usbd.sys/usbd.c
+++ b/dlls/usbd.sys/usbd.c
@@ -125,14 +125,21 @@ PURB WINAPI USBD_CreateConfigurationRequestEx(
                 interfaceInfo->Pipes[i].MaximumPacketSize = endpointDescriptor->wMaxPacketSize;
                 interfaceInfo->Pipes[i].EndpointAddress = endpointDescriptor->bEndpointAddress;
                 interfaceInfo->Pipes[i].Interval = endpointDescriptor->bInterval;
-                if (endpointDescriptor->bmAttributes & USB_ENDPOINT_TYPE_CONTROL)
+                switch (endpointDescriptor->bmAttributes & USB_ENDPOINT_TYPE_MASK)
+                {
+                case USB_ENDPOINT_TYPE_CONTROL:
                     interfaceInfo->Pipes[i].PipeType = UsbdPipeTypeControl;
-                else if (endpointDescriptor->bmAttributes & USB_ENDPOINT_TYPE_BULK)
+                    break;
+                case USB_ENDPOINT_TYPE_BULK:
                     interfaceInfo->Pipes[i].PipeType = UsbdPipeTypeBulk;
-                else if (endpointDescriptor->bmAttributes & USB_ENDPOINT_TYPE_INTERRUPT)
+                    break;
+                case USB_ENDPOINT_TYPE_INTERRUPT:
                     interfaceInfo->Pipes[i].PipeType = UsbdPipeTypeInterrupt;
-                else if (endpointDescriptor->bmAttributes & USB_ENDPOINT_TYPE_ISOCHRONOUS)
+                    break;
+                case USB_ENDPOINT_TYPE_ISOCHRONOUS:
                     interfaceInfo->Pipes[i].PipeType = UsbdPipeTypeIsochronous;
+                    break;
+                }
                 endpointDescriptor = (PUSB_ENDPOINT_DESCRIPTOR) USBD_ParseDescriptors(
                     ConfigurationDescriptor, ConfigurationDescriptor->wTotalLength,
                     endpointDescriptor + 1, USB_ENDPOINT_DESCRIPTOR_TYPE );
-- 
1.7.1




More information about the wine-patches mailing list