xref: /aosp_15_r20/external/cronet/base/scoped_environment_variable_override.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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