]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseMemoryLibSse2/ScanMem8Wrapper.c
Add SetMemN() and ScanMemN() to the BaseMemoryLib class and all BaseMemoryLib impleme...
[mirror_edk2.git] / MdePkg / Library / BaseMemoryLibSse2 / ScanMem8Wrapper.c
index 2add7849cd6240bf778257d692a8903fca4825c5..9efca5e02a40f5621b30ca314d511acd40e20541 100644 (file)
@@ -1,5 +1,5 @@
 /** @file\r
-  ScanMem8() implementation.\r
+  ScanMem8() and ScanMemN() implementation.\r
 \r
   The following BaseMemoryLib instances contain the same copy of this file:\r
 \r
@@ -60,3 +60,39 @@ ScanMem8 (
  \r
   return (VOID*)InternalMemScanMem8 (Buffer, Length, Value);\r
 }\r
+\r
+/**\r
+  Scans a target buffer for a UINTN sized value, and returns a pointer to the matching \r
+  UINTN sized value in the target buffer.\r
+\r
+  This function searches target the buffer specified by Buffer and Length from the lowest\r
+  address to the highest address for a UINTN sized value that matches Value.  If a match is found,\r
+  then a pointer to the matching byte in the target buffer is returned.  If no match is found,\r
+  then NULL is returned.  If Length is 0, then NULL is returned.\r
+  \r
+  If Length > 0 and Buffer is NULL, then ASSERT().\r
+  If Buffer is not aligned on a UINTN boundary, then ASSERT().\r
+  If Length is not aligned on a UINTN boundary, then ASSERT().\r
+  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
+\r
+  @param  Buffer      Pointer to the target buffer to scan.\r
+  @param  Length      Number of bytes in Buffer to scan.\r
+  @param  Value       Value to search for in the target buffer.\r
+\r
+  @return A pointer to the matching byte in the target buffer or NULL otherwise.\r
+\r
+**/\r
+VOID *\r
+EFIAPI\r
+ScanMemN (\r
+  IN CONST VOID  *Buffer,\r
+  IN UINTN       Length,\r
+  IN UINTN       Value\r
+  )\r
+{\r
+  if (sizeof (UINTN) == sizeof (UINT64)) {\r
+    return ScanMem64 (Buffer, Length, (UINT64)Value);\r
+  }\r
+  return ScanMem32 (Buffer, Length, (UINT32)Value);\r
+}\r
+\r