util.pluginloader: Add support for multiple plugin directories.
authorWaqas Hussain <waqas20@gmail.com>
Thu, 20 Jan 2011 23:35:49 +0000 (04:35 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Thu, 20 Jan 2011 23:35:49 +0000 (04:35 +0500)
util/pluginloader.lua

index 31ab1e882fa0fcb595dab277c3bfb8b46f39dcf7..1aedd6302e1670ed9d1fc3bc93fe290a501de2ec 100644 (file)
@@ -6,8 +6,13 @@
 -- 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;
@@ -15,7 +20,11 @@ local loadstring, pairs = loadstring, pairs;
 module "pluginloader"
 
 local function load_file(name)
-       local file, err = io_open(plugin_dir..name);
+       local file, err;
+       for i=1,#plugin_dir do
+               file, err = io_open(plugin_dir[i]..name);
+               if file then break; end
+       end
        if not file then return file, err; end
        local content = file:read("*a");
        file:close();