1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/scoped_environment_variable_override.h"
7 #include "base/environment.h"
11 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
12 const std::string& variable_name,
13 const std::string& value,
15 : environment_(Environment::Create()),
16 variable_name_(variable_name),
19 was_set_ = environment_->GetVar(variable_name, &old_value_);
21 overridden_ = environment_->UnSetVar(variable_name);
23 overridden_ = environment_->SetVar(variable_name, value);
26 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
27 const std::string& variable_name,
28 const std::string& value)
29 : ScopedEnvironmentVariableOverride(variable_name, value, false) {}
31 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
32 const std::string& variable_name)
33 : ScopedEnvironmentVariableOverride(variable_name, "", true) {}
35 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
36 ScopedEnvironmentVariableOverride&&) = default;
38 ScopedEnvironmentVariableOverride& ScopedEnvironmentVariableOverride::operator=(
39 ScopedEnvironmentVariableOverride&&) = default;
41 ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
42 if (environment_ && overridden_) {
44 environment_->SetVar(variable_name_, old_value_);
46 environment_->UnSetVar(variable_name_);