diff options
Diffstat (limited to 'src/common.c')
-rw-r--r-- | src/common.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/common.c b/src/common.c index c50ea61..1b1323e 100644 --- a/src/common.c +++ b/src/common.c @@ -30,10 +30,19 @@ void set_int_field (lua_State *L, const char* field, int val) void *Lmalloc(lua_State *L, size_t size) { void *ud; lua_Alloc lalloc = lua_getallocf(L, &ud); - void *p = lalloc(ud, NULL, 0, size); - if(p == NULL) - luaL_error(L, "malloc failed"); - return p; + return lalloc(ud, NULL, 0, size); +} + +void *Lrealloc(lua_State *L, void *p, size_t osize, size_t nsize) { + void *ud; + lua_Alloc lalloc = lua_getallocf(L, &ud); + return lalloc(ud, p, osize, nsize); +} + +void Lfree(lua_State *L, void *p, size_t osize) { + void *ud; + lua_Alloc lalloc = lua_getallocf(L, &ud); + lalloc(ud, p, osize, 0); } /* This function fills a table with string-number pairs. @@ -117,9 +126,7 @@ void freelist_free (TFreeList *fl) { enum { ID_NUMBER, ID_STRING }; void buffer_init (TBuffer *buf, size_t sz, lua_State *L, TFreeList *fl) { - void *ud; - lua_Alloc lalloc = lua_getallocf(L, &ud); - buf->arr = (char*) lalloc (ud, NULL, 0, sz); + buf->arr = Lmalloc(L, sz); if (!buf->arr) { freelist_free (fl); luaL_error (L, "malloc failed"); @@ -132,9 +139,7 @@ void buffer_init (TBuffer *buf, size_t sz, lua_State *L, TFreeList *fl) { } void buffer_free (TBuffer *buf) { - void *ud; - lua_Alloc lalloc = lua_getallocf(buf->L, &ud); - lalloc (ud, buf->arr, buf->size, 0); + Lfree(buf->L, buf->arr, buf->size); } void buffer_clear (TBuffer *buf) { @@ -152,9 +157,7 @@ void buffer_addbuffer (TBuffer *trg, TBuffer *src) { void buffer_addlstring (TBuffer *buf, const void *src, size_t sz) { size_t newtop = buf->top + sz; if (newtop > buf->size) { - void *ud; - lua_Alloc lalloc = lua_getallocf(buf->L, &ud); - char *p = (char*) lalloc (ud, buf->arr, buf->size, 2 * newtop); /* 2x expansion */ + char *p = (char*) Lrealloc (buf->L, buf->arr, buf->size, 2 * newtop); /* 2x expansion */ if (!p) { freelist_free (buf->freelist); luaL_error (buf->L, "realloc failed"); |