Add a simple globbing of files and directories
This commit is contained in:
parent
8ac50c4aad
commit
f895a94995
|
@ -2259,6 +2259,59 @@ bool cmSystemTools::GetShortPath(const char* path, std::string& shortPath)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmSystemTools::SimpleGlob(const std::string& glob,
|
||||||
|
std::vector<std::string>& files,
|
||||||
|
int type /* = 0 */)
|
||||||
|
{
|
||||||
|
if ( glob[glob.size()-1] != '*' )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
std::string path = cmSystemTools::GetFilenamePath(glob);
|
||||||
|
std::string ppath = cmSystemTools::GetFilenameName(glob);
|
||||||
|
ppath = ppath.substr(0, ppath.size()-1);
|
||||||
|
if ( path.size() == 0 )
|
||||||
|
{
|
||||||
|
path = "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool res;
|
||||||
|
cmDirectory d;
|
||||||
|
if (d.Load(path.c_str()))
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < d.GetNumberOfFiles(); ++i)
|
||||||
|
{
|
||||||
|
if((std::string(d.GetFile(i)) != ".")
|
||||||
|
&& (std::string(d.GetFile(i)) != ".."))
|
||||||
|
{
|
||||||
|
std::string fname = path;
|
||||||
|
if ( path[path.size()-1] != '/' )
|
||||||
|
{
|
||||||
|
fname +="/";
|
||||||
|
}
|
||||||
|
fname += d.GetFile(i);
|
||||||
|
std::string sfname = d.GetFile(i);
|
||||||
|
if ( type > 0 && cmSystemTools::FileIsDirectory(fname.c_str()) )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( type < 0 && !cmSystemTools::FileIsDirectory(fname.c_str()) )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( sfname.size() >= ppath.size() &&
|
||||||
|
sfname.substr(0, ppath.size()) ==
|
||||||
|
ppath )
|
||||||
|
{
|
||||||
|
files.push_back(fname);
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
cmSystemTools::e_FileFormat cmSystemTools::GetFileFormat(const char* cext)
|
cmSystemTools::e_FileFormat cmSystemTools::GetFileFormat(const char* cext)
|
||||||
{
|
{
|
||||||
if ( ! cext || *cext == 0 )
|
if ( ! cext || *cext == 0 )
|
||||||
|
|
|
@ -235,6 +235,18 @@ public:
|
||||||
static void Glob(const char *directory, const char *regexp,
|
static void Glob(const char *directory, const char *regexp,
|
||||||
std::vector<std::string>& files);
|
std::vector<std::string>& files);
|
||||||
static void GlobDirs(const char *fullPath, std::vector<std::string>& files);
|
static void GlobDirs(const char *fullPath, std::vector<std::string>& files);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to find a list of files that match the "simple" globbing
|
||||||
|
* expression. At this point in time the globbing expressions have
|
||||||
|
* to be in form: /directory/partial_file_name*. The * character has
|
||||||
|
* to be at the end of the string and it does not support ?
|
||||||
|
* []... The optional argument type specifies what kind of files you
|
||||||
|
* want to find. 0 means all files, -1 means directories, 1 means
|
||||||
|
* files only. This method returns true if search was succesfull.
|
||||||
|
*/
|
||||||
|
static bool SimpleGlob(const std::string& glob, std::vector<std::string>& files,
|
||||||
|
int type = 0);
|
||||||
|
|
||||||
static std::string GetCurrentWorkingDirectory();
|
static std::string GetCurrentWorkingDirectory();
|
||||||
static std::string GetProgramPath(const char*);
|
static std::string GetProgramPath(const char*);
|
||||||
|
|
Loading…
Reference in New Issue