From 1f917e709ca3fe41cf07fd4bf99a080883521394 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 6 Feb 2001 14:01:29 -0200 Subject: better use of extra include files (both for tests and for old_ansi) --- liolib.c | 34 +++++++++---------- lmem.c | 115 ++++----------------------------------------------------------- ltests.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++- ltests.h | 12 ++++++- lvm.c | 7 +--- 5 files changed, 118 insertions(+), 136 deletions(-) diff --git a/liolib.c b/liolib.c index 2c1b75c7..530ffa14 100644 --- a/liolib.c +++ b/liolib.c @@ -1,5 +1,5 @@ /* -** $Id: liolib.c,v 1.102 2001/01/26 12:12:16 roberto Exp roberto $ +** $Id: liolib.c,v 1.103 2001/02/02 19:02:40 roberto Exp roberto $ ** Standard I/O (and system) library ** See Copyright Notice in lua.h */ @@ -21,19 +21,13 @@ #ifndef OLD_ANSI #include #include -#define realloc(b,s) ((b) == NULL ? malloc(s) : (realloc)(b, s)) -#define free(b) if (b) (free)(b) -#else -/* no support for locale and for strerror: fake them */ -#define setlocale(a,b) ((void)a, strcmp((b),"C")==0?"C":NULL) -#define LC_ALL 0 -#define LC_COLLATE 0 -#define LC_CTYPE 0 -#define LC_MONETARY 0 -#define LC_NUMERIC 0 -#define LC_TIME 0 -#define strerror(e) "I/O error" -#define errno (-1) +#endif + + +#ifndef l_realloc +#define l_malloc(s) malloc(s) +#define l_realloc(b,os,s) realloc(b, s) +#define l_free(b, os) free(b) #endif @@ -258,20 +252,22 @@ static int read_line (lua_State *L, FILE *f) { static void read_file (lua_State *L, FILE *f) { size_t len = 0; size_t size = LUAL_BUFFERSIZE; + size_t oldsize = 0; char *buffer = NULL; for (;;) { - char *newbuffer = (char *)realloc(buffer, size); + char *newbuffer = (char *)l_realloc(buffer, oldsize, size); if (newbuffer == NULL) { - free(buffer); + l_free(buffer, oldsize); lua_error(L, "not enough memory to read a file"); } buffer = newbuffer; len += fread(buffer+len, sizeof(char), size-len, f); if (len < size) break; /* did not read all it could */ + oldsize = size; size *= 2; } lua_pushlstring(L, buffer, len); - free(buffer); + l_free(buffer, size); } @@ -282,13 +278,13 @@ static int read_chars (lua_State *L, FILE *f, size_t n) { if (n <= LUAL_BUFFERSIZE) buffer = statbuff; else { - buffer = (char *)malloc(n); + buffer = (char *)l_malloc(n); if (buffer == NULL) lua_error(L, "not enough memory to read a file"); } n1 = fread(buffer, sizeof(char), n, f); lua_pushlstring(L, buffer, n1); - if (buffer != statbuff) free(buffer); + if (buffer != statbuff) l_free(buffer, n); return (n1 > 0 || n == 0); } diff --git a/lmem.c b/lmem.c index bce76029..f2ccac72 100644 --- a/lmem.c +++ b/lmem.c @@ -1,5 +1,5 @@ /* -** $Id: lmem.c,v 1.44 2001/01/24 15:45:33 roberto Exp roberto $ +** $Id: lmem.c,v 1.45 2001/02/05 19:08:01 roberto Exp roberto $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ @@ -16,115 +16,12 @@ - -#ifdef LUA_DEBUG -/* -** {====================================================================== -** Controlled version for realloc. -** ======================================================================= -*/ - - -#include -#include -#include - -#define basicrealloc(b, os, s) debug_realloc(b, os, s) -#define basicfree(b, s) debug_realloc(b, s, 0) - - -/* ensures maximum alignment for HEADER */ -#define HEADER (sizeof(union L_Umaxalign)) - -#define MARKSIZE 32 -#define MARK 0x55 /* 01010101 (a nice pattern) */ - - -#define blocksize(b) ((size_t *)((char *)(b) - HEADER)) - -unsigned long memdebug_numblocks = 0; -unsigned long memdebug_total = 0; -unsigned long memdebug_maxmem = 0; -unsigned long memdebug_memlimit = ULONG_MAX; - - -static void *checkblock (void *block) { - size_t *b = blocksize(block); - size_t size = *b; - int i; - for (i=0;i memdebug_memlimit) - return NULL; /* to test memory allocation errors */ - else { - char *newblock; - int i; - size_t realsize = HEADER+size+MARKSIZE; - if (realsize < size) return NULL; /* overflow! */ - newblock = (char *)malloc(realsize); /* alloc a new block */ - if (newblock == NULL) return NULL; - if (oldsize > size) oldsize = size; - if (block) { - memcpy(newblock+HEADER, block, oldsize); - freeblock(block); /* erase (and check) old copy */ - } - /* initialize new part of the block with something `weird' */ - memset(newblock+HEADER+oldsize, -MARK, size-oldsize); - memdebug_total += size; - if (memdebug_total > memdebug_maxmem) - memdebug_maxmem = memdebug_total; - memdebug_numblocks++; - *(size_t *)newblock = size; - for (i=0;i= MAX_SIZET) luaD_error(L, "memory allocation error: block too big"); else { - block = basicrealloc(block, oldsize, size); + block = l_realloc(block, oldsize, size); if (block == NULL) { if (L) luaD_breakrun(L, LUA_ERRMEM); /* break run without error message */ diff --git a/ltests.c b/ltests.c index 814102ff..0fbf0426 100644 --- a/ltests.c +++ b/ltests.c @@ -1,11 +1,12 @@ /* -** $Id: ltests.c,v 1.61 2001/02/01 16:03:38 roberto Exp roberto $ +** $Id: ltests.c,v 1.62 2001/02/02 15:13:05 roberto Exp roberto $ ** Internal Module for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ #include +#include #include #include #include @@ -34,6 +35,7 @@ */ #ifdef LUA_DEBUG + lua_State *lua_state = NULL; int islocked = 0; @@ -47,6 +49,88 @@ static void setnameval (lua_State *L, const char *name, int val) { } +/* +** {====================================================================== +** Controlled version for realloc. +** ======================================================================= +*/ + + +/* ensures maximum alignment for HEADER */ +#define HEADER (sizeof(union L_Umaxalign)) + +#define MARKSIZE 32 +#define MARK 0x55 /* 01010101 (a nice pattern) */ + + +#define blocksize(b) ((size_t *)((char *)(b) - HEADER)) + +unsigned long memdebug_numblocks = 0; +unsigned long memdebug_total = 0; +unsigned long memdebug_maxmem = 0; +unsigned long memdebug_memlimit = ULONG_MAX; + + +static void *checkblock (void *block) { + size_t *b = blocksize(block); + size_t size = *b; + int i; + for (i=0;i memdebug_memlimit) + return NULL; /* to test memory allocation errors */ + else { + char *newblock; + int i; + size_t realsize = HEADER+size+MARKSIZE; + if (realsize < size) return NULL; /* overflow! */ + newblock = (char *)malloc(realsize); /* alloc a new block */ + if (newblock == NULL) return NULL; + if (oldsize > size) oldsize = size; + if (block) { + memcpy(newblock+HEADER, block, oldsize); + freeblock(block); /* erase (and check) old copy */ + } + /* initialize new part of the block with something `weird' */ + memset(newblock+HEADER+oldsize, -MARK, size-oldsize); + memdebug_total += size; + if (memdebug_total > memdebug_maxmem) + memdebug_maxmem = memdebug_total; + memdebug_numblocks++; + *(size_t *)newblock = size; + for (i=0;i + #define LUA_DEBUG @@ -27,6 +29,14 @@ extern unsigned long memdebug_maxmem; extern unsigned long memdebug_memlimit; +#define l_malloc(s) debug_realloc(NULL, 0, s) +#define l_realloc(b, os, s) debug_realloc(b, os, s) +#define l_free(b, s) debug_realloc(b, s, 0) + +void *debug_realloc (void *block, size_t oldsize, size_t size); + + + /* test for lock/unlock */ #define LUA_USERSTATE int *lock; extern int islocked; diff --git a/lvm.c b/lvm.c index 9a9dc12a..a25f02cd 100644 --- a/lvm.c +++ b/lvm.c @@ -1,5 +1,5 @@ /* -** $Id: lvm.c,v 1.163 2001/02/01 17:39:55 roberto Exp roberto $ +** $Id: lvm.c,v 1.164 2001/02/02 15:13:05 roberto Exp roberto $ ** Lua virtual machine ** See Copyright Notice in lua.h */ @@ -25,11 +25,6 @@ #include "lvm.h" -#ifdef OLD_ANSI -#define strcoll(a,b) strcmp(a,b) -#endif - - /* ** Extra stack size to run a function: -- cgit v1.2.3-55-g6feb