diff --git a/src/input.cpp b/src/input.cpp index 78086906c5..420f840a14 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1234,12 +1234,11 @@ void Input::shell() } else if (strcmp(arg[0],"putenv") == 0) { if (narg < 2) error->all(FLERR,"Illegal shell putenv command"); for (int i = 1; i < narg; i++) { - char *ptr = strdup(arg[i]); rv = 0; #ifdef _WIN32 - if (ptr != nullptr) rv = _putenv(ptr); + if (arg[i]) rv = _putenv(arg[i]); #else - if (ptr != nullptr) rv = putenv(ptr); + if (arg[i]) rv = putenv(arg[i]); #endif rv = (rv < 0) ? errno : 0; MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world); diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 0c6043ea84..f13ae62a73 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -312,6 +312,32 @@ TEST_F(SimpleCommandsTest, Units) TEST_FAILURE(".*ERROR: Illegal units command.*", lmp->input->one("units unknown");); } + +TEST_F(SimpleCommandsTest, Shell) +{ + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("shell putenv TEST_VARIABLE=simpletest"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + char * test_var = getenv("TEST_VARIABLE"); + ASSERT_NE(test_var, nullptr); + ASSERT_THAT(test_var, StrEq("simpletest")); + + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("shell putenv TEST_VARIABLE=simpletest"); + lmp->input->one("shell putenv TEST_VARIABLE2=simpletest2 OTHER_VARIABLE=2"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + char * test_var2 = getenv("TEST_VARIABLE2"); + char * other_var = getenv("OTHER_VARIABLE"); + + ASSERT_NE(test_var2, nullptr); + ASSERT_THAT(test_var2, StrEq("simpletest2")); + + ASSERT_NE(other_var, nullptr); + ASSERT_THAT(other_var, StrEq("2")); +} + } // namespace LAMMPS_NS int main(int argc, char **argv)