Reverted my change to modulemanager, to restore those made by waqas
[prosody.git] / core / configmanager.lua
index cc7ffb7e46e541ebe24235f7065c523b0a5f1624..5f5648b9ce27160041387b50562512f78bc39614 100644 (file)
@@ -1,5 +1,7 @@
 
 local _G = _G;
+local  setmetatable, loadfile, pcall, rawget, rawset, io = 
+               setmetatable, loadfile, pcall, rawget, rawset, io;
 module "configmanager"
 
 local parsers = {};
@@ -21,6 +23,10 @@ function section_mt(section_name)
                                                        end };
 end
 
+function getconfig()
+       return config;
+end
+
 function get(host, section, key)
        local sec = config[host][section];
        if sec then
@@ -45,15 +51,20 @@ function set(host, section, key, value)
 end
 
 function load(filename, format)
+       format = format or filename:match("%w+$");
        if parsers[format] and parsers[format].load then
                local f = io.open(filename);
                if f then 
-                       local ok, err = parsers[format](f:read("*a"));
+                       local ok, err = parsers[format].load(f:read("*a"));
                        f:close();
                        return ok, err;
                end
        end
-       return false, "no parser";
+       if not format then
+               return nil, "no parser specified";
+       else
+               return false, "no parser";
+       end
 end
 
 function save(filename, format)
@@ -65,21 +76,28 @@ function addparser(format, parser)
        end
 end
 
+-- Built-in Lua parser
 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)
-               local env = setmetatable({}, { __index = function (t, k)
-                                                                                       if k:match("^mod_") then
-                                                                                               return function (settings_table)
+               local env;
+               env = setmetatable({ Host = true; host = true; }, { __index = function (t, k)
+                                                                                               return rawget(_G, k) or
+                                                                                                               function (settings_table)
                                                                                                                        config[__currenthost or "*"][k] = settings_table;
                                                                                                                end;
-                                                                                       end
-                                                                                       return rawget(_G, k);
+                                                                               end,
+                                                               __newindex = function (t, k, v)
+                                                                                       set(env.__currenthost or "*", "core", k, v);
                                                                                end});
                
                function env.Host(name)
-                       env.__currenthost = name;
+                       rawset(env, "__currenthost", name);
+                       set(name or "*", "core", "defined", true);
                end
+               env.host = env.Host;
                
                local chunk, err = loadstring(data);
                
@@ -95,8 +113,6 @@ do
                        return nil, err;
                end
                
-               
-               
                return true;
        end