summaryrefslogtreecommitdiffstats
path: root/Source/kwsys
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2004-10-10 16:14:58 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2004-10-10 16:14:58 (GMT)
commitb221d046a6c1005f2110304c0ca36133e9e96cc4 (patch)
treeda40f01aa8852ced8aae3892df2dd2c84d35f265 /Source/kwsys
parent890528e0c3e7784710ad3085efe10b0afe3b26a0 (diff)
downloadCMake-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.cxx40
-rw-r--r--Source/kwsys/SystemTools.hxx.in6
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
/**