From 1eaee22bb916104ea28578c5d961a6c2eebe785b Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sun, 17 Oct 2021 16:10:13 +0200 Subject: [PATCH] Prevent some allocations in environment lookups In some places we'll still use the allocating non-const `operator[]` just because it would otherwise become pretty unreadable. --- src/common/utils.cpp | 12 +++++++----- src/plugin/utils.cpp | 9 +++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/common/utils.cpp b/src/common/utils.cpp index 9266eb31..696ae91e 100644 --- a/src/common/utils.cpp +++ b/src/common/utils.cpp @@ -40,11 +40,13 @@ constexpr char disable_watchdog_timer_env_var[] = "YABRIDGE_NO_WATCHDOG"; constexpr char temp_dir_override_env_var[] = "YABRIDGE_TEMP_DIR"; fs::path get_temporary_directory() { - bp::environment env = boost::this_process::environment(); - if (!env[temp_dir_override_env_var].empty()) { - return env[temp_dir_override_env_var].to_string(); - } else if (!env["XDG_RUNTIME_DIR"].empty()) { - return env["XDG_RUNTIME_DIR"].to_string(); + const bp::environment env = boost::this_process::environment(); + if (const auto directory = env.find(temp_dir_override_env_var); + directory != env.end() && !directory->empty()) { + return directory->to_string(); + } else if (const auto directory = env.find("XDG_RUNTIME_DIR"); + directory != env.end() && !directory->empty()) { + return directory->to_string(); } else { return fs::temp_directory_path(); } diff --git a/src/plugin/utils.cpp b/src/plugin/utils.cpp index 8318f698..879ffbd5 100644 --- a/src/plugin/utils.cpp +++ b/src/plugin/utils.cpp @@ -256,12 +256,13 @@ fs::path normalize_plugin_path(const fs::path& windows_library_path, std::variant find_wine_prefix( fs::path windows_plugin_path) { - bp::environment env = boost::this_process::environment(); - if (!env["WINEPREFIX"].empty()) { - return OverridenWinePrefix{env["WINEPREFIX"].to_string()}; + const bp::environment env = boost::this_process::environment(); + if (const auto prefix = env.find("WINEPREFIX"); + prefix != env.end() && !prefix->empty()) { + return OverridenWinePrefix{prefix->to_string()}; } - std::optional dosdevices_dir = find_dominating_file( + const std::optional dosdevices_dir = find_dominating_file( "dosdevices", windows_plugin_path, fs::is_directory); if (!dosdevices_dir) { return DefaultWinePrefix{};