summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-11-18 23:09:26 +0100
committerCarl Hetherington <cth@carlh.net>2025-11-20 00:15:08 +0100
commit7b8f3de97be7d8799e40a4a60e2ad5d35fb3456d (patch)
tree8d72e9a28bdf7bc2c1e336b5e78c0663af4bbc44 /src
parentc6447ef322e1eb3b01bb25cbe19e116849c3c118 (diff)
Add and test relative_path() method.
Diffstat (limited to 'src')
-rw-r--r--src/lib/util.cc12
-rw-r--r--src/lib/util.h9
2 files changed, 21 insertions, 0 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc
index 8628ee3e0..ef12e63ad 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -1180,3 +1180,15 @@ force(AVPixelFormat format)
return [format](AVPixelFormat) { return format; };
}
+
+boost::filesystem::path
+relative_path(boost::filesystem::path const& path, boost::filesystem::path const& base)
+{
+ auto relative = boost::filesystem::relative(path, base);
+ if (relative == boost::filesystem::path()) {
+ return path;
+ }
+
+ return relative;
+}
+
diff --git a/src/lib/util.h b/src/lib/util.h
index 846059e1a..f6c8e573f 100644
--- a/src/lib/util.h
+++ b/src/lib/util.h
@@ -103,6 +103,15 @@ extern std::string rfc_2822_date(time_t time);
bool paths_exist(std::vector<boost::filesystem::path> const& paths);
std::function<AVPixelFormat (AVPixelFormat)> force(AVPixelFormat format);
+/** @param path Some path.
+ * @param base Some base path.
+ * @return path relative to base, if possible, otherwise path.
+ *
+ * This wraps boost::filesystem::path which returns an empty path if you try to get an impossible
+ * relative path on Windows (e.g. X:\foo relative to C:\bar).
+ */
+boost::filesystem::path relative_path(boost::filesystem::path const& path, boost::filesystem::path const& base);
+
template <class T>
T