diff options
Diffstat (limited to 'loadlib.c')
-rw-r--r-- | loadlib.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -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 | */ |
62 | static const int CLIBS = 0; | 62 | static 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 | */ |
328 | static void *checkclib (lua_State *L, const char *path) { | 328 | static 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 | */ |
342 | static void addtoclib (lua_State *L, const char *path, void *plib) { | 342 | static 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 | */ |
718 | static void createclibstable (lua_State *L) { | 718 | static 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 | ||