replace "leaky" call to putenv() with setenv() on non-windows platforms
This commit is contained in:
@ -1252,7 +1252,16 @@ void Input::shell()
|
||||
#ifdef _WIN32
|
||||
if (arg[i]) rv = _putenv(utils::strdup(arg[i]));
|
||||
#else
|
||||
if (arg[i]) rv = putenv(utils::strdup(arg[i]));
|
||||
if (arg[i]) {
|
||||
std::string vardef(arg[i]);
|
||||
auto found = vardef.find_first_of("=");
|
||||
if (found == std::string::npos) {
|
||||
rv = setenv(vardef.c_str(),"",1);
|
||||
} else {
|
||||
rv = setenv(vardef.substr(0,found).c_str(),
|
||||
vardef.substr(found+1).c_str(),1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
rv = (rv < 0) ? errno : 0;
|
||||
MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world);
|
||||
|
||||
@ -398,30 +398,28 @@ TEST_F(SimpleCommandsTest, Shell)
|
||||
{
|
||||
BEGIN_HIDE_OUTPUT();
|
||||
command("shell putenv TEST_VARIABLE=simpletest");
|
||||
command("variable simple1 getenv TEST_VARIABLE");
|
||||
END_HIDE_OUTPUT();
|
||||
|
||||
char *test_var = getenv("TEST_VARIABLE");
|
||||
const char *test_var = getenv("TEST_VARIABLE");
|
||||
ASSERT_NE(test_var, nullptr);
|
||||
ASSERT_THAT(test_var, StrEq("simpletest"));
|
||||
|
||||
BEGIN_HIDE_OUTPUT();
|
||||
command("shell putenv TEST_VARIABLE=simpletest2");
|
||||
command("shell putenv TEST_VARIABLE");
|
||||
command("shell putenv TEST_VARIABLE2=simpletest OTHER_VARIABLE=2");
|
||||
END_HIDE_OUTPUT();
|
||||
|
||||
char *test_var2 = getenv("TEST_VARIABLE2");
|
||||
char *other_var = getenv("OTHER_VARIABLE");
|
||||
test_var = getenv("TEST_VARIABLE2");
|
||||
ASSERT_NE(test_var, nullptr);
|
||||
ASSERT_THAT(test_var, StrEq("simpletest"));
|
||||
|
||||
ASSERT_NE(test_var2, nullptr);
|
||||
ASSERT_THAT(test_var2, StrEq("simpletest"));
|
||||
|
||||
ASSERT_NE(other_var, nullptr);
|
||||
ASSERT_THAT(other_var, StrEq("2"));
|
||||
test_var = getenv("OTHER_VARIABLE");
|
||||
ASSERT_NE(test_var, nullptr);
|
||||
ASSERT_THAT(test_var, StrEq("2"));
|
||||
|
||||
test_var = getenv("TEST_VARIABLE");
|
||||
ASSERT_NE(test_var, nullptr);
|
||||
ASSERT_THAT(test_var, StrEq("simpletest2"));
|
||||
ASSERT_THAT(test_var, StrEq(""));
|
||||
}
|
||||
|
||||
TEST_F(SimpleCommandsTest, CiteMe)
|
||||
|
||||
Reference in New Issue
Block a user