On December 15, 2003 10:35 am, Hans Leidekker wrote:
> The test succeeds on Wine. This is wrong of course, tests should
> always succeed on Windows and either succeed on Wine or fail on
> Wine and be marked todo_wine.
Great, thanks for catching this. Our current implementation seems
to be freeing memory on size=0, how can we check what Windows does?
If it doesn't, we can just simpligy the code to this:
Index: dlls/kernel/heap.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/heap.c,v
retrieving revision 1.4
diff -u -r1.4 heap.c
--- dlls/kernel/heap.c 27 Nov 2003 00:59:36 -0000 1.4
+++ dlls/kernel/heap.c 15 Dec 2003 16:19:04 -0000
@@ -615,37 +614,15 @@
SetLastError(ERROR_INVALID_HANDLE);
} else
#endif
- if(size!=0)
- {
- hnew=hmem;
- if(pintern->Pointer)
- {
- if((palloc = HeapReAlloc(GetProcessHeap(), heap_flags,
- (char *) pintern->Pointer-HGLOBAL_STORAGE,
- size+HGLOBAL_STORAGE)) == NULL)
- hnew = 0; /* Block still valid */
- else
- pintern->Pointer = (char *)palloc+HGLOBAL_STORAGE;
- }
- else
- {
- if((palloc=HeapAlloc(GetProcessHeap(), heap_flags, size+HGLOBAL_STORAGE))
- == NULL)
- hnew = 0;
- else
- {
- *(HGLOBAL *)palloc = hmem;
- pintern->Pointer = (char *)palloc + HGLOBAL_STORAGE;
- }
- }
- }
+ if(size == 0) size = 16;
+ hnew=hmem;
+ if(pintern->Pointer) palloc = HeapAlloc(GetProcessHeap(), heap_flags, size+HGLOBAL_STORAGE);
+ else palloc = HeapReAlloc(GetProcessHeap(), heap_flags, (char *) pintern->Pointer-HGLOBAL_STORAGE, size+HGLOBAL_STORAGE);
+ if (!palloc) hnew = 0;
else
{
- if(pintern->Pointer)
- {
- HeapFree(GetProcessHeap(), 0, (char *) pintern->Pointer-HGLOBAL_STORAGE);
- pintern->Pointer=NULL;
- }
+ pintern->Pointer = (char *)palloc + HGLOBAL_STORAGE;
+ if (!pintern->Pointer) *(HGLOBAL *)palloc = hmem;
}
}
}
--
Dimi.