2
0
Эх сурвалжийг харах

new ANSI C does not assure that realloc(p,0) == free(p)

Roberto Ierusalimschy 23 жил өмнө
parent
commit
02afc892d5
2 өөрчлөгдсөн 15 нэмэгдсэн , 7 устгасан
  1. 13 6
      lmem.c
  2. 2 1
      ltests.h

+ 13 - 6
lmem.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lmem.c,v 1.56 2002/06/11 16:23:47 roberto Exp roberto $
+** $Id: lmem.c,v 1.57 2002/06/18 15:19:27 roberto Exp roberto $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
 */
@@ -18,15 +18,22 @@
 
 
 /*
-** definition for realloc function. It must assure that
-** l_realloc(block, x, 0) frees the block, and l_realloc(NULL, 0, x)
-** allocates a new block (ANSI C assures that).
-** (`os' is the old block size; some allocators may use that.)
+** definition for realloc function. It must assure that l_realloc(NULL,
+** 0, x) allocates a new block (ANSI C assures that). (`os' is the old
+** block size; some allocators may use that.)
 */
 #ifndef l_realloc
 #define l_realloc(b,os,s)	realloc(b,s)
 #endif
 
+/*
+** definition for free function. (`os' is the old block size; some
+** allocators may use that.)
+*/
+#ifndef l_free
+#define l_free(b,os)	free(b)
+#endif
+
 
 #define MINSIZEARRAY	4
 
@@ -56,7 +63,7 @@ void *luaM_growaux (lua_State *L, void *block, int *size, int size_elems,
 void *luaM_realloc (lua_State *L, void *block, lu_mem oldsize, lu_mem size) {
   if (size == 0) {
     if (block != NULL) {
-      l_realloc(block, oldsize, size);
+      l_free(block, oldsize);
       block = NULL;
     }
   }

+ 2 - 1
ltests.h

@@ -1,5 +1,5 @@
 /*
-** $Id: ltests.h,v 1.14 2002/06/13 13:45:31 roberto Exp roberto $
+** $Id: ltests.h,v 1.15 2002/07/17 16:25:13 roberto Exp roberto $
 ** Internal Header for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 */
@@ -34,6 +34,7 @@ extern unsigned long memdebug_memlimit;
 
 
 #define l_realloc(b, os, s)	debug_realloc(b, os, s)
+#define l_free(b, os)		debug_realloc(b, os, 0)
 
 void *debug_realloc (void *block, size_t oldsize, size_t size);