KWSys 2015-09-28 (2089567a)

Extract upstream KWSys using the following shell commands.

$ git archive --prefix=upstream-kwsys/ 2089567a | tar x
$ git shortlog --no-merges --abbrev=8 --format='%h %s' dc4e4a55..2089567a
Vitaly Baranov (1):
      2089567a SystemTools: Fix GetPath to not affect existing output vector entries
This commit is contained in:
KWSys Robot 2015-09-28 09:29:33 -04:00 committed by Brad King
parent 29ad069472
commit cc144ebfd8
2 changed files with 65 additions and 1 deletions

View File

@ -408,6 +408,7 @@ class SystemToolsPathCaseMap:
// adds the elements of the env variable path to the arg passed in // adds the elements of the env variable path to the arg passed in
void SystemTools::GetPath(std::vector<std::string>& path, const char* env) void SystemTools::GetPath(std::vector<std::string>& path, const char* env)
{ {
size_t const old_size = path.size();
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
const char pathSep = ';'; const char pathSep = ';';
#else #else
@ -445,7 +446,7 @@ void SystemTools::GetPath(std::vector<std::string>& path, const char* env)
done = true; 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) i != path.end(); ++i)
{ {
SystemTools::ConvertToUnixSlashes(*i); SystemTools::ConvertToUnixSlashes(*i);

View File

@ -28,6 +28,7 @@
#include <testSystemTools.h> #include <testSystemTools.h>
#include <iostream> #include <iostream>
#include <sstream>
#include <string.h> /* strcmp */ #include <string.h> /* strcmp */
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
# include <io.h> /* _umask (MSVC) / umask (Borland) */ # include <io.h> /* _umask (MSVC) / umask (Borland) */
@ -790,6 +791,66 @@ static bool CheckCollapsePath()
return res; 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*[]) int testSystemTools(int, char*[])
{ {
@ -825,5 +886,7 @@ int testSystemTools(int, char*[])
res &= CheckCollapsePath(); res &= CheckCollapsePath();
res &= CheckGetPath();
return res ? 0 : 1; return res ? 0 : 1;
} }