Merge branch 'module-notices' into CMakeParseArguments

This commit is contained in:
Brad King 2010-08-17 09:26:57 -04:00
commit 9eb6cc1c9d
3 changed files with 56 additions and 49 deletions

View File

@ -3059,39 +3059,45 @@ kwsys_stl::string SystemTools::RelativePath(const char* local, const char* remot
static int GetCasePathName(const kwsys_stl::string & pathIn, static int GetCasePathName(const kwsys_stl::string & pathIn,
kwsys_stl::string & casePath) kwsys_stl::string & casePath)
{ {
kwsys_stl::string::size_type iFound = pathIn.rfind('/'); kwsys_stl::vector<kwsys::String> path_components =
if (iFound > 1 && iFound != pathIn.npos) SystemTools::SplitString(pathIn.c_str(), '/', true);
if(path_components.empty())
{ {
// recurse to peel off components casePath = "";
// return 0;
if (GetCasePathName(pathIn.substr(0, iFound), casePath) > 0)
{
casePath += '/';
if (pathIn[1] != '/')
{
WIN32_FIND_DATA findData;
// append the long component name to the path
//
HANDLE hFind = ::FindFirstFile(pathIn.c_str(), &findData);
if (INVALID_HANDLE_VALUE != hFind)
{
casePath += findData.cFileName;
::FindClose(hFind);
}
else
{
// if FindFirstFile fails, return the error code
//
casePath = "";
return 0;
}
}
}
} }
else kwsys_stl::vector<kwsys_stl::string>::size_type idx = 0;
// assume always absolute path, so just take first
casePath = path_components[idx++];
// If network path, fill casePath with server/share so FindFirstFile
// will work after that. Maybe someday call other APIs to get
// actual case of servers and shares.
if(path_components.size() > 2 && pathIn.size() >= 2 &&
pathIn[0] == '/' && pathIn[1] == '/')
{ {
casePath = pathIn; casePath += path_components[idx++];
casePath += "/";
casePath += path_components[idx++];
}
for(; idx < path_components.size(); idx++)
{
casePath += "/";
kwsys_stl::string test_str = casePath;
test_str += path_components[idx];
WIN32_FIND_DATA findData;
HANDLE hFind = ::FindFirstFile(test_str.c_str(), &findData);
if (INVALID_HANDLE_VALUE != hFind)
{
casePath += findData.cFileName;
::FindClose(hFind);
}
else
{
casePath = "";
return 0;
}
} }
return (int)casePath.size(); return (int)casePath.size();
} }
@ -3104,25 +3110,26 @@ kwsys_stl::string SystemTools::GetActualCaseForPath(const char* p)
#ifndef _WIN32 #ifndef _WIN32
return p; return p;
#else #else
// Check to see if actual case has already been called kwsys_stl::string casePath = p;
// for this path, and the result is stored in the LongPathMap
SystemToolsTranslationMap::iterator i =
SystemTools::LongPathMap->find(p);
if(i != SystemTools::LongPathMap->end())
{
return i->second;
}
kwsys_stl::string casePath;
int len = GetCasePathName(p, casePath);
if(len == 0 || len > MAX_PATH+1)
{
return p;
}
// make sure drive letter is always upper case // make sure drive letter is always upper case
if(casePath.size() > 1 && casePath[1] == ':') if(casePath.size() > 1 && casePath[1] == ':')
{ {
casePath[0] = toupper(casePath[0]); casePath[0] = toupper(casePath[0]);
} }
// Check to see if actual case has already been called
// for this path, and the result is stored in the LongPathMap
SystemToolsTranslationMap::iterator i =
SystemTools::LongPathMap->find(casePath);
if(i != SystemTools::LongPathMap->end())
{
return i->second;
}
int len = GetCasePathName(p, casePath);
if(len == 0 || len > MAX_PATH+1)
{
return p;
}
(*SystemTools::LongPathMap)[p] = casePath; (*SystemTools::LongPathMap)[p] = casePath;
return casePath; return casePath;
#endif #endif
@ -3143,9 +3150,9 @@ const char* SystemTools::SplitPathRootComponent(const char* p,
} }
c += 2; c += 2;
} }
else if(c[0] == '/') else if(c[0] == '/' || c[0] == '\\')
{ {
// Unix path. // Unix path (or Windows path w/out drive letter).
if(root) if(root)
{ {
*root = "/"; *root = "/";

View File

@ -18,4 +18,4 @@ SET(KWSYS_DATE_STAMP_YEAR 2010)
SET(KWSYS_DATE_STAMP_MONTH 08) SET(KWSYS_DATE_STAMP_MONTH 08)
# KWSys version date day component. Format is DD. # KWSys version date day component. Format is DD.
SET(KWSYS_DATE_STAMP_DAY 14) SET(KWSYS_DATE_STAMP_DAY 17)

View File

@ -3,7 +3,7 @@
# match any additional copyright holder notices. # match any additional copyright holder notices.
set(notice_regex " set(notice_regex "
#============================================================================= #=============================================================================
# Copyright (20[0-9][0-9]-)?20[0-9][0-9] Kitware[^\n]+( # Copyright (20[0-9][0-9]-)?20[0-9][0-9] [^\n]+(
# Copyright (20[0-9][0-9]-)?20[0-9][0-9] [^\n]+)* # Copyright (20[0-9][0-9]-)?20[0-9][0-9] [^\n]+)*
# #
# Distributed under the OSI-approved BSD License \\(the \"License\"\\); # Distributed under the OSI-approved BSD License \\(the \"License\"\\);