Reactos
at master 41 lines 1.5 kB view raw
1// 2// realloc.cpp 3// 4// Copyright (c) Microsoft Corporation. All rights reserved. 5// 6// Implementation of realloc(). 7// 8#include <corecrt_internal.h> 9#include <malloc.h> 10 11// Reallocates a block of memory in the heap. 12// 13// This function reallocates the block pointed to by 'block' such that it is 14// 'size' bytes in size. The new size may be either greater or less than the 15// original size of the block. The reallocation may result in the block being 16// moved to a new location in memory. If the block is moved, the contents of 17// the original block are copied. 18// 19// Standard behavior notes: 20// [1] realloc(nullptr, new_size) is equivalent to malloc(new_size) 21// [2] realloc(p, 0) is equivalent to free(p), and nullptr is returned 22// [3] If reallocation fails, the original block is left unchanged 23// 24// If 'block' is non-null, it must point to a valid block of memory allocated in 25// the heap. 26// 27// This function supports patching and therefore must be marked noinline. 28// Both _realloc_dbg and _realloc_base must also be marked noinline 29// to prevent identical COMDAT folding from substituting calls to realloc 30// with either other function or vice versa. 31extern "C" _CRT_HYBRIDPATCHABLE __declspec(noinline) _CRTRESTRICT void* __cdecl realloc( 32 void* const block, 33 size_t const size 34 ) 35{ 36 #ifdef _DEBUG 37 return _realloc_dbg(block, size, _NORMAL_BLOCK, nullptr, 0); 38 #else 39 return _realloc_base(block, size); 40 #endif 41}