瀏覽代碼

KWSys 2017-11-09 (40d7b1bb)

Code extracted from:

    https://gitlab.kitware.com/utils/kwsys.git

at commit 40d7b1bba6abb1a2aea4c2d46a48968fb31a9d7d (master).

Upstream Shortlog
-----------------

Clinton Stimpson (1):
      e9d2b696 SystemTools: Cache only existing path names in GetActualCaseForPath
KWSys Upstream 8 年之前
父節點
當前提交
e8d0b4312e
共有 1 個文件被更改,包括 11 次插入8 次删除
  1. 11 8
      SystemTools.cxx

+ 11 - 8
SystemTools.cxx

@@ -27,6 +27,7 @@
 #include <iostream>
 #include <set>
 #include <sstream>
+#include <utility>
 #include <vector>
 
 // Work-around CMake dependency scanning limitation.  This must
@@ -3372,7 +3373,7 @@ std::string SystemTools::RelativePath(const std::string& local,
 }
 
 #ifdef _WIN32
-static std::string GetCasePathName(std::string const& pathIn)
+static std::pair<std::string, bool> GetCasePathName(std::string const& pathIn)
 {
   std::string casePath;
   std::vector<std::string> path_components;
@@ -3381,7 +3382,7 @@ static std::string GetCasePathName(std::string const& pathIn)
   {
     // Relative paths cannot be converted.
     casePath = pathIn;
-    return casePath;
+    return std::make_pair(casePath, false);
   }
 
   // Start with root component.
@@ -3433,7 +3434,7 @@ static std::string GetCasePathName(std::string const& pathIn)
 
     casePath += path_components[idx];
   }
-  return casePath;
+  return std::make_pair(casePath, converting);
 }
 #endif
 
@@ -3448,12 +3449,14 @@ std::string SystemTools::GetActualCaseForPath(const std::string& p)
   if (i != SystemTools::PathCaseMap->end()) {
     return i->second;
   }
-  std::string casePath = GetCasePathName(p);
-  if (casePath.size() > MAX_PATH) {
-    return casePath;
+  std::pair<std::string, bool> casePath = GetCasePathName(p);
+  if (casePath.first.size() > MAX_PATH) {
+    return casePath.first;
   }
-  (*SystemTools::PathCaseMap)[p] = casePath;
-  return casePath;
+  if (casePath.second) {
+    (*SystemTools::PathCaseMap)[p] = casePath.first;
+  }
+  return casePath.first;
 #endif
 }