ENH: Add method to retrieve parent directory and for checking if directory is a subdirectory of another directory

This commit is contained in:
Andy Cedilnik 2004-10-10 12:14:58 -04:00
parent 890528e0c3
commit b221d046a6
2 changed files with 46 additions and 0 deletions

View File

@ -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.

View File

@ -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
/**