diff --git a/dlls/msvcrt/heap.c b/dlls/msvcrt/heap.c index 498894a7c87..35994cdad1b 100644 --- a/dlls/msvcrt/heap.c +++ b/dlls/msvcrt/heap.c @@ -281,5 +281,8 @@ void* MSVCRT_malloc(MSVCRT_size_t size) */ void* MSVCRT_realloc(void* ptr, MSVCRT_size_t size) { - return HeapReAlloc(GetProcessHeap(), 0, ptr, size); + if (!ptr) return MSVCRT_malloc(size); + if (size) return HeapReAlloc(GetProcessHeap(), 0, ptr, size); + MSVCRT_free(ptr); + return NULL; } diff --git a/dlls/msvcrt/tests/.cvsignore b/dlls/msvcrt/tests/.cvsignore index 0dd3440b8dd..3a16b22aa17 100644 --- a/dlls/msvcrt/tests/.cvsignore +++ b/dlls/msvcrt/tests/.cvsignore @@ -1,6 +1,7 @@ Makefile cpp.ok file.ok +heap.ok msvcrt_test.exe.spec.c scanf.ok testlist.c diff --git a/dlls/msvcrt/tests/Makefile.in b/dlls/msvcrt/tests/Makefile.in index fc58d363c84..1d999738d5f 100644 --- a/dlls/msvcrt/tests/Makefile.in +++ b/dlls/msvcrt/tests/Makefile.in @@ -9,6 +9,7 @@ EXTRAINCL = -I$(TOPSRCDIR)/include/msvcrt CTESTS = \ cpp.c \ file.c \ + heap.c \ scanf.c @MAKE_TEST_RULES@ diff --git a/dlls/msvcrt/tests/heap.c b/dlls/msvcrt/tests/heap.c new file mode 100644 index 00000000000..0403095ef6d --- /dev/null +++ b/dlls/msvcrt/tests/heap.c @@ -0,0 +1,41 @@ +/* + * Unit test suite for memory functions + * + * Copyright 2003 Dimitrie O. Paun + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "wine/test.h" +#include + +static void test_realloc( void ) +{ + void *mem = NULL; + + mem = realloc(mem, 10); + ok(mem != NULL, "memory not allocated"); + + mem = realloc(mem, 20); + ok(mem != NULL, "memory not reallocated"); + + mem = realloc(mem, 0); + ok(mem == NULL, "memory nto freed"); +} + +START_TEST(heap) +{ + test_realloc(); +}