Robert Shearman : kernel32: Fix GlobalReAlloc for size = 0.
Module: wine Branch: refs/heads/master Commit: 9cc41d278ff1d0bebe034ca64d82388751e4aeb6 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9cc41d278ff1d0bebe034ca6... Author: Robert Shearman <rob(a)codeweavers.com> Date: Thu Jan 12 11:55:25 2006 +0100 kernel32: Fix GlobalReAlloc for size = 0. GlobalReAlloc should return NULL if the requested size is 0, the block is moveable and it is locked, but otherwise it should return the original memory block. --- dlls/kernel/heap.c | 12 +++++++++--- dlls/kernel/tests/heap.c | 14 ++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dlls/kernel/heap.c b/dlls/kernel/heap.c index 6c0b913..19d4b5b 100644 --- a/dlls/kernel/heap.c +++ b/dlls/kernel/heap.c @@ -657,11 +657,17 @@ HGLOBAL WINAPI GlobalReAlloc( } else { - if(pintern->Pointer) + if (pintern->LockCount == 0) { - HeapFree(GetProcessHeap(), 0, (char *) pintern->Pointer-HGLOBAL_STORAGE); - pintern->Pointer=NULL; + if(pintern->Pointer) + { + HeapFree(GetProcessHeap(), 0, (char *) pintern->Pointer-HGLOBAL_STORAGE); + pintern->Pointer = NULL; + } + hnew = hmem; } + else + WARN("not freeing memory associated with locked handle\n"); } } } diff --git a/dlls/kernel/tests/heap.c b/dlls/kernel/tests/heap.c index 27a51cf..a6284a0 100644 --- a/dlls/kernel/tests/heap.c +++ b/dlls/kernel/tests/heap.c @@ -63,11 +63,8 @@ START_TEST(heap) size = GlobalSize(gbl); ok(size >= 10 && size <= 16, "Memory not resized to size 10, instead size=%ld\n", size); - todo_wine - { - gbl = GlobalReAlloc(gbl, 0, GMEM_MOVEABLE); - ok(gbl != NULL, "GlobalReAlloc should not fail on size 0\n"); - } + gbl = GlobalReAlloc(gbl, 0, GMEM_MOVEABLE); + ok(gbl != NULL, "GlobalReAlloc should not fail on size 0\n"); size = GlobalSize(gbl); ok(size == 0, "Memory not resized to size 0, instead size=%ld\n", size); @@ -87,11 +84,8 @@ START_TEST(heap) size = LocalSize(gbl); ok(size >= 10 && size <= 16, "Memory not resized to size 10, instead size=%ld\n", size); - todo_wine - { - gbl = LocalReAlloc(gbl, 0, LMEM_MOVEABLE); - ok(gbl != NULL, "LocalReAlloc should not fail on size 0\n"); - } + gbl = LocalReAlloc(gbl, 0, LMEM_MOVEABLE); + ok(gbl != NULL, "LocalReAlloc should not fail on size 0\n"); size = LocalSize(gbl); ok(size == 0, "Memory not resized to size 0, instead size=%ld\n", size);
participants (1)
-
Alexandre Julliard