summaryrefslogtreecommitdiffstats
path: root/Source/cmGlob.cxx
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2004-02-06 20:26:15 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2004-02-06 20:26:15 (GMT)
commit31c1071ebfb559ba4d0cd113e54f85d9e2228d77 (patch)
treebd00b78f5e1dbda7c87240af64127c87b01dbb81 /Source/cmGlob.cxx
parent9c744cfe35060d5d389b5d37d8d48ecf68a3b93f (diff)
downloadCMake-31c1071ebfb559ba4d0cd113e54f85d9e2228d77.zip
CMake-31c1071ebfb559ba4d0cd113e54f85d9e2228d77.tar.gz
CMake-31c1071ebfb559ba4d0cd113e54f85d9e2228d77.tar.bz2
ENH: When nor specifying full path, make sure it actually works, on broken filesystems fix case of files.
Diffstat (limited to 'Source/cmGlob.cxx')
-rw-r--r--Source/cmGlob.cxx22
1 files changed, 18 insertions, 4 deletions
diff --git a/Source/cmGlob.cxx b/Source/cmGlob.cxx
index 20db17e..8454384 100644
--- a/Source/cmGlob.cxx
+++ b/Source/cmGlob.cxx
@@ -163,6 +163,7 @@ void cmGlob::RecurseDirectory(const std::string& dir, bool dir_only)
}
unsigned long cc;
std::string fullname;
+ std::string realname;
std::string fname;
for ( cc = 0; cc < d.GetNumberOfFiles(); cc ++ )
{
@@ -173,6 +174,8 @@ void cmGlob::RecurseDirectory(const std::string& dir, bool dir_only)
continue;
}
+ realname = dir + "/" + fname;
+
#if defined( CM_GLOB_CASE_INDEPENDENT )
// On Windows and apple, no difference between lower and upper case
fname = cmsys::SystemTools::LowerCase(fname);
@@ -210,6 +213,7 @@ void cmGlob::ProcessDirectory(std::string::size_type start,
}
unsigned long cc;
std::string fullname;
+ std::string realname;
std::string fname;
for ( cc = 0; cc < d.GetNumberOfFiles(); cc ++ )
{
@@ -220,6 +224,15 @@ void cmGlob::ProcessDirectory(std::string::size_type start,
continue;
}
+ if ( start == 0 )
+ {
+ realname = dir + fname;
+ }
+ else
+ {
+ realname = dir + "/" + fname;
+ }
+
#if defined( CM_GLOB_CASE_INDEPENDENT )
// On Windows and apple, no difference between lower and upper case
fname = cmsys::SystemTools::LowerCase(fname);
@@ -247,11 +260,11 @@ void cmGlob::ProcessDirectory(std::string::size_type start,
{
if ( last )
{
- m_Internals->Files.push_back(fullname);
+ m_Internals->Files.push_back(realname);
}
else
{
- this->ProcessDirectory(start+1, fullname + "/", dir_only);
+ this->ProcessDirectory(start+1, realname + "/", dir_only);
}
}
}
@@ -271,6 +284,7 @@ bool cmGlob::FindFiles(const std::string& inexpr)
expr = cmsys::SystemTools::GetCurrentWorkingDirectory();
expr += "/" + inexpr;
}
+ std::string fexpr = expr;
int skip = 0;
int last_slash = 0;
@@ -289,7 +303,7 @@ bool cmGlob::FindFiles(const std::string& inexpr)
}
if ( last_slash > 0 )
{
- //std::cout << "I can skip: " << inexpr.substr(0, last_slash) << std::endl;
+ //std::cout << "I can skip: " << fexpr.substr(0, last_slash) << std::endl;
skip = last_slash;
}
if ( skip == 0 )
@@ -351,7 +365,7 @@ bool cmGlob::FindFiles(const std::string& inexpr)
// Handle network paths
if ( skip > 0 )
{
- this->ProcessDirectory(0, inexpr.substr(0, skip) + "/",
+ this->ProcessDirectory(0, fexpr.substr(0, skip) + "/",
true);
}
else