Commit b221d046 authored by Andy Cedilnik's avatar Andy Cedilnik
Browse files

ENH: Add method to retrieve parent directory and for checking if directory is...

ENH: Add method to retrieve parent directory and for checking if directory is a subdirectory of another directory
parent 890528e0
......@@ -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.
......
......@@ -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
/**
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment