/** @file\r
Network library functions providing net buffer operation support.\r
\r
-Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
**/\r
\r
#include <Uefi.h>\r
\r
NET_CHECK_SIGNATURE (Nbuf, NET_BUF_SIGNATURE);\r
\r
+ if (Len == 0 || Nbuf->TotalSize == 0) {\r
+ return 0;\r
+ }\r
+\r
if (Len > Nbuf->TotalSize) {\r
Len = Nbuf->TotalSize;\r
}\r
\r
Sum = 0;\r
\r
+ //\r
+ // Add left-over byte, if any\r
+ //\r
+ if (Len % 2 != 0) {\r
+ Sum += *(Bulk + Len - 1);\r
+ }\r
+\r
while (Len > 1) {\r
Sum += *(UINT16 *) Bulk;\r
Bulk += 2;\r
Len -= 2;\r
}\r
\r
- //\r
- // Add left-over byte, if any\r
- //\r
- if (Len > 0) {\r
- Sum += *(UINT8 *) Bulk;\r
- }\r
-\r
//\r
// Fold 32-bit sum to 16 bits\r
//\r
}\r
\r
/**\r
- The function frees the net buffer which allocated by the IP protocol. It releases \r
- only the net buffer and doesn't call the external free function. \r
+ The function frees the net buffer which allocated by the IP protocol. It releases\r
+ only the net buffer and doesn't call the external free function.\r
\r
- This function should be called after finishing the process of mIpSec->ProcessExt() \r
- for outbound traffic. The (EFI_IPSEC2_PROTOCOL)->ProcessExt() allocates a new \r
+ This function should be called after finishing the process of mIpSec->ProcessExt()\r
+ for outbound traffic. The (EFI_IPSEC2_PROTOCOL)->ProcessExt() allocates a new\r
buffer for the ESP, so there needs a function to free the old net buffer.\r
\r
@param[in] Nbuf The network buffer to be freed.\r
Nbuf->RefCnt--;\r
\r
if (Nbuf->RefCnt == 0) {\r
- \r
+\r
//\r
// Update Vector only when NBuf is to be released. That is,\r
// all the sharing of Nbuf increse Vector's RefCnt by one\r
}\r
\r
//\r
- // If NET_VECTOR_OWN_FIRST is set, release the first block since it is \r
+ // If NET_VECTOR_OWN_FIRST is set, release the first block since it is\r
// allocated by us\r
//\r
if ((Nbuf->Vector->Flag & NET_VECTOR_OWN_FIRST) != 0) {\r
FreePool (Nbuf->Vector->Block[0].Bulk);\r
}\r
FreePool (Nbuf->Vector);\r
- FreePool (Nbuf); \r
- } \r
+ FreePool (Nbuf);\r
+ }\r
}\r
\r