]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseMemoryLib/MemLibGeneric.c
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLib / MemLibGeneric.c
index 845016ded5af9a4e03d919529c8fbb7b31451c43..6a261ae34524c846e68130468c414e55221a8259 100644 (file)
@@ -6,14 +6,8 @@
     PeiMemoryLib\r
     UefiMemoryLib\r
 \r
-  Copyright (c) 2006 - 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) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -37,9 +31,9 @@ InternalMemSetMem16 (
   IN      UINT16                    Value\r
   )\r
 {\r
-  do {\r
-    ((UINT16*)Buffer)[--Length] = Value;\r
-  } while (Length != 0);\r
+  for (; Length != 0; Length--) {\r
+    ((UINT16*)Buffer)[Length - 1] = Value;\r
+  }\r
   return Buffer;\r
 }\r
 \r
@@ -61,9 +55,9 @@ InternalMemSetMem32 (
   IN      UINT32                    Value\r
   )\r
 {\r
-  do {\r
-    ((UINT32*)Buffer)[--Length] = Value;\r
-  } while (Length != 0);\r
+  for (; Length != 0; Length--) {\r
+    ((UINT32*)Buffer)[Length - 1] = Value;\r
+  }\r
   return Buffer;\r
 }\r
 \r
@@ -85,9 +79,9 @@ InternalMemSetMem64 (
   IN      UINT64                    Value\r
   )\r
 {\r
-  do {\r
-    ((UINT64*)Buffer)[--Length] = Value;\r
-  } while (Length != 0);\r
+  for (; Length != 0; Length--) {\r
+    ((UINT64*)Buffer)[Length - 1] = Value;\r
+  }\r
   return Buffer;\r
 }\r
 \r
@@ -162,9 +156,10 @@ InternalMemScanMem8 (
 \r
   Pointer = (CONST UINT8*)Buffer;\r
   do {\r
-    if (*(Pointer++) == Value) {\r
+    if (*Pointer == Value) {\r
       return Pointer;\r
     }\r
+    ++Pointer;\r
   } while (--Length != 0);\r
   return NULL;\r
 }\r
@@ -192,9 +187,10 @@ InternalMemScanMem16 (
 \r
   Pointer = (CONST UINT16*)Buffer;\r
   do {\r
-    if (*(Pointer++) == Value) {\r
+    if (*Pointer == Value) {\r
       return Pointer;\r
     }\r
+    ++Pointer;\r
   } while (--Length != 0);\r
   return NULL;\r
 }\r
@@ -222,9 +218,10 @@ InternalMemScanMem32 (
 \r
   Pointer = (CONST UINT32*)Buffer;\r
   do {\r
-    if (*(Pointer++) == Value) {\r
+    if (*Pointer == Value) {\r
       return Pointer;\r
     }\r
+    ++Pointer;\r
   } while (--Length != 0);\r
   return NULL;\r
 }\r
@@ -252,9 +249,39 @@ InternalMemScanMem64 (
 \r
   Pointer = (CONST UINT64*)Buffer;\r
   do {\r
-    if (*(Pointer++) == Value) {\r
+    if (*Pointer == Value) {\r
       return Pointer;\r
     }\r
+    ++Pointer;\r
   } while (--Length != 0);\r
   return NULL;\r
 }\r
+\r
+/**\r
+  Checks whether the contents of a buffer are all zeros.\r
+\r
+  @param  Buffer  The pointer to the buffer to be checked.\r
+  @param  Length  The size of the buffer (in bytes) to be checked.\r
+\r
+  @retval TRUE    Contents of the buffer are all zeros.\r
+  @retval FALSE   Contents of the buffer are not all zeros.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+InternalMemIsZeroBuffer (\r
+  IN CONST VOID  *Buffer,\r
+  IN UINTN       Length\r
+  )\r
+{\r
+  CONST UINT8 *BufferData;\r
+  UINTN       Index;\r
+\r
+  BufferData = Buffer;\r
+  for (Index = 0; Index < Length; Index++) {\r
+    if (BufferData[Index] != 0) {\r
+      return FALSE;\r
+    }\r
+  }\r
+  return TRUE;\r
+}\r