Skip to content
Snippets Groups Projects
Commit 2ad561e7 authored by Brad King's avatar Brad King Committed by Kitware Robot
Browse files

Merge topic 'SystemTools-move-path-case-cache'


a241fd13 SystemTools: Remove caching from public GetActualCaseForPath
0a0974d0 SystemTools: Restore unconditional caching in GetActualCaseForPath

Acked-by: default avatarKitware Robot <kwrobot@kitware.com>
Acked-by: default avatarBen Boeckel <ben.boeckel@kitware.com>
Acked-by: default avatarClinton Stimpson <clinton@elemtech.com>
Merge-request: !92
parents 73caabb8 a241fd13
No related branches found
No related tags found
No related merge requests found
......@@ -27,7 +27,6 @@
#include <iostream>
#include <set>
#include <sstream>
#include <utility>
#include <vector>
// Work-around CMake dependency scanning limitation. This must
......@@ -3254,7 +3253,7 @@ std::string SystemTools::CollapseFullPath(const std::string& in_path,
SystemTools::CheckTranslationPath(newPath);
#ifdef _WIN32
newPath = SystemTools::GetActualCaseForPath(newPath);
newPath = SystemTools::GetActualCaseForPathCached(newPath);
SystemTools::ConvertToUnixSlashes(newPath);
#endif
// Return the reconstructed path.
......@@ -3342,7 +3341,7 @@ std::string SystemTools::RelativePath(const std::string& local,
}
#ifdef _WIN32
static std::pair<std::string, bool> GetCasePathName(std::string const& pathIn)
static std::string GetCasePathName(std::string const& pathIn)
{
std::string casePath;
std::vector<std::string> path_components;
......@@ -3351,7 +3350,7 @@ static std::pair<std::string, bool> GetCasePathName(std::string const& pathIn)
{
// Relative paths cannot be converted.
casePath = pathIn;
return std::make_pair(casePath, false);
return casePath;
}
// Start with root component.
......@@ -3403,7 +3402,7 @@ static std::pair<std::string, bool> GetCasePathName(std::string const& pathIn)
casePath += path_components[idx];
}
return std::make_pair(casePath, converting);
return casePath;
}
#endif
......@@ -3412,22 +3411,27 @@ std::string SystemTools::GetActualCaseForPath(const std::string& p)
#ifndef _WIN32
return p;
#else
return GetCasePathName(p);
#endif
}
#ifdef _WIN32
std::string SystemTools::GetActualCaseForPathCached(std::string const& p)
{
// Check to see if actual case has already been called
// for this path, and the result is stored in the PathCaseMap
SystemToolsPathCaseMap::iterator i = SystemTools::PathCaseMap->find(p);
if (i != SystemTools::PathCaseMap->end()) {
return i->second;
}
std::pair<std::string, bool> casePath = GetCasePathName(p);
if (casePath.first.size() > MAX_PATH) {
return casePath.first;
}
if (casePath.second) {
(*SystemTools::PathCaseMap)[p] = casePath.first;
std::string casePath = GetCasePathName(p);
if (casePath.size() > MAX_PATH) {
return casePath;
}
return casePath.first;
#endif
(*SystemTools::PathCaseMap)[p] = casePath;
return casePath;
}
#endif
const char* SystemTools::SplitPathRootComponent(const std::string& p,
std::string* root)
......
......@@ -988,6 +988,7 @@ private:
*/
static SystemToolsTranslationMap* TranslationMap;
#ifdef _WIN32
static std::string GetActualCaseForPathCached(std::string const& path);
static SystemToolsPathCaseMap* PathCaseMap;
static SystemToolsEnvMap* EnvMap;
#endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment