/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCLocaleEnvironmentScope.h" #include #include #include "cmSystemTools.h" cmCLocaleEnvironmentScope::cmCLocaleEnvironmentScope() { this->SetEnv("LANGUAGE", ""); this->SetEnv("LC_MESSAGES", "C"); std::string lcAll = this->GetEnv("LC_ALL"); if (!lcAll.empty()) { this->SetEnv("LC_ALL", ""); this->SetEnv("LC_CTYPE", lcAll); } } std::string cmCLocaleEnvironmentScope::GetEnv(std::string const& key) { std::string value; cmSystemTools::GetEnv(key, value); return value; } void cmCLocaleEnvironmentScope::SetEnv(std::string const& key, std::string const& value) { std::string oldValue = this->GetEnv(key); this->EnvironmentBackup.insert(std::make_pair(key, oldValue)); if (value.empty()) { cmSystemTools::UnsetEnv(key.c_str()); } else { std::ostringstream tmp; tmp << key << "=" << value; cmSystemTools::PutEnv(tmp.str()); } } cmCLocaleEnvironmentScope::~cmCLocaleEnvironmentScope() { for (auto const& envb : this->EnvironmentBackup) { std::ostringstream tmp; tmp << envb.first << "=" << envb.second; cmSystemTools::PutEnv(tmp.str()); } }