Hi!
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?
Paul Chitescu