xref: /aosp_15_r20/external/cronet/base/scoped_environment_variable_override.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/scoped_environment_variable_override.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/environment.h"
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker namespace base {
10*6777b538SAndroid Build Coastguard Worker 
ScopedEnvironmentVariableOverride(const std::string & variable_name,const std::string & value,bool unset_var)11*6777b538SAndroid Build Coastguard Worker ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
12*6777b538SAndroid Build Coastguard Worker     const std::string& variable_name,
13*6777b538SAndroid Build Coastguard Worker     const std::string& value,
14*6777b538SAndroid Build Coastguard Worker     bool unset_var)
15*6777b538SAndroid Build Coastguard Worker     : environment_(Environment::Create()),
16*6777b538SAndroid Build Coastguard Worker       variable_name_(variable_name),
17*6777b538SAndroid Build Coastguard Worker       overridden_(false),
18*6777b538SAndroid Build Coastguard Worker       was_set_(false) {
19*6777b538SAndroid Build Coastguard Worker   was_set_ = environment_->GetVar(variable_name, &old_value_);
20*6777b538SAndroid Build Coastguard Worker   if (unset_var)
21*6777b538SAndroid Build Coastguard Worker     overridden_ = environment_->UnSetVar(variable_name);
22*6777b538SAndroid Build Coastguard Worker   else
23*6777b538SAndroid Build Coastguard Worker     overridden_ = environment_->SetVar(variable_name, value);
24*6777b538SAndroid Build Coastguard Worker }
25*6777b538SAndroid Build Coastguard Worker 
ScopedEnvironmentVariableOverride(const std::string & variable_name,const std::string & value)26*6777b538SAndroid Build Coastguard Worker ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
27*6777b538SAndroid Build Coastguard Worker     const std::string& variable_name,
28*6777b538SAndroid Build Coastguard Worker     const std::string& value)
29*6777b538SAndroid Build Coastguard Worker     : ScopedEnvironmentVariableOverride(variable_name, value, false) {}
30*6777b538SAndroid Build Coastguard Worker 
ScopedEnvironmentVariableOverride(const std::string & variable_name)31*6777b538SAndroid Build Coastguard Worker ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
32*6777b538SAndroid Build Coastguard Worker     const std::string& variable_name)
33*6777b538SAndroid Build Coastguard Worker     : ScopedEnvironmentVariableOverride(variable_name, "", true) {}
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
36*6777b538SAndroid Build Coastguard Worker     ScopedEnvironmentVariableOverride&&) = default;
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker ScopedEnvironmentVariableOverride& ScopedEnvironmentVariableOverride::operator=(
39*6777b538SAndroid Build Coastguard Worker     ScopedEnvironmentVariableOverride&&) = default;
40*6777b538SAndroid Build Coastguard Worker 
~ScopedEnvironmentVariableOverride()41*6777b538SAndroid Build Coastguard Worker ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
42*6777b538SAndroid Build Coastguard Worker   if (environment_ && overridden_) {
43*6777b538SAndroid Build Coastguard Worker     if (was_set_)
44*6777b538SAndroid Build Coastguard Worker       environment_->SetVar(variable_name_, old_value_);
45*6777b538SAndroid Build Coastguard Worker     else
46*6777b538SAndroid Build Coastguard Worker       environment_->UnSetVar(variable_name_);
47*6777b538SAndroid Build Coastguard Worker   }
48*6777b538SAndroid Build Coastguard Worker }
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker }  // namespace base
51