ENH: Add method to find file in parent directories if it exists
This commit is contained in:
parent
9a92c429f2
commit
bc66973061
|
@ -2071,6 +2071,29 @@ bool SystemTools::IsSubDirectory(const char* cSubdir, const char* cDir)
|
|||
return false;
|
||||
}
|
||||
|
||||
kwsys_stl::string SystemTools::FileExistsInParentDirectories(const char* fname,
|
||||
const char* directory, const char* toplevel)
|
||||
{
|
||||
kwsys_stl::string file = fname;
|
||||
SystemTools::ConvertToUnixSlashes(file);
|
||||
kwsys_stl::string dir = directory;
|
||||
SystemTools::ConvertToUnixSlashes(dir);
|
||||
while ( 1 )
|
||||
{
|
||||
kwsys_stl::string path = dir + "/" + file;
|
||||
if ( SystemTools::FileExists(path.c_str()) )
|
||||
{
|
||||
return path;
|
||||
}
|
||||
if ( dir.size() < strlen(toplevel) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
dir = SystemTools::GetParentDirectory(dir.c_str());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// These must NOT be initialized. Default initialization to zero is
|
||||
// necessary.
|
||||
unsigned int SystemToolsManagerCount;
|
||||
|
|
|
@ -322,6 +322,12 @@ public:
|
|||
/** Check if the given file or directory is in subdirectory of dir */
|
||||
static bool IsSubDirectory(const char* fileOrDir, const char* dir);
|
||||
|
||||
/** Check if the given file exists in one of the parent directory of the
|
||||
* given file or directory and if it does, return the name of the file.
|
||||
* Toplevel specifies the top-most directory to where it will look.*/
|
||||
static kwsys_stl::string FileExistsInParentDirectories(const char* fname,
|
||||
const char* directory, const char* toplevel);
|
||||
|
||||
protected:
|
||||
// these two functions can be called from ConvertToOutputPath
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue