util.pluginloader: Add support for multiple plugin directories.
authorWaqas Hussain <waqas20@gmail.com>
Fri, 21 Jan 2011 04:35:49 +0500
changeset 4121 ea7e3f22f898
parent 4120 d62a2861f1f9
child 4122 2e4bc196fd2a
util.pluginloader: Add support for multiple plugin directories.
util/pluginloader.lua
--- a/util/pluginloader.lua	Fri Jan 21 04:27:46 2011 +0500
+++ b/util/pluginloader.lua	Fri Jan 21 04:35:49 2011 +0500
@@ -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 @@
 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();