diff options
author | Brad King <brad.king@kitware.com> | 2001-09-20 14:54:29 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2001-09-20 14:54:29 (GMT) |
commit | 65ef85320a900c620f235fddc17ae2a6068ec75d (patch) | |
tree | 8dc6841de28a34c7536bff6bdf8d217c9f92d8f2 /Source/cmSystemTools.cxx | |
parent | ee86c59cba8884879e94361044dd8d4359abfd6e (diff) | |
download | CMake-65ef85320a900c620f235fddc17ae2a6068ec75d.zip CMake-65ef85320a900c620f235fddc17ae2a6068ec75d.tar.gz CMake-65ef85320a900c620f235fddc17ae2a6068ec75d.tar.bz2 |
ENH: Added cmSystemTools::GlobDirs function to allow wildcards in paths (like /foo/bar/*).
Diffstat (limited to 'Source/cmSystemTools.cxx')
-rw-r--r-- | Source/cmSystemTools.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 29d96ea..f8e1874 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -1305,3 +1305,37 @@ void cmSystemTools::Glob(const char *directory, const char *regexp, } } + +void cmSystemTools::GlobDirs(const char *fullPath, + std::vector<std::string>& files) +{ + std::string path = fullPath; + int pos = path.find("/*"); + if(pos == std::string::npos) + { + files.push_back(fullPath); + return; + } + std::string startPath = path.substr(0, pos); + std::string finishPath = path.substr(pos+2); + + cmDirectory d; + if (d.Load(startPath.c_str())) + { + for (int i = 0; i < d.GetNumberOfFiles(); ++i) + { + if((std::string(d.GetFile(i)) != ".") + && (std::string(d.GetFile(i)) != "..")) + { + std::string fname = startPath; + fname +="/"; + fname += d.GetFile(i); + if(cmSystemTools::FileIsDirectory(fname.c_str())) + { + fname += finishPath; + cmSystemTools::GlobDirs(fname.c_str(), files); + } + } + } + } +} |