aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/moduleapi.lua10
-rw-r--r--core/modulemanager.lua2
-rwxr-xr-xprosody7
-rw-r--r--util-src/encodings.c23
-rw-r--r--util-src/hashes.c10
-rw-r--r--util-src/net.c7
-rw-r--r--util-src/pposix.c7
-rw-r--r--util-src/signal.c9
-rw-r--r--util-src/windows.c10
-rw-r--r--util/array.lua1
10 files changed, 57 insertions, 29 deletions
diff --git a/core/moduleapi.lua b/core/moduleapi.lua
index 30d28418..e9609ed9 100644
--- a/core/moduleapi.lua
+++ b/core/moduleapi.lua
@@ -7,7 +7,7 @@
--
local config = require "core.configmanager";
-local modulemanager = require "modulemanager"; -- This is necessary to avoid require loops
+local modulemanager; -- This gets set from modulemanager
local array = require "util.array";
local set = require "util.set";
local logger = require "util.logger";
@@ -19,6 +19,7 @@ local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
local error, setmetatable, type = error, setmetatable, type;
local ipairs, pairs, select = ipairs, pairs, select;
local tonumber, tostring = tonumber, tostring;
+local require = require;
local pack = table.pack or function(...) return {n=select("#",...), ...}; end -- table.pack is only in 5.2
local unpack = table.unpack or unpack; -- renamed in 5.2
@@ -386,7 +387,10 @@ function api:load_resource(path, mode)
end
function api:open_store(name, type)
- return storagemanager.open(self.host, name or self.name, type);
+ return require"core.storagemanager".open(self.host, name or self.name, type);
end
-return api;
+return function (mm)
+ modulemanager = mm;
+ return api;
+end
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index db4c6bd0..198e208a 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -37,7 +37,7 @@ local _G = _G;
module "modulemanager"
-local api = _G.require "core.moduleapi"; -- Module API container
+local api = _G.require "core.moduleapi"(_M); -- Module API container
-- [host] = { [module] = module_env }
local modulemap = { ["*"] = {} };
diff --git a/prosody b/prosody
index 8fcee8e8..aab803c5 100755
--- a/prosody
+++ b/prosody
@@ -153,7 +153,12 @@ function sandbox_require()
local _real_require = require;
if not getfenv then
-- FIXME: This is a hack to replace getfenv() in Lua 5.2
- function getfenv(f) return debug.getupvalue(debug.getinfo(f or 1).func, 1); end
+ function getfenv(f)
+ local name, env = debug.getupvalue(debug.getinfo(f or 1).func, 1);
+ if name == "_ENV" then
+ return env;
+ end
+ end
end
function require(...)
local curr_env = getfenv(2);
diff --git a/util-src/encodings.c b/util-src/encodings.c
index b9b6160a..2d5d49d4 100644
--- a/util-src/encodings.c
+++ b/util-src/encodings.c
@@ -20,6 +20,10 @@
#include "lua.h"
#include "lauxlib.h"
+#if (LUA_VERSION_NUM == 502)
+#define luaL_register(L, N, R) luaL_setfuncs(L, R, 0)
+#endif
+
/***************** BASE64 *****************/
static const char code[]=
@@ -361,35 +365,26 @@ static const luaL_Reg Reg_idna[] =
/***************** end *****************/
-static const luaL_Reg Reg[] =
-{
- { NULL, NULL }
-};
-
LUALIB_API int luaopen_util_encodings(lua_State *L)
{
#ifdef USE_STRINGPREP_ICU
init_icu();
#endif
- luaL_register(L, "encodings", Reg);
+ lua_newtable(L);
- lua_pushliteral(L, "base64");
lua_newtable(L);
luaL_register(L, NULL, Reg_base64);
- lua_settable(L,-3);
+ lua_setfield(L, -2, "base64");
- lua_pushliteral(L, "stringprep");
lua_newtable(L);
luaL_register(L, NULL, Reg_stringprep);
- lua_settable(L,-3);
+ lua_setfield(L, -2, "stringprep");
- lua_pushliteral(L, "idna");
lua_newtable(L);
luaL_register(L, NULL, Reg_idna);
- lua_settable(L,-3);
+ lua_setfield(L, -2, "idna");
- lua_pushliteral(L, "version"); /** version */
lua_pushliteral(L, "-3.14");
- lua_settable(L,-3);
+ lua_setfield(L, -2, "version");
return 1;
}
diff --git a/util-src/hashes.c b/util-src/hashes.c
index 33041e83..459f75ac 100644
--- a/util-src/hashes.c
+++ b/util-src/hashes.c
@@ -27,6 +27,10 @@ typedef unsigned __int32 uint32_t;
#include <openssl/sha.h>
#include <openssl/md5.h>
+#if (LUA_VERSION_NUM == 502)
+#define luaL_register(L, N, R) luaL_setfuncs(L, R, 0)
+#endif
+
#define HMAC_IPAD 0x36363636
#define HMAC_OPAD 0x5c5c5c5c
@@ -203,9 +207,9 @@ static const luaL_Reg Reg[] =
LUALIB_API int luaopen_util_hashes(lua_State *L)
{
- luaL_register(L, "hashes", Reg);
- lua_pushliteral(L, "version"); /** version */
+ lua_newtable(L);
+ luaL_register(L, NULL, Reg);
lua_pushliteral(L, "-3.14");
- lua_settable(L,-3);
+ lua_setfield(L, -2, "version");
return 1;
}
diff --git a/util-src/net.c b/util-src/net.c
index e307c628..9e57854c 100644
--- a/util-src/net.c
+++ b/util-src/net.c
@@ -26,6 +26,10 @@
#include <lua.h>
#include <lauxlib.h>
+#if (LUA_VERSION_NUM == 502)
+#define luaL_register(L, N, R) luaL_setfuncs(L, R, 0)
+#endif
+
/* Enumerate all locally configured IP addresses */
const char * const type_strings[] = {
@@ -112,6 +116,7 @@ int luaopen_util_net(lua_State* L)
{ NULL, NULL }
};
- luaL_register(L, "net", exports);
+ lua_newtable(L);
+ luaL_register(L, NULL, exports);
return 1;
}
diff --git a/util-src/pposix.c b/util-src/pposix.c
index 9b3e97eb..49e80f71 100644
--- a/util-src/pposix.c
+++ b/util-src/pposix.c
@@ -35,6 +35,10 @@
#include "lualib.h"
#include "lauxlib.h"
+#if (LUA_VERSION_NUM == 502)
+#define luaL_register(L, N, R) luaL_setfuncs(L, R, 0)
+#endif
+
#include <fcntl.h>
#if defined(__linux__) && defined(_GNU_SOURCE)
#include <linux/falloc.h>
@@ -768,7 +772,8 @@ int luaopen_util_pposix(lua_State *L)
{ NULL, NULL }
};
- luaL_register(L, "pposix", exports);
+ lua_newtable(L);
+ luaL_register(L, NULL, exports);
lua_pushliteral(L, "pposix");
lua_setfield(L, -2, "_NAME");
diff --git a/util-src/signal.c b/util-src/signal.c
index 961d2d3e..63d65570 100644
--- a/util-src/signal.c
+++ b/util-src/signal.c
@@ -32,6 +32,10 @@
#include "lua.h"
#include "lauxlib.h"
+#if (LUA_VERSION_NUM == 502)
+#define luaL_register(L, N, R) luaL_setfuncs(L, R, 0)
+#endif
+
#ifndef lsig
#define lsig
@@ -384,13 +388,14 @@ int luaopen_util_signal(lua_State *L)
int i = 0;
/* add the library */
- luaL_register(L, "signal", lsignal_lib);
+ lua_newtable(L);
+ luaL_register(L, NULL, lsignal_lib);
/* push lua_signals table into the registry */
/* put the signals inside the library table too,
* they are only a reference */
lua_pushstring(L, LUA_SIGNAL);
- lua_createtable(L, 0, 0);
+ lua_newtable(L);
while (lua_signals[i].name != NULL)
{
diff --git a/util-src/windows.c b/util-src/windows.c
index 3d14ca95..37f850e3 100644
--- a/util-src/windows.c
+++ b/util-src/windows.c
@@ -19,6 +19,10 @@
#include "lua.h"
#include "lauxlib.h"
+#if (LUA_VERSION_NUM == 502)
+#define luaL_register(L, N, R) luaL_setfuncs(L, R, 0)
+#endif
+
static int Lget_nameservers(lua_State *L) {
char stack_buffer[1024]; // stack allocated buffer
IP4_ARRAY* ips = (IP4_ARRAY*) stack_buffer;
@@ -81,9 +85,9 @@ static const luaL_Reg Reg[] =
};
LUALIB_API int luaopen_util_windows(lua_State *L) {
- luaL_register(L, "windows", Reg);
- lua_pushliteral(L, "version"); /** version */
+ lua_newtable(L);
+ luaL_register(L, NULL, Reg);
lua_pushliteral(L, "-3.14");
- lua_settable(L,-3);
+ lua_setfield(L, -2, "version");
return 1;
}
diff --git a/util/array.lua b/util/array.lua
index 6f2abe04..b10396b1 100644
--- a/util/array.lua
+++ b/util/array.lua
@@ -14,6 +14,7 @@ local math_random = math.random;
local math_floor = math.floor;
local pairs, ipairs = pairs, ipairs;
local tostring = tostring;
+local type = type;
local array = {};
local array_base = {};