aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2014-05-09 19:34:35 +0200
committerKim Alvefur <zash@zash.se>2014-05-09 19:34:35 +0200
commite242d9ba34bb6f54b8efb9665564a7a36cbf9689 (patch)
treea5bf50b6190a6d090716eb8f368bb35684f11679 /util
parentfda97ec24221701d82864b0b32e2eab72d5d5b6d (diff)
downloadprosody-e242d9ba34bb6f54b8efb9665564a7a36cbf9689.tar.gz
prosody-e242d9ba34bb6f54b8efb9665564a7a36cbf9689.zip
core.configmanager: Move path utility functions into util.paths
Diffstat (limited to 'util')
-rw-r--r--util/paths.lua38
1 files changed, 38 insertions, 0 deletions
diff --git a/util/paths.lua b/util/paths.lua
new file mode 100644
index 00000000..3e5744df
--- /dev/null
+++ b/util/paths.lua
@@ -0,0 +1,38 @@
+local path_sep = package.config:sub(1,1);
+
+local path_util = {}
+
+-- Helper function to resolve relative paths (needed by config)
+function path_util.resolve_relative_path(parent_path, path)
+ if path then
+ -- Some normalization
+ parent_path = parent_path:gsub("%"..path_sep.."+$", "");
+ path = path:gsub("^%.%"..path_sep.."+", "");
+
+ local is_relative;
+ if path_sep == "/" and path:sub(1,1) ~= "/" then
+ is_relative = true;
+ elseif path_sep == "\\" and (path:sub(1,1) ~= "/" and (path:sub(2,3) ~= ":\\" and path:sub(2,3) ~= ":/")) then
+ is_relative = true;
+ end
+ if is_relative then
+ return parent_path..path_sep..path;
+ end
+ end
+ return path;
+end
+
+-- Helper function to convert a glob to a Lua pattern
+function path_util.glob_to_pattern(glob)
+ return "^"..glob:gsub("[%p*?]", function (c)
+ if c == "*" then
+ return ".*";
+ elseif c == "?" then
+ return ".";
+ else
+ return "%"..c;
+ end
+ end).."$";
+end
+
+return path_util;