From 64d4308d8347150d072c2f11f9dd557ccaa1dfb2 Mon Sep 17 00:00:00 2001 From: KWSys Upstream Date: Wed, 7 Mar 2018 06:47:12 -0500 Subject: KWSys 2018-03-07 (2ad561e7) Code extracted from: https://gitlab.kitware.com/utils/kwsys.git at commit 2ad561e78b0d99f083f1213e403d5a8a90e0e134 (master). Upstream Shortlog ----------------- Brad King (4): 6e190d9a Fix include directory usage requirement for build tree 6d4e9fde SystemInformation: Android has no getifaddrs prior to API 24 0a0974d0 SystemTools: Restore unconditional caching in GetActualCaseForPath a241fd13 SystemTools: Remove caching from public GetActualCaseForPath --- CMakeLists.txt | 4 ++-- SystemInformation.cxx | 6 +++++- SystemTools.cxx | 30 +++++++++++++++++------------- SystemTools.hxx.in | 1 + 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0154c8..4fc176b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -922,7 +922,7 @@ IF(KWSYS_C_SRCS OR KWSYS_CXX_SRCS) # Set up include usage requirement IF(COMMAND TARGET_INCLUDE_DIRECTORIES) TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_INTERFACE} INTERFACE - $) + $) IF(KWSYS_INSTALL_INCLUDE_DIR) TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_INTERFACE} INTERFACE $) @@ -976,7 +976,7 @@ IF(KWSYS_ENABLE_C AND KWSYS_C_SRCS) # Set up include usage requirement IF(COMMAND TARGET_INCLUDE_DIRECTORIES) TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_C_INTERFACE} INTERFACE - $) + $) IF(KWSYS_INSTALL_INCLUDE_DIR) TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_C_INTERFACE} INTERFACE $) diff --git a/SystemInformation.cxx b/SystemInformation.cxx index 7503469..2b9d7b1 100644 --- a/SystemInformation.cxx +++ b/SystemInformation.cxx @@ -121,7 +121,11 @@ typedef int siginfo_t; #if defined(KWSYS_SYS_HAS_IFADDRS_H) #include #include -#if !defined(__LSB_VERSION__) /* LSB has no getifaddrs */ +#if defined(__LSB_VERSION__) +/* LSB has no getifaddrs */ +#elif defined(__ANDROID_API__) && __ANDROID_API__ < 24 +/* Android has no getifaddrs prior to API 24. */ +#else #define KWSYS_SYSTEMINFORMATION_IMPLEMENT_FQDN #endif #endif diff --git a/SystemTools.cxx b/SystemTools.cxx index 38910c8..106afe5 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -27,7 +27,6 @@ #include #include #include -#include #include // 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 GetCasePathName(std::string const& pathIn) +static std::string GetCasePathName(std::string const& pathIn) { std::string casePath; std::vector path_components; @@ -3351,7 +3350,7 @@ static std::pair 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 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 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) diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 719d45c..e79e3fc 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -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 -- cgit v0.12