Kaydet (Commit) eef4f79e authored tarafından Stephan Bergmann's avatar Stephan Bergmann

More specific

Change-Id: I7e6490c5b50a236a5f070e98d4501e7dd5a90307
üst d3a04fde
...@@ -38,7 +38,9 @@ ...@@ -38,7 +38,9 @@
#include <sal/macros.h> #include <sal/macros.h>
#if defined HAVE_VALGRIND_HEADERS #if defined HAVE_VALGRIND_HEADERS
#include <valgrind/memcheck.h> #include <valgrind/valgrind.h>
#else
#define RUNNING_ON_VALGRIND false
#endif #endif
#if ( defined WNT ) // Windows #if ( defined WNT ) // Windows
...@@ -90,11 +92,11 @@ inline ::rtl::OUString getExecutablePath( void ) ...@@ -90,11 +92,11 @@ inline ::rtl::OUString getExecutablePath( void )
//rtl::OUString CWD = getExecutablePath(); //rtl::OUString CWD = getExecutablePath();
typedef std::vector<std::string> string_container_t; typedef std::vector<OString> string_container_t;
typedef string_container_t::const_iterator string_container_const_iter_t; typedef string_container_t::const_iterator string_container_const_iter_t;
typedef string_container_t::iterator string_container_iter_t; typedef string_container_t::iterator string_container_iter_t;
class exclude : public std::unary_function<std::string, bool> class exclude : public std::unary_function<OString, bool>
{ {
public: public:
...@@ -106,7 +108,7 @@ public: ...@@ -106,7 +108,7 @@ public:
exclude_list_.push_back(env_var_name(*iter)); exclude_list_.push_back(env_var_name(*iter));
} }
bool operator() (const std::string& env_var) const bool operator() (const OString& env_var) const
{ {
return (exclude_list_.end() != return (exclude_list_.end() !=
std::find( std::find(
...@@ -119,15 +121,15 @@ private: ...@@ -119,15 +121,15 @@ private:
// extract the name from an environment variable // extract the name from an environment variable
// that is given in the form "NAME=VALUE" // that is given in the form "NAME=VALUE"
std::string env_var_name(const std::string& env_var) const OString env_var_name(const OString& env_var) const
{ {
std::string::size_type pos_equal_sign = sal_Int32 pos_equal_sign =
env_var.find_first_of("="); env_var.indexOf('=');
if (std::string::npos != pos_equal_sign) if (-1 != pos_equal_sign)
return std::string(env_var, 0, pos_equal_sign); return env_var.copy(0, pos_equal_sign);
return std::string(); return OString();
} }
private: private:
...@@ -136,27 +138,20 @@ private: ...@@ -136,27 +138,20 @@ private:
namespace namespace
{ {
class starts_with
: public std::unary_function<const std::string&, bool>
{
private:
const std::string m_rString;
public:
starts_with(const char *pString) : m_rString(pString) {}
bool operator()(const std::string &rEntry) const
{
return rEntry.find(m_rString) == 0;
}
};
void tidy_container(string_container_t &env_container) void tidy_container(string_container_t &env_container)
{ {
//sort them because there are no guarantees to ordering //sort them because there are no guarantees to ordering
std::sort(env_container.begin(), env_container.end()); std::sort(env_container.begin(), env_container.end());
//remove LD_PRELOAD because valgrind injects that into the if (RUNNING_ON_VALGRIND)
//parent process {
env_container.erase(std::remove_if(env_container.begin(), env_container.end(), env_container.erase(
starts_with("LD_PRELOAD=")), env_container.end()); std::remove_if(
env_container.begin(), env_container.end(),
[](OString const & s) {
return s.startsWith("LD_PRELOAD=")
|| s.startsWith("VALGRIND_LIB="); }),
env_container.end());
}
} }
} }
...@@ -168,7 +163,7 @@ namespace ...@@ -168,7 +163,7 @@ namespace
while (size_t l = _tcslen(p)) while (size_t l = _tcslen(p))
{ {
env_container->push_back(std::string(p)); env_container->push_back(OString(p));
p += l + 1; p += l + 1;
} }
FreeEnvironmentStrings(env); FreeEnvironmentStrings(env);
...@@ -178,7 +173,7 @@ namespace ...@@ -178,7 +173,7 @@ namespace
void read_parent_environment(string_container_t* env_container) void read_parent_environment(string_container_t* env_container)
{ {
for (int i = 0; NULL != environ[i]; i++) for (int i = 0; NULL != environ[i]; i++)
env_container->push_back(std::string(environ[i])); env_container->push_back(OString(environ[i]));
tidy_container(*env_container); tidy_container(*env_container);
} }
#endif #endif
...@@ -246,14 +241,14 @@ public: ...@@ -246,14 +241,14 @@ public:
std::string line; std::string line;
line.reserve(1024); line.reserve(1024);
while (std::getline(file, line, '\0')) while (std::getline(file, line, '\0'))
env_container->push_back(line); env_container->push_back(OString(line.c_str()));
tidy_container(*env_container); tidy_container(*env_container);
} }
// environment of the child process that was // environment of the child process that was
// started. The child process writes his // started. The child process writes his
// environment into a file // environment into a file
bool compare_environments() void compare_environments()
{ {
string_container_t parent_env; string_container_t parent_env;
read_parent_environment(&parent_env); read_parent_environment(&parent_env);
...@@ -261,8 +256,20 @@ public: ...@@ -261,8 +256,20 @@ public:
string_container_t child_env; string_container_t child_env;
read_child_environment(&child_env); read_child_environment(&child_env);
return ((parent_env.size() == child_env.size()) && OString msg(
(std::equal(child_env.begin(), child_env.end(), parent_env.begin()))); OString::number(parent_env.size()) + "/"
+ OString::number(child_env.size()));
auto min = std::min(parent_env.size(), child_env.size());
for (decltype(min) i = 0; i != min; ++i) {
CPPUNIT_ASSERT_EQUAL_MESSAGE(
msg.getStr(), parent_env[i], child_env[i]);
}
if (parent_env.size() != child_env.size()) {
CPPUNIT_ASSERT_EQUAL_MESSAGE(
(parent_env.size() >= child_env.size()
? parent_env.back() : child_env.back()).getStr(),
parent_env.size(), child_env.size());
}
} }
// compare the equal environment parts and the // compare the equal environment parts and the
...@@ -367,17 +374,7 @@ public: ...@@ -367,17 +374,7 @@ public:
osl_freeProcessHandle(process); osl_freeProcessHandle(process);
#if defined HAVE_VALGRIND_HEADERS compare_environments();
//valgrind makes these not match
if (RUNNING_ON_VALGRIND)
return;
#endif
CPPUNIT_ASSERT_MESSAGE
(
"Parent and child environment not equal",
compare_environments()
);
} }
#define ENV1 "PAT=a:\\" #define ENV1 "PAT=a:\\"
...@@ -431,12 +428,6 @@ public: ...@@ -431,12 +428,6 @@ public:
different_child_env_vars.push_back(ENV2); different_child_env_vars.push_back(ENV2);
different_child_env_vars.push_back(ENV4); different_child_env_vars.push_back(ENV4);
#if defined HAVE_VALGRIND_HEADERS
//valgrind makes these not match
if (RUNNING_ON_VALGRIND)
return;
#endif
CPPUNIT_ASSERT_MESSAGE CPPUNIT_ASSERT_MESSAGE
( (
"osl_execProc_merged_child_environment", "osl_execProc_merged_child_environment",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment