From 8e7356a2921c769c091c52140564b04108e692c4 Mon Sep 17 00:00:00 2001 From: KWSys Upstream Date: Mon, 11 Jan 2016 09:01:00 -0500 Subject: [PATCH] KWSys 2016-01-11 (e8bf616e) Code extracted from: http://public.kitware.com/KWSys.git at commit e8bf616e3556368bf19dbebcd3529a89011ebacb (master). Upstream Shortlog ----------------- Brad King (1): e8bf616e SystemTools: Fix GetShortPath buffer sizing Jan van Dorsten (1): cfb2477d SystemTools: Simplify GetShortPath de-quoting step Robert Maynard (1): 8ef9773d Don't use clang diagnostic pragma's when compiling with ICC on OSX. --- MD5.c | 4 ++-- ProcessUNIX.c | 4 ++-- SystemTools.cxx | 21 ++++++--------------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/MD5.c b/MD5.c index a1470572d..b9d25a8d7 100644 --- a/MD5.c +++ b/MD5.c @@ -29,7 +29,7 @@ it in a single source file instead of a separate header and implementation file. */ -#if defined(__clang__) +#if defined(__clang__) && !defined(__INTEL_COMPILER) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wcast-align" #endif @@ -433,7 +433,7 @@ static void md5_finish(md5_state_t *pms, md5_byte_t digest[16]) digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); } -#if defined(__clang__) +#if defined(__clang__) && !defined(__INTEL_COMPILER) # pragma clang diagnostic pop #endif diff --git a/ProcessUNIX.c b/ProcessUNIX.c index b0ddf5a13..07c644b8e 100644 --- a/ProcessUNIX.c +++ b/ProcessUNIX.c @@ -1595,12 +1595,12 @@ static void kwsysProcessVolatileFree(volatile void* p) { /* clang has made it impossible to free memory that points to volatile without first using special pragmas to disable a warning... */ -#if defined(__clang__) +#if defined(__clang__) && !defined(__INTEL_COMPILER) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wcast-qual" #endif free((void*)p); /* The cast will silence most compilers, but not clang. */ -#if defined(__clang__) +#if defined(__clang__) && !defined(__INTEL_COMPILER) # pragma clang diagnostic pop #endif } diff --git a/SystemTools.cxx b/SystemTools.cxx index 82087f060..e3428f878 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -4491,36 +4491,27 @@ bool SystemTools::FileIsFullPath(const char* in_name, size_t len) bool SystemTools::GetShortPath(const std::string& path, std::string& shortPath) { #if defined(_WIN32) && !defined(__CYGWIN__) - const int size = int(path.size()) +1; // size of return - char *tempPath = new char[size]; // create a buffer - DWORD ret; + std::string tempPath = path; // create a buffer // if the path passed in has quotes around it, first remove the quotes if (!path.empty() && path[0] == '"' && *path.rbegin() == '"') { - strcpy(tempPath,path.c_str()+1); - tempPath[size-2] = '\0'; - } - else - { - strcpy(tempPath,path.c_str()); + tempPath = path.substr(1, path.length()-2); } std::wstring wtempPath = Encoding::ToWide(tempPath); - std::vector buffer(wtempPath.size()+1); - buffer[0] = 0; + DWORD ret = GetShortPathNameW(wtempPath.c_str(), NULL, 0); + std::vector buffer(ret); ret = GetShortPathNameW(wtempPath.c_str(), - &buffer[0], static_cast(wtempPath.size())); + &buffer[0], static_cast(buffer.size())); - if(buffer[0] == 0 || ret > wtempPath.size()) + if (ret == 0) { - delete [] tempPath; return false; } else { shortPath = Encoding::ToNarrow(&buffer[0]); - delete [] tempPath; return true; } #else