diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2004-10-10 16:14:58 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2004-10-10 16:14:58 (GMT) |
commit | b221d046a6c1005f2110304c0ca36133e9e96cc4 (patch) | |
tree | da40f01aa8852ced8aae3892df2dd2c84d35f265 /Source/kwsys | |
parent | 890528e0c3e7784710ad3085efe10b0afe3b26a0 (diff) | |
download | CMake-b221d046a6c1005f2110304c0ca36133e9e96cc4.zip CMake-b221d046a6c1005f2110304c0ca36133e9e96cc4.tar.gz CMake-b221d046a6c1005f2110304c0ca36133e9e96cc4.tar.bz2 |
ENH: Add method to retrieve parent directory and for checking if directory is a subdirectory of another directory
Diffstat (limited to 'Source/kwsys')
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 40 | ||||
-rw-r--r-- | Source/kwsys/SystemTools.hxx.in | 6 |
2 files changed, 46 insertions, 0 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index 3a513e6..c871f54 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -2010,6 +2010,46 @@ bool SystemTools::SetPermissions(const char* file, mode_t mode) return true; } +std::string SystemTools::GetParentDirectory(const char* fileOrDir) +{ + if ( !fileOrDir || !*fileOrDir ) + { + return ""; + } + std::string res = fileOrDir; + SystemTools::ConvertToUnixSlashes(res); + std::string::size_type cc = res.size()-1; + if ( res[cc] == '/' ) + { + cc --; + } + for ( ; cc > 0; cc -- ) + { + if ( res[cc] == '/' ) + { + break; + } + } + return res.substr(0, cc); +} + +bool SystemTools::IsSubDirectory(const char* cSubdir, const char* cDir) +{ + std::string subdir = cSubdir; + std::string dir = cDir; + SystemTools::ConvertToUnixSlashes(dir); + std::string path = subdir; + do + { + path = SystemTools::GetParentDirectory(path.c_str()); + if ( dir == path ) + { + return true; + } + } + while ( path.size() > dir.size() ); + return false; +} // These must NOT be initialized. Default initialization to zero is // necessary. diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in index 1d79f2b..89e32a3 100644 --- a/Source/kwsys/SystemTools.hxx.in +++ b/Source/kwsys/SystemTools.hxx.in @@ -316,6 +316,12 @@ public: static bool GetPermissions(const char* file, mode_t& mode); static bool SetPermissions(const char* file, mode_t mode); + /** Get the parent directory of the directory or file */ + static std::string GetParentDirectory(const char* fileOrDir); + + /** Check if the given file or directory is in subdirectory of dir */ + static bool IsSubDirectory(const char* fileOrDir, const char* dir); + protected: // these two functions can be called from ConvertToOutputPath /** |