Hello!
Paul Chitescu wrote:
While trying to debug a crash in msi.dll I noticed that the local msi_realloc() is implemented as a (too) thin wrapper around HeapReAlloc() and differs from the expected behavior of realloc() when the old pointer or the new size are zero.
The runtime realloc() works like free() if the new size is zero and it works like alloc() if the old pointer is null. HeapReAlloc never allocates or completely frees memory.
realloc: http://msdn.microsoft.com/en-us/library/xbebcx7d(VS.80).aspx
HeapReAlloc: http://msdn.microsoft.com/en-us/library/aa366704(VS.85).aspx
So I suggest all implementations of heap_realloc to be modified like:
if (!size) { HeapFree(...) return 0; } else if (!mem) return HeapAlloc(...) else return HeapReAlloc(...)
Any comments?
Well, the heap_alloc wrappers are really supposed to be "thin" wrappers. Those are there to basically save typing and not to simulate the behavior of malloc/realloc/free. But I don't feel too strong about the realloc case; you'd need to convince Alexandre to accept such a patch.
bye michael