diff options
Diffstat (limited to 'MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c')
-rw-r--r-- | MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c b/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c index c5f0762ebe..228c864b04 100644 --- a/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c +++ b/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c @@ -26,25 +26,22 @@ #include "MemLibInternals.h"
/**
- Scans a target buffer for a 64-bit value, and returns a pointer to the
- matching 64-bit value in the target buffer.
+ Scans a target buffer for a 64-bit value, and returns a pointer to the matching 64-bit value
+ in the target buffer.
- This function searches target the buffer specified by Buffer and Length from
- the lowest address to the highest address at 64-bit increments for a 64-bit
- value that matches Value. If a match is found, then a pointer to the matching
- value in the target buffer is returned. If no match is found, then NULL is
- returned. If Length is 0, then NULL is returned.
-
- If Buffer is NULL, then ASSERT().
+ This function searches target the buffer specified by Buffer and Length from the lowest
+ address to the highest address for a 64-bit value that matches Value. If a match is found,
+ then a pointer to the matching byte in the target buffer is returned. If no match is found,
+ then NULL is returned. If Length is 0, then NULL is returned.
+ If Length > 0 and Buffer is NULL, then ASSERT().
If Buffer is not aligned on a 64-bit boundary, then ASSERT().
- If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
+ If Length is greater than (MAX_ADDRESS – Buffer + 1), then ASSERT().
- @param Buffer Pointer to the target buffer to scan.
- @param Length Number of bytes in Buffer to scan.
- @param Value Value to search for in the target buffer.
+ @param Buffer Pointer to the target buffer to scan.
+ @param Length Number of bytes in Buffer to scan.
+ @param Value Value to search for in the target buffer.
- @return Pointer to the first occurrence or NULL if not found.
- @retval NULL if Length == 0 or Value was not found.
+ @return A pointer to the matching byte in the target buffer or NULL otherwise.
**/
VOID *
@@ -55,12 +52,13 @@ ScanMem64 ( IN UINT64 Value
)
{
+ if (Length == 0) {
+ return NULL;
+ }
+
ASSERT (Buffer != NULL);
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
- ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1);
+ ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
- if ((Length /= sizeof (Value)) == 0) {
- return NULL;
- }
- return (VOID*)InternalMemScanMem64 (Buffer, Length, Value);
+ return (VOID*)InternalMemScanMem64 (Buffer, Length / sizeof (Value), Value);
}
|