ENH: Add method to retrieve parent directory and for checking if directory is a subdirectory of another directory
This commit is contained in:
parent
890528e0c3
commit
b221d046a6
|
@ -2010,6 +2010,46 @@ bool SystemTools::SetPermissions(const char* file, mode_t mode)
|
||||||
return true;
|
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
|
// These must NOT be initialized. Default initialization to zero is
|
||||||
// necessary.
|
// necessary.
|
||||||
|
|
|
@ -316,6 +316,12 @@ public:
|
||||||
static bool GetPermissions(const char* file, mode_t& mode);
|
static bool GetPermissions(const char* file, mode_t& mode);
|
||||||
static bool SetPermissions(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:
|
protected:
|
||||||
// these two functions can be called from ConvertToOutputPath
|
// these two functions can be called from ConvertToOutputPath
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue