Add reallocate functions to the PEI Memory Allocation Library
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6706 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -626,6 +626,147 @@ AllocateReservedCopyPool (
|
|||||||
return InternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer);
|
return InternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of a specified memory type.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of the type
|
||||||
|
specified by PoolType. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not
|
||||||
|
enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
|
If OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param PoolType The type of pool to allocate.
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalReallocatePool (
|
||||||
|
IN EFI_MEMORY_TYPE PoolType,
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VOID *NewBuffer;
|
||||||
|
|
||||||
|
NewBuffer = AllocateZeroPool (NewSize);
|
||||||
|
if (NewBuffer != NULL && OldBuffer != NULL) {
|
||||||
|
CopyMem (NewBuffer, OldBuffer, MIN (OldSize, NewSize));
|
||||||
|
FreePool (OldBuffer);
|
||||||
|
}
|
||||||
|
return NewBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of type EfiBootServicesData.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of type
|
||||||
|
EfiBootServicesData. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not
|
||||||
|
enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
|
If OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ReallocatePool (
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalReallocatePool (EfiBootServicesData, OldSize, NewSize, OldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of type EfiRuntimeServicesData.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of type
|
||||||
|
EfiRuntimeServicesData. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not
|
||||||
|
enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
|
If OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ReallocateRuntimePool (
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalReallocatePool (EfiRuntimeServicesData, OldSize, NewSize, OldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of type EfiReservedMemoryType.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of type
|
||||||
|
EfiReservedMemoryType. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not
|
||||||
|
enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
|
If OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ReallocateReservedPool (
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalReallocatePool (EfiReservedMemoryType, OldSize, NewSize, OldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Frees a buffer that was previously allocated with one of the pool allocation functions in the
|
Frees a buffer that was previously allocated with one of the pool allocation functions in the
|
||||||
Memory Allocation Library.
|
Memory Allocation Library.
|
||||||
|
Reference in New Issue
Block a user