1e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/** @file 2e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff CopyMem() implementation. 3e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 42bfb60098f608dc32ff5d22b0fd087c1636b0881lgao The following BaseMemoryLib instances contain the same copy of this file: 5eb1c78dbb988654f46cc111d5b4a9dabd5578c1fgikidy 6e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff BaseMemoryLib 7e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff BaseMemoryLibMmx 8e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff BaseMemoryLibSse2 9e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff BaseMemoryLibRepStr 102bfb60098f608dc32ff5d22b0fd087c1636b0881lgao BaseMemoryLibOptDxe 112bfb60098f608dc32ff5d22b0fd087c1636b0881lgao BaseMemoryLibOptPei 12e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff PeiMemoryLib 131fef058f4b8fefc455bb171e4908c3e835b1b492qhuang UefiMemoryLib 14e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 152fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> 16c33c6476ca8156ddf3c32dbf95048c32f30dc84ahhtian This program and the accompanying materials 17d531bfee01a957038d7ac1a16748558a62165fb2eric_tian are licensed and made available under the terms and conditions of the BSD License 18d531bfee01a957038d7ac1a16748558a62165fb2eric_tian which accompanies this distribution. The full text of the license may be found at 192fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter http://opensource.org/licenses/bsd-license.php. 20d531bfee01a957038d7ac1a16748558a62165fb2eric_tian 21d531bfee01a957038d7ac1a16748558a62165fb2eric_tian THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 22d531bfee01a957038d7ac1a16748558a62165fb2eric_tian WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 23d531bfee01a957038d7ac1a16748558a62165fb2eric_tian 24e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/ 25e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 26e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff#include "MemLibInternals.h" 27e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 28e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/** 29e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff Copies a source buffer to a destination buffer, and returns the destination buffer. 30e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 31e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff This function copies Length bytes from SourceBuffer to DestinationBuffer, and returns 32e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff DestinationBuffer. The implementation must be reentrant, and it must handle the case 33e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff where SourceBuffer overlaps DestinationBuffer. 34eb1c78dbb988654f46cc111d5b4a9dabd5578c1fgikidy 35eb1c78dbb988654f46cc111d5b4a9dabd5578c1fgikidy If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT(). 36eb1c78dbb988654f46cc111d5b4a9dabd5578c1fgikidy If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). 37e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 382fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter @param DestinationBuffer The pointer to the destination buffer of the memory copy. 392fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter @param SourceBuffer The pointer to the source buffer of the memory copy. 402fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter @param Length The number of bytes to copy from SourceBuffer to DestinationBuffer. 41e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 42e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff @return DestinationBuffer. 43e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 44e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/ 45e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffVOID * 46e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffEFIAPI 47e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffCopyMem ( 48e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff OUT VOID *DestinationBuffer, 49e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff IN CONST VOID *SourceBuffer, 50e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff IN UINTN Length 51e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff ) 52e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff{ 532bfb60098f608dc32ff5d22b0fd087c1636b0881lgao if (Length == 0) { 54e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff return DestinationBuffer; 55e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff } 56e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer)); 57e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer)); 58e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff 59e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff if (DestinationBuffer == SourceBuffer) { 60e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff return DestinationBuffer; 61e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff } 62e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff return InternalMemCopyMem (DestinationBuffer, SourceBuffer, Length); 63e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff} 64