blob: 81c539fb3b083efaa220a20ec35bb6d30ecacd42 [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2017 The Chromium Authors
Julien Brianceau9dcfeee2017-07-29 14:18:152// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Maksim Sisov24d31b62021-11-11 08:09:365#include "base/scoped_environment_variable_override.h"
Julien Brianceau9dcfeee2017-07-29 14:18:156
7#include "base/environment.h"
8
9namespace base {
Julien Brianceau9dcfeee2017-07-29 14:18:1510
11ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
12 const std::string& variable_name,
Sven Zheng416d1fd2020-11-10 01:15:5713 const std::string& value,
14 bool unset_var)
Julien Brianceau9dcfeee2017-07-29 14:18:1515 : environment_(Environment::Create()),
16 variable_name_(variable_name),
17 overridden_(false),
Helmut Januschka726658b2025-03-21 22:44:5718 old_value_(environment_->GetVar(variable_name)) {
Peter Kasting134ef9af2024-12-28 02:30:0919 if (unset_var) {
Sven Zheng416d1fd2020-11-10 01:15:5720 overridden_ = environment_->UnSetVar(variable_name);
Peter Kasting134ef9af2024-12-28 02:30:0921 } else {
Sven Zheng416d1fd2020-11-10 01:15:5722 overridden_ = environment_->SetVar(variable_name, value);
Peter Kasting134ef9af2024-12-28 02:30:0923 }
Julien Brianceau9dcfeee2017-07-29 14:18:1524}
25
Sven Zheng416d1fd2020-11-10 01:15:5726ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
27 const std::string& variable_name,
28 const std::string& value)
29 : ScopedEnvironmentVariableOverride(variable_name, value, false) {}
30
31ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
32 const std::string& variable_name)
33 : ScopedEnvironmentVariableOverride(variable_name, "", true) {}
34
Maksim Sisov24d31b62021-11-11 08:09:3635ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
36 ScopedEnvironmentVariableOverride&&) = default;
37
38ScopedEnvironmentVariableOverride& ScopedEnvironmentVariableOverride::operator=(
39 ScopedEnvironmentVariableOverride&&) = default;
40
Julien Brianceau9dcfeee2017-07-29 14:18:1541ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
Sunny Sachanandani7f785c9662022-03-21 19:23:4942 if (environment_ && overridden_) {
Helmut Januschka726658b2025-03-21 22:44:5743 if (old_value_.has_value()) {
44 environment_->SetVar(variable_name_, old_value_.value());
Peter Kasting134ef9af2024-12-28 02:30:0945 } else {
Julien Brianceau9dcfeee2017-07-29 14:18:1546 environment_->UnSetVar(variable_name_);
Peter Kasting134ef9af2024-12-28 02:30:0947 }
Julien Brianceau9dcfeee2017-07-29 14:18:1548 }
49}
50
Julien Brianceau9dcfeee2017-07-29 14:18:1551} // namespace base