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