diff options
Diffstat (limited to 'LUFA/Drivers/USB')
-rw-r--r-- | LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h index 87610c7ba..5aa8f3cfa 100644 --- a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h +++ b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h @@ -257,16 +257,6 @@ uint8_t USB_GetNextDescriptorComp(uint16_t* BytesRem, void** const CurrConfigLoc, ConfigComparatorPtr_t const ComparatorRoutine); /* Inline Functions: */ - #if !defined(__DOXYGEN__) - static inline void USB_GetNextDescriptorST(uint16_t* const BytesRem, uint8_t** CurrConfigLoc) - { - uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size; - - *CurrConfigLoc += CurrDescriptorSize; - *BytesRem -= CurrDescriptorSize; - } - #endif - /** Skips over the current sub-descriptor inside the configuration descriptor, so that the pointer then points to the next sub-descriptor. The bytes remaining value is automatically decremented. * @@ -277,12 +267,10 @@ ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2); static inline void USB_GetNextDescriptor(uint16_t* const BytesRem, void** CurrConfigLoc) { - /* Horrible workaround for a bug in GCC - in some circumstances, the code generated for the strongly-typed - * (uint8_t**) cast to avoid void pointer arithmetic (which is not allowed in C++) causes incorrect code to - * be generated. Performing the cast and using a secondary inline routine show here seems to avoid the - * problem. - */ - USB_GetNextDescriptorST(BytesRem, (uint8_t**)CurrConfigLoc); + uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size; + + *CurrConfigLoc += ((uint8_t*)*CurrConfigLoc) + CurrDescriptorSize; + *BytesRem -= CurrDescriptorSize; } /* Disable C linkage for C++ Compilers: */ |