util.pluginloader: Return full file path from internal file loader on success, not...
[prosody.git] / util / pluginloader.lua
index 07b4e5c7b7f5545a998e42ae9cb953a091d51b81..d955353730241dd1d3194bdcd9147d4d073668fa 100644 (file)
@@ -6,22 +6,30 @@
 -- COPYING file in the source package for more information.
 --
 
-
-local plugin_dir = CFG_PLUGINDIR or "./plugins/";
+local dir_sep, path_sep = package.config:match("^(%S+)%s(%S+)");
+local plugin_dir = {};
+for path in (CFG_PLUGINDIR or "./plugins/"):gsub("[/\\]", dir_sep):gmatch("[^"..path_sep.."]+") do
+       path = path..dir_sep; -- add path separator to path end
+       path = path:gsub(dir_sep..dir_sep.."+", dir_sep); -- coalesce multiple separaters
+       plugin_dir[#plugin_dir + 1] = path;
+end
 
 local io_open, os_time = io.open, os.time;
 local loadstring, pairs = loadstring, pairs;
 
-local datamanager = require "util.datamanager";
-
 module "pluginloader"
 
 local function load_file(name)
-       local file, err = io_open(plugin_dir..name);
+       local file, err, path;
+       for i=1,#plugin_dir do
+               path = plugin_dir[i]..name;
+               file, err = io_open(path);
+               if file then break; end
+       end
        if not file then return file, err; end
        local content = file:read("*a");
        file:close();
-       return content, name;
+       return content, path;
 end
 
 function load_resource(plugin, resource, loader)