X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseMemoryLibSse2%2FMemLibGuid.c;h=25d705f5b05438201a11b2c6cd392126a6de92b4;hp=06b2721c64f407a6ce20c477c6005b8e9ce83f63;hb=1efcc4ae46f52e3845923ffbab68426e068709d2;hpb=878ddf1fc3540a715f63594ed22b6929e881afb4 diff --git a/MdePkg/Library/BaseMemoryLibSse2/MemLibGuid.c b/MdePkg/Library/BaseMemoryLibSse2/MemLibGuid.c index 06b2721c64..25d705f5b0 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/MemLibGuid.c +++ b/MdePkg/Library/BaseMemoryLibSse2/MemLibGuid.c @@ -10,8 +10,6 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - Module Name: MemLibGuid.c - The following BaseMemoryLib instances share the same version of this file: BaseMemoryLib @@ -19,30 +17,32 @@ BaseMemoryLibSse2 BaseMemoryLibRepStr PeiMemoryLib - UefiMemoryLib + DxeMemoryLib **/ -/** - This function copies a source GUID to a destination GUID. - This function copies the contents of the 128-bit GUID specified by SourceGuid - to DestinationGuid, and returns DestinationGuid. +#include "MemLibInternals.h" +/** + Copies a source GUID to a destination GUID. + + This function copies the contents of the 128-bit GUID specified by SourceGuid to + DestinationGuid, and returns DestinationGuid. If DestinationGuid is NULL, then ASSERT(). If SourceGuid is NULL, then ASSERT(). - @param DestinationGuid Pointer to the destination GUID. - @param SourceGuid Pointer to the source GUID. + @param DestinationGuid Pointer to the destination GUID. + @param SourceGuid Pointer to the source GUID. - @return DestinationGuid + @return DestinationGuid. **/ GUID * EFIAPI CopyGuid ( - OUT GUID *DestinationGuid, - IN CONST GUID *SourceGuid + OUT GUID *DestinationGuid, + IN CONST GUID *SourceGuid ) { WriteUnaligned64 ( @@ -57,35 +57,38 @@ CopyGuid ( } /** - Compares two GUIDs - - This function compares Guid1 to Guid2. If the GUIDs are identical then TRUE - is returned. If there are any bit differences in the two GUIDs, then FALSE is - returned. + Compares two GUIDs. + This function compares Guid1 to Guid2. If the GUIDs are identical then TRUE is returned. + If there are any bit differences in the two GUIDs, then FALSE is returned. If Guid1 is NULL, then ASSERT(). If Guid2 is NULL, then ASSERT(). - @param Guid1 guid to compare - @param Guid2 guid to compare + @param Guid1 A pointer to a 128 bit GUID. + @param Guid2 A pointer to a 128 bit GUID. - @retval TRUE if Guid1 == Guid2 - @retval FALSE if Guid1 != Guid2 + @retval TRUE Guid1 and Guid2 are identical. + @retval FALSE Guid1 and Guid2 are not identical. **/ BOOLEAN EFIAPI CompareGuid ( - IN CONST GUID *Guid1, - IN CONST GUID *Guid2 + IN CONST GUID *Guid1, + IN CONST GUID *Guid2 ) { - return (BOOLEAN)( - ReadUnaligned64 ((CONST UINT64*)Guid1) - == ReadUnaligned64 ((CONST UINT64*)Guid2) && - ReadUnaligned64 ((CONST UINT64*)Guid1 + 1) - == ReadUnaligned64 ((CONST UINT64*)Guid2 + 1) - ); + UINT64 LowPartOfGuid1; + UINT64 LowPartOfGuid2; + UINT64 HighPartOfGuid1; + UINT64 HighPartOfGuid2; + + LowPartOfGuid1 = ReadUnaligned64 ((CONST UINT64*) Guid1); + LowPartOfGuid2 = ReadUnaligned64 ((CONST UINT64*) Guid2); + HighPartOfGuid1 = ReadUnaligned64 ((CONST UINT64*) Guid1 + 1); + HighPartOfGuid2 = ReadUnaligned64 ((CONST UINT64*) Guid2 + 1); + + return (BOOLEAN) (LowPartOfGuid1 == LowPartOfGuid2 && HighPartOfGuid1 == HighPartOfGuid2); } /** @@ -93,34 +96,38 @@ CompareGuid ( in the target buffer. This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 128-bit increments for the - 128-bit GUID value that matches Guid. If a match is found, then a pointer to - the matching GUID 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(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + the lowest address to the highest address at 128-bit increments for the 128-bit + GUID value that matches Guid. If a match is found, then a pointer to the matching + GUID 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 32-bit boundary, then ASSERT(). + If Length is not aligned on a 128-bit boundary, 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 Guid Value to search for in the target buffer. - @return Pointer to the first occurrence. - @retval NULL if Length == 0 or Guid was not found. + @return A pointer to the matching Guid in the target buffer or NULL otherwise. + **/ VOID * EFIAPI ScanGuid ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN CONST GUID *Guid + IN CONST VOID *Buffer, + IN UINTN Length, + IN CONST GUID *Guid ) { CONST GUID *GuidPtr; + ASSERT (((UINTN)Buffer & (sizeof (Guid->Data1) - 1)) == 0); + ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1)); + ASSERT ((Length & (sizeof (*GuidPtr) - 1)) == 0); + GuidPtr = (GUID*)Buffer; - Buffer = GuidPtr + Length / sizeof (*GuidPtr); + Buffer = GuidPtr + Length / sizeof (*GuidPtr); while (GuidPtr < (CONST GUID*)Buffer) { if (CompareGuid (GuidPtr, Guid)) { return (VOID*)GuidPtr;