diff --git a/src/api/system.c b/src/api/system.c index 47709344..e35e4558 100644 --- a/src/api/system.c +++ b/src/api/system.c @@ -690,8 +690,10 @@ static int f_load_native_plugin(lua_State* L) { void* library = SDL_LoadObject(path); if (name == 0 || !library) return luaL_error(L, "Unable to load %s: %s", name, SDL_GetError()); + lua_getfield(L, LUA_REGISTRYINDEX, "native_plugins"); lua_pushlightuserdata(L, library); - lua_setfield(L, LUA_REGISTRYINDEX, name); + lua_setfield(L, -2, name); + lua_pop(L, 1); for (sname = namelen - 1; sname > 0 && name[sname] != '.'; --sname); snprintf(olib, sizeof(olib), "lua_open_lite_xl_%s", &name[sname+1]); int (*ext_entrypoint)(lua_State* L, void*) = SDL_LoadFunction(library, olib); diff --git a/src/main.c b/src/main.c index 4b15ef34..4a95a76b 100644 --- a/src/main.c +++ b/src/main.c @@ -152,6 +152,9 @@ init_lua: lua_setglobal(L, "LINUX"); #endif + lua_newtable(L); + lua_setfield(L, LUA_REGISTRYINDEX, "native_plugins"); + const char *init_lite_code = \ "local core\n" "xpcall(function()\n"