diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 0fc6e34ec..d9f51f8b2 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -1186,15 +1186,15 @@ bool cmSystemTools::CreateSymlink(const char* origName, const char* newName) #endif -std::vector cmSystemTools::SplitString(const char* p, char sep) +std::vector cmSystemTools::SplitString(const char* p, char sep, bool isPath) { std::string path = p; std::vector paths; - if(path[0] == '/') + if(isPath && path[0] == '/') { path.erase(path.begin()); + paths.push_back("/"); } - paths.push_back("/"); std::string::size_type pos1 = 0; std::string::size_type pos2 = path.find(sep, pos1+1); while(pos2 != std::string::npos) @@ -1232,8 +1232,9 @@ std::string cmSystemTools::RelativePath(const char* local, const char* remote) } std::string relativePath; // result string // split up both paths into arrays of strings using / as a separator - std::vector fileSplit = cmSystemTools::SplitString(local); - std::vector relativeSplit = cmSystemTools::SplitString(remote); + std::string localString = local; + std::vector fileSplit = cmSystemTools::SplitString(local, '/', true); + std::vector relativeSplit = cmSystemTools::SplitString(remote, '/', true); std::vector commonPath; std::vector finalPath; // count up how many matching directory names there are from the start diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index a5046e4a0..43a5dafcb 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -279,8 +279,13 @@ public: */ static std::string RelativePath(const char* local, const char* remote); - ///! split a path by separator into an array of strings, default is / - static std::vector SplitString(const char* s, char separator = '/'); + /** split a path by separator into an array of strings, default is /. + If isPath is true then the string is treated like a path and if + s starts with a / then the first element of the returned array will + be /, so /foo/bar will be [/, foo, bar] + */ + static std::vector SplitString(const char* s, char separator = '/', + bool isPath = false); /** put a string into the environment of the form var=value */ static bool PutEnv(const char* value);