Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1993 Microsoft Corporation
Module Name:
spmemory.c
Abstract:
Memory allocation routines for text setup.
Author:
Ted Miller (tedm) 29-July-1993
Revision History:
--*/
#include "efinvram.h"
PVOID MemAlloc( IN SIZE_T Size )
/*++
Routine Description:
This function is guaranteed to succeed.
Arguments:
Return Value:
--*/
{ PSIZE_T p;
//
// Add space for storing the size of the block.
//
p = RtlAllocateHeap( RtlProcessHeap(), 0, Size + sizeof(SIZE_T) );
if ( p == NULL ) { FatalError( ERROR_NOT_ENOUGH_MEMORY, L"Insufficient memory\n" ); }
//
// Store the size of the block, and return the address
// of the user portion of the block.
//
*p++ = Size;
return p; }
PVOID MemRealloc( IN PVOID Block, IN SIZE_T NewSize )
/*++
Routine Description:
This function is guaranteed to succeed.
Arguments:
Return Value:
--*/
{ PSIZE_T NewBlock; SIZE_T OldSize;
//
// Get the size of the block being reallocated.
//
OldSize = ((PSIZE_T)Block)[-1];
//
// Allocate a new block of the new size.
//
NewBlock = MemAlloc(NewSize); ASSERT(NewBlock);
//
// Copy the old block to the new block.
//
if (NewSize < OldSize) { RtlCopyMemory(NewBlock, Block, NewSize); } else { RtlCopyMemory(NewBlock, Block, OldSize); }
//
// Free the old block.
//
MemFree(Block);
//
// Return the address of the new block.
//
return(NewBlock); }
VOID MemFree( IN PVOID Block )
/*++
Routine Description:
Arguments:
Return Value:
--*/
{ if (Block == NULL) return;
//
// Free the block at its real address.
//
RtlFreeHeap( RtlProcessHeap(), 0, (PSIZE_T)Block - 1); }
|