summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorstephentoub <stoub@microsoft.com>2015-10-26 23:03:04 -0400
committerstephentoub <stoub@microsoft.com>2015-10-27 13:22:25 -0400
commit2698c9960a7d87aef6d770c8a6ec203f93fe6bf9 (patch)
tree7d625e7982ae8eb6938a948a1daa9076eaeff1ea /src
parent0bc6af101ce8905764f47880c591eb71dbae8eda (diff)
downloadcoreclr-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')
-rw-r--r--src/dlls/mscoree/mscorwks_unixexports.src1
-rw-r--r--src/pal/inc/pal.h9
-rw-r--r--src/pal/src/memory/local.cpp32
3 files changed, 42 insertions, 0 deletions
diff --git a/src/dlls/mscoree/mscorwks_unixexports.src b/src/dlls/mscoree/mscorwks_unixexports.src
index bd71c24f96..67afcb64c7 100644
--- a/src/dlls/mscoree/mscorwks_unixexports.src
+++ b/src/dlls/mscoree/mscorwks_unixexports.src
@@ -58,6 +58,7 @@ GetTempFileNameW
GetTempPathW
LeaveCriticalSection
LocalAlloc
+LocalReAlloc
LocalFree
LockFile
lstrlenA
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: