From 6e418a0fd90e0b3fe7066dd5e88f2b60f84ed956 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 20 May 2006 20:42:26 +0000 Subject: [PATCH] - Slightly update heap-related routines to wine's routines. Doesn't fix regression tests really, but just in case. svn path=/trunk/; revision=21955 --- reactos/dll/win32/kernel32/mem/global.c | 17 +++++++++++------ reactos/dll/win32/kernel32/mem/heap.c | 10 ++++++++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/kernel32/mem/global.c b/reactos/dll/win32/kernel32/mem/global.c index 46432f59d37..da213ab9e70 100644 --- a/reactos/dll/win32/kernel32/mem/global.c +++ b/reactos/dll/win32/kernel32/mem/global.c @@ -213,13 +213,15 @@ HGLOBAL STDCALL GlobalFree(HGLOBAL hMem) { PGLOBAL_HANDLE phandle; + HGLOBAL hreturned; DPRINT("GlobalFree( 0x%lX )\n", (ULONG)hMem); + hreturned = 0; if (ISPOINTER(hMem)) /* POINTER */ { - RtlFreeHeap(GetProcessHeap(), 0, (PVOID)hMem); - hMem = 0; + if(!RtlFreeHeap(GetProcessHeap(), 0, (PVOID)hMem)) + hMem = 0; } else /* HANDLE */ { @@ -229,7 +231,8 @@ GlobalFree(HGLOBAL hMem) if(MAGIC_GLOBAL_USED == phandle->Magic) { - + /* WIN98 does not make this test. That is you can free a */ + /* block you have not unlocked. Go figure!! */ if(phandle->LockCount!=0) { DPRINT1("Warning! GlobalFree(0x%X) Freeing a handle to a locked object.\n", hMem); @@ -237,15 +240,17 @@ GlobalFree(HGLOBAL hMem) } if(phandle->Pointer) - RtlFreeHeap(GetProcessHeap(), 0, (PVOID)((ULONG_PTR)phandle->Pointer - HANDLE_SIZE)); + if (!RtlFreeHeap(GetProcessHeap(), 0, (PVOID)((ULONG_PTR)phandle->Pointer - HANDLE_SIZE))) + hreturned = hMem; - RtlFreeHeap(GetProcessHeap(), 0, phandle); + if (!RtlFreeHeap(GetProcessHeap(), 0, phandle)) + hreturned = hMem; } HeapUnlock(GetProcessHeap()); hMem = 0; } - return hMem; + return hreturned; } diff --git a/reactos/dll/win32/kernel32/mem/heap.c b/reactos/dll/win32/kernel32/mem/heap.c index 9fb0afd9321..da748de624b 100644 --- a/reactos/dll/win32/kernel32/mem/heap.c +++ b/reactos/dll/win32/kernel32/mem/heap.c @@ -40,9 +40,15 @@ */ HANDLE STDCALL HeapCreate(DWORD flags, DWORD dwInitialSize, DWORD dwMaximumSize) { - + HANDLE hRet; DPRINT("HeapCreate( 0x%lX, 0x%lX, 0x%lX )\n", flags, dwInitialSize, dwMaximumSize); - return(RtlCreateHeap(flags, NULL, dwMaximumSize, dwInitialSize, NULL, NULL)); + + hRet = RtlCreateHeap(flags, NULL, dwMaximumSize, dwInitialSize, NULL, NULL); + + if (!hRet) + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + + return hRet; } /*********************************************************************