ScanMem8Wrapper.c revision 4fd606d1f5abe38e1f42c38de1d2e895166bd0f4
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard/** @file
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard ScanMem8() and ScanMemN() implementation.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard The following BaseMemoryLib instances contain the same copy of this file:
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard BaseMemoryLib
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard BaseMemoryLibMmx
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard BaseMemoryLibSse2
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard BaseMemoryLibRepStr
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard BaseMemoryLibOptDxe
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard BaseMemoryLibOptPei
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard PeiMemoryLib
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard UefiMemoryLib
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard This program and the accompanying materials
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard are licensed and made available under the terms and conditions of the BSD License
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard which accompanies this distribution. The full text of the license may be found at
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard http://opensource.org/licenses/bsd-license.php.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard**/
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard#include "MemLibInternals.h"
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard/**
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard Scans a target buffer for an 8-bit value, and returns a pointer to the matching 8-bit value
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard in the target buffer.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard This function searches the target buffer specified by Buffer and Length from the lowest
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard address to the highest address for an 8-bit value that matches Value. If a match is found,
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard then a pointer to the matching byte in the target buffer is returned. If no match is found,
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard then NULL is returned. If Length is 0, then NULL is returned.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard If Length > 0 and Buffer is NULL, then ASSERT().
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard @param Buffer The pointer to the target buffer to scan.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard @param Length The number of bytes in Buffer to scan.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard @param Value The value to search for in the target buffer.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard @return A pointer to the matching byte in the target buffer, or NULL otherwise.
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard**/
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willardVOID *
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willardEFIAPI
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willardScanMem8 (
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard IN CONST VOID *Buffer,
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard IN UINTN Length,
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard IN UINT8 Value
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard )
ecb56eb0ffe7dd69b90f2aa3f3be470eca3ecc28willard{
if (Length == 0) {
return NULL;
}
ASSERT (Buffer != NULL);
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
return (VOID*)InternalMemScanMem8 (Buffer, Length, Value);
}
/**
Scans a target buffer for a UINTN sized value, and returns a pointer to the matching
UINTN sized value in the target buffer.
This function searches the target buffer specified by Buffer and Length from the lowest
address to the highest address for a UINTN sized 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 UINTN boundary, then ASSERT().
If Length is not aligned on a UINTN boundary, then ASSERT().
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
@param Buffer The pointer to the target buffer to scan.
@param Length The number of bytes in Buffer to scan.
@param Value The value to search for in the target buffer.
@return A pointer to the matching byte in the target buffer, or NULL otherwise.
**/
VOID *
EFIAPI
ScanMemN (
IN CONST VOID *Buffer,
IN UINTN Length,
IN UINTN Value
)
{
if (sizeof (UINTN) == sizeof (UINT64)) {
return ScanMem64 (Buffer, Length, (UINT64)Value);
} else {
return ScanMem32 (Buffer, Length, (UINT32)Value);
}
}