X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Fconfigmanager.lua;h=03679531b1b20b8a3847ec27c4ed6d962a281ed6;hb=4e2a8775d379a6a94bb976e1e505b214de483807;hp=b9618f860c2dfe7286f71cab916647a4a546e161;hpb=df78ce1570db05d81864252b065f212413b49dad;p=prosody.git diff --git a/core/configmanager.lua b/core/configmanager.lua index b9618f86..03679531 100644 --- a/core/configmanager.lua +++ b/core/configmanager.lua @@ -91,10 +91,10 @@ function load(filename, format) if parsers[format] and parsers[format].load then local f, err = io.open(filename); if f then - local new_config, err = parsers[format].load(f:read("*a"), filename); + local new_config = setmetatable({ ["*"] = { core = {} } }, config_mt); + local ok, err = parsers[format].load(f:read("*a"), filename, new_config); f:close(); - if new_config then - setmetatable(new_config, config_mt); + if ok then config = new_config; fire_event("config-reloaded", { filename = filename, @@ -137,15 +137,13 @@ do local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable; local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring; parsers.lua = {}; - function parsers.lua.load(data, filename) - local config = { ["*"] = { core = {} } }; - + function parsers.lua.load(data, filename, config) local env; -- The ' = true' are needed so as not to set off __newindex when we assign the functions below env = setmetatable({ Host = true, host = true, VirtualHost = true, Component = true, component = true, - Include = true, include = true, RunScript = dofile }, { + Include = true, include = true, RunScript = true }, { __index = function (t, k) return rawget(_G, k) or function (settings_table) @@ -205,14 +203,19 @@ do local f, err = io.open(file); if f then local data = f:read("*a"); - local ok, err = parsers.lua.load(data, file); - if not ok then error(err:gsub("%[string.-%]", file), 0); end + local file = resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file); + local ret, err = parsers.lua.load(data, file, config); + if not ret then error(err:gsub("%[string.-%]", file), 0); end end if not f then error("Error loading included "..file..": "..err, 0); end return f, err; end env.include = env.Include; + function env.RunScript(file) + return dofile(resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file)); + end + local chunk, err = loadstring(data, "@"..filename); if not chunk then @@ -227,7 +230,7 @@ do return nil, err; end - return config; + return true; end end