diff options
author | stephentoub <stoub@microsoft.com> | 2015-10-26 23:03:04 -0400 |
---|---|---|
committer | stephentoub <stoub@microsoft.com> | 2015-10-27 13:22:25 -0400 |
commit | 2698c9960a7d87aef6d770c8a6ec203f93fe6bf9 (patch) | |
tree | 7d625e7982ae8eb6938a948a1daa9076eaeff1ea /src/pal | |
parent | 0bc6af101ce8905764f47880c591eb71dbae8eda (diff) | |
download | coreclr-2698c9960a7d87aef6d770c8a6ec203f93fe6bf9.tar.gz coreclr-2698c9960a7d87aef6d770c8a6ec203f93fe6bf9.tar.bz2 coreclr-2698c9960a7d87aef6d770c8a6ec203f93fe6bf9.zip |
Implement LocalReAlloc in PAL
Marshal.ReAllocHGlobal is failing because it's expecting to find a LocalReAlloc implementation in libcoreclr's PAL. This commit adds one.
Diffstat (limited to 'src/pal')
-rw-r--r-- | src/pal/inc/pal.h | 9 | ||||
-rw-r--r-- | src/pal/src/memory/local.cpp | 32 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/pal/inc/pal.h b/src/pal/inc/pal.h index 6cc9978857..8c1608b081 100644 --- a/src/pal/inc/pal.h +++ b/src/pal/inc/pal.h @@ -3944,6 +3944,7 @@ HeapSetInformation( IN SIZE_T HeapInformationLength); #define LMEM_FIXED 0x0000 +#define LMEM_MOVEABLE 0x0002 #define LMEM_ZEROINIT 0x0040 #define LPTR (LMEM_FIXED | LMEM_ZEROINIT) @@ -3957,6 +3958,14 @@ LocalAlloc( PALIMPORT HLOCAL PALAPI +LocalReAlloc( + IN HLOCAL hMem, + IN SIZE_T uBytes, + IN UINT uFlags); + +PALIMPORT +HLOCAL +PALAPI LocalFree( IN HLOCAL hMem); diff --git a/src/pal/src/memory/local.cpp b/src/pal/src/memory/local.cpp index c221b205de..7a709efc9b 100644 --- a/src/pal/src/memory/local.cpp +++ b/src/pal/src/memory/local.cpp @@ -79,6 +79,38 @@ done: return (HLOCAL) lpRetVal; } +/*++ +Function: +LocalReAlloc + +See MSDN doc. +--*/ +HLOCAL +PALAPI +LocalReAlloc( + IN HLOCAL hMem, + IN SIZE_T uBytes, + IN UINT uFlags) +{ + LPVOID lpRetVal = NULL; + PERF_ENTRY(LocalReAlloc); + ENTRY("LocalReAlloc (hMem=%p, uBytes=%u, uFlags=%#x)\n", hMem, uBytes, uFlags); + + if (uFlags != LMEM_MOVEABLE) { + // Currently valid iff uFlags is LMEM_MOVEABLE + ASSERT("Invalid parameter uFlags=0x%x\n", uFlags); + SetLastError(ERROR_INVALID_PARAMETER); + goto done; + } + uFlags = 0; + + lpRetVal = HeapReAlloc(GetProcessHeap(), uFlags, hMem, uBytes); + +done: + LOGEXIT("LocalReAlloc returning %p.\n", lpRetVal); + PERF_EXIT(LocalReAlloc); + return (HLOCAL)lpRetVal; +} /*++ Function: |