From 143e185163f7122f7c262f107e4bb7601eb4d37d Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Thu, 30 Jul 2020 07:21:45 +0200 Subject: [PATCH] C++-ify x_setenv --- src/Util.cpp | 12 ++++++++++++ src/Util.hpp | 3 +++ src/argprocessing.cpp | 8 ++++---- src/ccache.cpp | 2 +- src/legacy_util.cpp | 13 ------------- src/legacy_util.hpp | 1 - unittest/main.cpp | 2 +- unittest/test_Config.cpp | 6 +++--- unittest/test_Util.cpp | 2 +- 9 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/Util.cpp b/src/Util.cpp index fd19e1a4c..c6294dcc6 100644 --- a/src/Util.cpp +++ b/src/Util.cpp @@ -1100,6 +1100,18 @@ send_to_stderr(const std::string& text, bool strip_colors) } } +void +setenv(const std::string& name, const std::string& value) +{ +#ifdef HAVE_SETENV + ::setenv(name.c_str(), value.c_str(), true); +#else + char* string; + asprintf(&string, "%s=%s", name.c_str(), value.c_str()); + putenv(string); // Leak to environment. +#endif +} + std::vector split_into_views(string_view input, const char* separators) { diff --git a/src/Util.hpp b/src/Util.hpp index ef9a3a247..e01b8ffb2 100644 --- a/src/Util.hpp +++ b/src/Util.hpp @@ -338,6 +338,9 @@ bool same_program_name(const std::string& program_name, // `strip_colors` is true. Throws `Error` on error. void send_to_stderr(const std::string& text, bool strip_colors); +// Set environment variable `name` to `value`. +void setenv(const std::string& name, const std::string& value); + // Split `input` into words at any of the characters listed in `separators`. // These words are a view into `input`; empty words are omitted. `separators` // must neither be the empty string nor a nullptr. diff --git a/src/argprocessing.cpp b/src/argprocessing.cpp index 981eb31a1..773bdedc0 100644 --- a/src/argprocessing.cpp +++ b/src/argprocessing.cpp @@ -905,18 +905,18 @@ handle_dependency_environment_variables(Context& ctx, std::string relpath_both = fmt::format("{} {}", args_info.output_dep, relpath_obj); if (using_sunpro_dependencies) { - x_setenv("SUNPRO_DEPENDENCIES", relpath_both.c_str()); + Util::setenv("SUNPRO_DEPENDENCIES", relpath_both); } else { - x_setenv("DEPENDENCIES_OUTPUT", relpath_both.c_str()); + Util::setenv("DEPENDENCIES_OUTPUT", relpath_both); } } else { // It's the "file" form. state.dependency_implicit_target_specified = true; // Ensure that the compiler gets a relative path. if (using_sunpro_dependencies) { - x_setenv("SUNPRO_DEPENDENCIES", args_info.output_dep.c_str()); + Util::setenv("SUNPRO_DEPENDENCIES", args_info.output_dep); } else { - x_setenv("DEPENDENCIES_OUTPUT", args_info.output_dep.c_str()); + Util::setenv("DEPENDENCIES_OUTPUT", args_info.output_dep); } } } diff --git a/src/ccache.cpp b/src/ccache.cpp index a5d36099e..a47f3af95 100644 --- a/src/ccache.cpp +++ b/src/ccache.cpp @@ -1871,7 +1871,7 @@ set_up_uncached_err() failed(STATS_ERROR); } - x_setenv("UNCACHED_ERR_FD", fmt::format("{}", uncached_fd).c_str()); + Util::setenv("UNCACHED_ERR_FD", fmt::format("{}", uncached_fd)); } static void diff --git a/src/legacy_util.cpp b/src/legacy_util.cpp index aa962abcf..e528d07dc 100644 --- a/src/legacy_util.cpp +++ b/src/legacy_util.cpp @@ -34,19 +34,6 @@ # include #endif -// This is like setenv. -void -x_setenv(const char* name, const char* value) -{ -#ifdef HAVE_SETENV - setenv(name, value, true); -#else - char* string; - asprintf(&string, "%s=%s", name, value); - putenv(string); // Leak to environment. -#endif -} - // This is like unsetenv. void x_unsetenv(const char* name) diff --git a/src/legacy_util.hpp b/src/legacy_util.hpp index 8b39c63f2..7dabe62fe 100644 --- a/src/legacy_util.hpp +++ b/src/legacy_util.hpp @@ -22,7 +22,6 @@ #include -void x_setenv(const char* name, const char* value); void x_unsetenv(const char* name); #ifndef HAVE_LOCALTIME_R struct tm* localtime_r(const time_t* timep, struct tm* result); diff --git a/unittest/main.cpp b/unittest/main.cpp index 863301a6b..53887e294 100644 --- a/unittest/main.cpp +++ b/unittest/main.cpp @@ -29,7 +29,7 @@ int main(int argc, char** argv) { #ifdef _WIN32 - x_setenv("CCACHE_DETECT_SHEBANG", "1"); + Util::setenv("CCACHE_DETECT_SHEBANG", "1"); #endif x_unsetenv("GCC_COLORS"); // Don't confuse argument processing tests. diff --git a/unittest/test_Config.cpp b/unittest/test_Config.cpp index 882033b9a..c487e2f03 100644 --- a/unittest/test_Config.cpp +++ b/unittest/test_Config.cpp @@ -92,7 +92,7 @@ TEST_CASE("Config::update_from_file") TestContext test_context; const char user[] = "rabbit"; - x_setenv("USER", user); + Util::setenv("USER", user); #ifndef _WIN32 std::string base_dir = fmt::format("/{0}/foo/{0}", user); @@ -305,13 +305,13 @@ TEST_CASE("Config::update_from_environment") { Config config; - x_setenv("CCACHE_COMPRESS", "1"); + Util::setenv("CCACHE_COMPRESS", "1"); config.update_from_environment(); CHECK(config.compression()); x_unsetenv("CCACHE_COMPRESS"); - x_setenv("CCACHE_NOCOMPRESS", "1"); + Util::setenv("CCACHE_NOCOMPRESS", "1"); config.update_from_environment(); CHECK(!config.compression()); } diff --git a/unittest/test_Util.cpp b/unittest/test_Util.cpp index 60a0304fc..fb76f43b7 100644 --- a/unittest/test_Util.cpp +++ b/unittest/test_Util.cpp @@ -161,7 +161,7 @@ TEST_CASE("Util::ends_with") TEST_CASE("Util::expand_environment_variables") { - x_setenv("FOO", "bar"); + Util::setenv("FOO", "bar"); CHECK(Util::expand_environment_variables("") == ""); CHECK(Util::expand_environment_variables("$FOO") == "bar"); -- 2.47.3