X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/3cf6947a5472bd07ee7106e52266798d70c405fa..cb5aa4cdd6af4114b18db464f022ef99a44304d7:/lua/lua.c?ds=sidebyside diff --git a/lua/lua.c b/lua/lua.c index a7d35a08..a3d54f3b 100644 --- a/lua/lua.c +++ b/lua/lua.c @@ -151,6 +151,7 @@ void _fini() { freesstring(dummy.name); lua_freedebugsocket(); + nscheckfreeall(POOL_LUA); } void lua_loadscripts(void) { @@ -167,6 +168,17 @@ void lua_loadscripts(void) { } } +/* taken from the lua manual, modified to use nsmalloc */ +static void *lua_nsmalloc(void *ud, void *ptr, size_t osize, size_t nsize) { + if(nsize == 0) { + if(ptr != NULL) + luafree(ptr); + return NULL; + } + + return luarealloc(ptr, nsize); +} + lua_State *lua_loadscript(char *file) { char fullpath[LUA_PATHLEN]; int top; @@ -181,11 +193,11 @@ lua_State *lua_loadscript(char *file) { if(lua_scriptloaded(file)) return NULL; - l = lua_open(); + l = lua_newstate(lua_nsmalloc, NULL); if(!l) return NULL; - n = (lua_list *)malloc(sizeof(lua_list));; + n = (lua_list *)luamalloc(sizeof(lua_list));; if(!n) { Error("lua", ERR_ERROR, "Error allocing list for %s.", file); return NULL; @@ -194,7 +206,7 @@ lua_State *lua_loadscript(char *file) { n->name = getsstring(file, LUA_PATHLEN); if(!n->name) { Error("lua", ERR_ERROR, "Error allocing name item for %s.", file); - free(n); + luafree(n); return NULL; } n->calls = 0; @@ -223,7 +235,7 @@ lua_State *lua_loadscript(char *file) { Error("lua", ERR_ERROR, "Error loading %s.", file); lua_close(l); freesstring(n->name); - free(n); + luafree(n); return NULL; } @@ -248,7 +260,7 @@ lua_State *lua_loadscript(char *file) { Error("lua", ERR_ERROR, "Error pcalling: %s.", file); lua_close(l); freesstring(n->name); - free(n); + luafree(n); return NULL; } @@ -290,7 +302,7 @@ void lua_unloadscript(lua_list *l) { } } - free(l); + luafree(l); } void lua_setpath(lua_State *l) {