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