Correct MCU/Board relationship
[pub/lufa.git] / LUFA / Drivers / USB / Class / Host / RNDISClassHost.c
index 9072d3a..3981d7a 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2014.
+     Copyright (C) Dean Camera, 2021.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2021  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -114,13 +114,13 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
        RNDISInterfaceInfo->Config.NotificationPipe.Type = EP_TYPE_INTERRUPT;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.DataINPipe, 1)))
-         return false;
+         return RNDIS_ENUMERROR_PipeConfigurationFailed;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.DataOUTPipe, 1)))
-         return false;
+         return RNDIS_ENUMERROR_PipeConfigurationFailed;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.NotificationPipe, 1)))
-         return false;
+         return RNDIS_ENUMERROR_PipeConfigurationFailed;
 
        RNDISInterfaceInfo->State.ControlInterfaceNumber = RNDISControlInterface->InterfaceNumber;
        RNDISInterfaceInfo->State.IsActive = true;
@@ -394,6 +394,7 @@ bool RNDIS_Host_IsPacketReceived(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfac
 
 uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceInfo,
                               void* Buffer,
+                              const uint16_t BufferSize,
                               uint16_t* const PacketLength)
 {
        uint8_t ErrorCode;
@@ -422,13 +423,20 @@ uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
                return ErrorCode;
        }
 
-       *PacketLength = (uint16_t)le32_to_cpu(DeviceMessage.DataLength);
-
        Pipe_Discard_Stream(le32_to_cpu(DeviceMessage.DataOffset) -
                            (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)),
                            NULL);
 
+       const size_t ExpectedLength = (uint16_t)le32_to_cpu(DeviceMessage.DataLength);
+
+       if (ExpectedLength > BufferSize)
+               *PacketLength = BufferSize;
+       else
+               *PacketLength = ExpectedLength;
+
        Pipe_Read_Stream_LE(Buffer, *PacketLength, NULL);
+       if (ExpectedLength > BufferSize)
+               Pipe_Discard_Stream(ExpectedLength - BufferSize, NULL);
 
        if (!(Pipe_BytesInPipe()))
          Pipe_ClearIN();