From 7e04a3d265160694e6d1af4427a0a41dd57c3b28 Mon Sep 17 00:00:00 2001 From: Brad King <brad.king@kitware.com> Date: Thu, 8 Jun 2017 13:38:30 -0400 Subject: [PATCH] SystemTools: Remove RemoveEmptyPathElements method This method was added recently but we've found another solution for its intended use case. Removing empty path elements can corrupt paths that depend on a trailing empty component to preserve a trailing slash. Since this method was meant to complement SplitPath and JoinPath, update their documentation to explain how they treat empty components. --- SystemTools.cxx | 11 ----------- SystemTools.hxx.in | 12 ++++++++---- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/SystemTools.cxx b/SystemTools.cxx index 1c4fe33..c5bbd41 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -22,7 +22,6 @@ #include KWSYS_HEADER(FStream.hxx) #include KWSYS_HEADER(Encoding.hxx) -#include <algorithm> #include <fstream> #include <iostream> #include <set> @@ -3709,16 +3708,6 @@ std::string SystemTools::JoinPath( return result; } -void SystemTools::RemoveEmptyPathElements(std::vector<std::string>& path) -{ - if (path.empty()) { - return; - } - - path.erase(std::remove(path.begin() + 1, path.end(), std::string("")), - path.end()); -} - bool SystemTools::ComparePath(const std::string& c1, const std::string& c2) { #if defined(_WIN32) || defined(__APPLE__) diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 5e091c2..1672e92 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -461,6 +461,10 @@ public: * produce the original path. Home directory references are * automatically expanded if expand_home_dir is true and this * platform supports them. + * + * This does *not* normalize the input path. All components are + * preserved, including empty ones. Typically callers should use + * this only on paths that have already been normalized. */ static void SplitPath(const std::string& p, std::vector<std::string>& components, @@ -469,15 +473,15 @@ public: /** * Join components of a path name into a single string. See * SplitPath for the format of the components. + * + * This does *not* normalize the input path. All components are + * preserved, including empty ones. Typically callers should use + * this only on paths that have already been normalized. */ static std::string JoinPath(const std::vector<std::string>& components); static std::string JoinPath(std::vector<std::string>::const_iterator first, std::vector<std::string>::const_iterator last); - /** Removes empty components from path. - */ - static void RemoveEmptyPathElements(std::vector<std::string>& path); - /** * Compare a path or components of a path. */ -- GitLab