summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-09-29 10:10:03 -0400
committerBrad King <brad.king@kitware.com>2015-09-29 10:10:03 -0400
commitdef90d5fa5d6a69abd4975d9fe4d07b0c21c6712 (patch)
treedf0593099ba60a092ea9a094c74a0e73ae66e7ff /Source
parentf23ab1a1501cf82a04b9f24c3324e314afd53fab (diff)
parentcc144ebfd8b3a7b89e07c3b22b6a9e8540e5d0e2 (diff)
downloadcmake-def90d5fa5d6a69abd4975d9fe4d07b0c21c6712.tar.gz
Merge branch 'upstream-kwsys' into update-kwsys
Diffstat (limited to 'Source')
-rw-r--r--Source/kwsys/SystemTools.cxx3
-rw-r--r--Source/kwsys/testSystemTools.cxx63
2 files changed, 65 insertions, 1 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 80289b8f59..262af278e7 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -408,6 +408,7 @@ class SystemToolsPathCaseMap:
// adds the elements of the env variable path to the arg passed in
void SystemTools::GetPath(std::vector<std::string>& path, const char* env)
{
+ size_t const old_size = path.size();
#if defined(_WIN32) && !defined(__CYGWIN__)
const char pathSep = ';';
#else
@@ -445,7 +446,7 @@ void SystemTools::GetPath(std::vector<std::string>& path, const char* env)
done = true;
}
}
- for(std::vector<std::string>::iterator i = path.begin();
+ for(std::vector<std::string>::iterator i = path.begin() + old_size;
i != path.end(); ++i)
{
SystemTools::ConvertToUnixSlashes(*i);
diff --git a/Source/kwsys/testSystemTools.cxx b/Source/kwsys/testSystemTools.cxx
index e14d2fc4e4..a0f904f721 100644
--- a/Source/kwsys/testSystemTools.cxx
+++ b/Source/kwsys/testSystemTools.cxx
@@ -28,6 +28,7 @@
#include <testSystemTools.h>
#include <iostream>
+#include <sstream>
#include <string.h> /* strcmp */
#if defined(_WIN32) && !defined(__CYGWIN__)
# include <io.h> /* _umask (MSVC) / umask (Borland) */
@@ -790,6 +791,66 @@ static bool CheckCollapsePath()
return res;
}
+static std::string StringVectorToString(const std::vector<std::string>& vec)
+{
+ std::stringstream ss;
+ ss << "vector(";
+ for (std::vector<std::string>::const_iterator i = vec.begin();
+ i != vec.end(); ++i)
+ {
+ if (i != vec.begin())
+ {
+ ss << ", ";
+ }
+ ss << *i;
+ }
+ ss << ")";
+ return ss.str();
+}
+
+static bool CheckGetPath()
+{
+ const char* envName = "S";
+#ifdef _WIN32
+ const char* envValue = "C:\\Somewhere\\something;D:\\Temp";
+#else
+ const char* envValue = "/Somewhere/something:/tmp";
+#endif
+ const char* registryPath = "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MyApp; MyKey]";
+
+ std::vector<std::string> originalPathes;
+ originalPathes.push_back(registryPath);
+
+ std::vector<std::string> expectedPathes;
+ expectedPathes.push_back(registryPath);
+#ifdef _WIN32
+ expectedPathes.push_back("C:/Somewhere/something");
+ expectedPathes.push_back("D:/Temp");
+#else
+ expectedPathes.push_back("/Somewhere/something");
+ expectedPathes.push_back("/tmp");
+#endif
+
+ bool res = true;
+ res &= CheckPutEnv(std::string(envName) + "=" + envValue, envName, envValue);
+
+ std::vector<std::string> pathes = originalPathes;
+ kwsys::SystemTools::GetPath(pathes, envName);
+
+ if (pathes != expectedPathes)
+ {
+ std::cerr <<
+ "GetPath(" << StringVectorToString(originalPathes) <<
+ ", " << envName << ") yielded " << StringVectorToString(pathes) <<
+ " instead of " << StringVectorToString(expectedPathes) <<
+ std::endl;
+ res = false;
+ }
+
+ res &= CheckUnPutEnv(envName, envName);
+ return res;
+}
+
//----------------------------------------------------------------------------
int testSystemTools(int, char*[])
{
@@ -825,5 +886,7 @@ int testSystemTools(int, char*[])
res &= CheckCollapsePath();
+ res &= CheckGetPath();
+
return res ? 0 : 1;
}