aboutsummaryrefslogtreecommitdiff
path: root/loadlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'loadlib.c')
-rw-r--r--loadlib.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/loadlib.c b/loadlib.c
index b72dd885..9ef00278 100644
--- a/loadlib.c
+++ b/loadlib.c
@@ -56,10 +56,10 @@
56 56
57 57
58/* 58/*
59** unique key for table in the registry that keeps handles 59** key for table in the registry that keeps handles
60** for all loaded C libraries 60** for all loaded C libraries
61*/ 61*/
62static const int CLIBS = 0; 62static const char *CLIBS = "_CLIBS";
63 63
64#define LIB_FAIL "open" 64#define LIB_FAIL "open"
65 65
@@ -327,7 +327,7 @@ static void setpath (lua_State *L, const char *fieldname,
327*/ 327*/
328static void *checkclib (lua_State *L, const char *path) { 328static void *checkclib (lua_State *L, const char *path) {
329 void *plib; 329 void *plib;
330 lua_rawgetp(L, LUA_REGISTRYINDEX, &CLIBS); 330 lua_getfield(L, LUA_REGISTRYINDEX, CLIBS);
331 lua_getfield(L, -1, path); 331 lua_getfield(L, -1, path);
332 plib = lua_touserdata(L, -1); /* plib = CLIBS[path] */ 332 plib = lua_touserdata(L, -1); /* plib = CLIBS[path] */
333 lua_pop(L, 2); /* pop CLIBS table and 'plib' */ 333 lua_pop(L, 2); /* pop CLIBS table and 'plib' */
@@ -340,7 +340,7 @@ static void *checkclib (lua_State *L, const char *path) {
340** registry.CLIBS[#CLIBS + 1] = plib -- also keep a list of all libraries 340** registry.CLIBS[#CLIBS + 1] = plib -- also keep a list of all libraries
341*/ 341*/
342static void addtoclib (lua_State *L, const char *path, void *plib) { 342static void addtoclib (lua_State *L, const char *path, void *plib) {
343 lua_rawgetp(L, LUA_REGISTRYINDEX, &CLIBS); 343 lua_getfield(L, LUA_REGISTRYINDEX, CLIBS);
344 lua_pushlightuserdata(L, plib); 344 lua_pushlightuserdata(L, plib);
345 lua_pushvalue(L, -1); 345 lua_pushvalue(L, -1);
346 lua_setfield(L, -3, path); /* CLIBS[path] = plib */ 346 lua_setfield(L, -3, path); /* CLIBS[path] = plib */
@@ -716,12 +716,11 @@ static void createsearcherstable (lua_State *L) {
716** setting a finalizer to close all libraries when closing state. 716** setting a finalizer to close all libraries when closing state.
717*/ 717*/
718static void createclibstable (lua_State *L) { 718static void createclibstable (lua_State *L) {
719 lua_newtable(L); /* create CLIBS table */ 719 luaL_getsubtable(L, LUA_REGISTRYINDEX, CLIBS); /* create CLIBS table */
720 lua_createtable(L, 0, 1); /* create metatable for CLIBS */ 720 lua_createtable(L, 0, 1); /* create metatable for CLIBS */
721 lua_pushcfunction(L, gctm); 721 lua_pushcfunction(L, gctm);
722 lua_setfield(L, -2, "__gc"); /* set finalizer for CLIBS table */ 722 lua_setfield(L, -2, "__gc"); /* set finalizer for CLIBS table */
723 lua_setmetatable(L, -2); 723 lua_setmetatable(L, -2);
724 lua_rawsetp(L, LUA_REGISTRYINDEX, &CLIBS); /* set CLIBS table in registry */
725} 724}
726 725
727 726