diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2004-10-14 15:46:30 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2004-10-14 15:46:30 (GMT) |
commit | ef8385744b03068f53dc2710c53d160d05e7cf2a (patch) | |
tree | 754c829d031cd5bb8859f7ce4659257cadea26be /Source | |
parent | 78e8f12b86e7e4d21c8af1463a166341ba7398e7 (diff) | |
download | CMake-ef8385744b03068f53dc2710c53d160d05e7cf2a.zip CMake-ef8385744b03068f53dc2710c53d160d05e7cf2a.tar.gz CMake-ef8385744b03068f53dc2710c53d160d05e7cf2a.tar.bz2 |
BUG: allow split string to know if it is separating a path
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmSystemTools.cxx | 11 | ||||
-rw-r--r-- | Source/cmSystemTools.h | 9 |
2 files changed, 13 insertions, 7 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 0fc6e34..d9f51f8 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<cmStdString> cmSystemTools::SplitString(const char* p, char sep) +std::vector<cmStdString> cmSystemTools::SplitString(const char* p, char sep, bool isPath) { std::string path = p; std::vector<cmStdString> 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<cmStdString> fileSplit = cmSystemTools::SplitString(local); - std::vector<cmStdString> relativeSplit = cmSystemTools::SplitString(remote); + std::string localString = local; + std::vector<cmStdString> fileSplit = cmSystemTools::SplitString(local, '/', true); + std::vector<cmStdString> relativeSplit = cmSystemTools::SplitString(remote, '/', true); std::vector<cmStdString> commonPath; std::vector<cmStdString> finalPath; // count up how many matching directory names there are from the start diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index a5046e4..43a5daf 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<cmStdString> 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<cmStdString> 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); |