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.
4
5 #include "base/scoped_environment_variable_override.h"
6
7 #include "base/environment.h"
8
9 namespace base {
10
ScopedEnvironmentVariableOverride(const std::string & variable_name,const std::string & value,bool unset_var)11 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
12 const std::string& variable_name,
13 const std::string& value,
14 bool unset_var)
15 : environment_(Environment::Create()),
16 variable_name_(variable_name),
17 overridden_(false),
18 was_set_(false) {
19 was_set_ = environment_->GetVar(variable_name, &old_value_);
20 if (unset_var)
21 overridden_ = environment_->UnSetVar(variable_name);
22 else
23 overridden_ = environment_->SetVar(variable_name, value);
24 }
25
ScopedEnvironmentVariableOverride(const std::string & variable_name,const std::string & value)26 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
27 const std::string& variable_name,
28 const std::string& value)
29 : ScopedEnvironmentVariableOverride(variable_name, value, false) {}
30
ScopedEnvironmentVariableOverride(const std::string & variable_name)31 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
32 const std::string& variable_name)
33 : ScopedEnvironmentVariableOverride(variable_name, "", true) {}
34
35 ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
36 ScopedEnvironmentVariableOverride&&) = default;
37
38 ScopedEnvironmentVariableOverride& ScopedEnvironmentVariableOverride::operator=(
39 ScopedEnvironmentVariableOverride&&) = default;
40
~ScopedEnvironmentVariableOverride()41 ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
42 if (environment_ && overridden_) {
43 if (was_set_)
44 environment_->SetVar(variable_name_, old_value_);
45 else
46 environment_->UnSetVar(variable_name_);
47 }
48 }
49
50 } // namespace base
51