diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/filesystem.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/filesystem.cc b/src/filesystem.cc index 0ebe7cf7..428bb029 100644 --- a/src/filesystem.cc +++ b/src/filesystem.cc @@ -144,7 +144,26 @@ dcp::filesystem::canonical(boost::filesystem::path const& path) boost::filesystem::path dcp::filesystem::weakly_canonical(boost::filesystem::path const& path) { +#ifdef DCPOMATIC_HAVE_WEAKLY_CANONICAL return dcp::filesystem::unfix_long_path(boost::filesystem::weakly_canonical(dcp::filesystem::fix_long_path(path))); +#else + boost::filesystem::path complete(boost::filesystem::system_complete(dcp::filesystem::fix_long_path(path))); + boost::filesystem::path result; + for (auto part: complete) { + if (part == "..") { + boost::system::error_code ec; + if (boost::filesystem::is_symlink(result, ec) || result.filename() == "..") { + result /= part; + } else { + result = result.parent_path(); + } + } else if (part != ".") { + result /= part; + } + } + + return dcp::filesystem::unfix_long_path(result.make_preferred()); +#endif } |
