scoped_environment_variable_override.cc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/scoped_environment_variable_override.h"
  5. #include "base/environment.h"
  6. namespace base {
  7. ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
  8. const std::string& variable_name,
  9. const std::string& value,
  10. bool unset_var)
  11. : environment_(Environment::Create()),
  12. variable_name_(variable_name),
  13. overridden_(false),
  14. was_set_(false) {
  15. was_set_ = environment_->GetVar(variable_name, &old_value_);
  16. if (unset_var)
  17. overridden_ = environment_->UnSetVar(variable_name);
  18. else
  19. overridden_ = environment_->SetVar(variable_name, value);
  20. }
  21. ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
  22. const std::string& variable_name,
  23. const std::string& value)
  24. : ScopedEnvironmentVariableOverride(variable_name, value, false) {}
  25. ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
  26. const std::string& variable_name)
  27. : ScopedEnvironmentVariableOverride(variable_name, "", true) {}
  28. ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
  29. ScopedEnvironmentVariableOverride&&) = default;
  30. ScopedEnvironmentVariableOverride& ScopedEnvironmentVariableOverride::operator=(
  31. ScopedEnvironmentVariableOverride&&) = default;
  32. ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
  33. if (environment_ && overridden_) {
  34. if (was_set_)
  35. environment_->SetVar(variable_name_, old_value_);
  36. else
  37. environment_->UnSetVar(variable_name_);
  38. }
  39. }
  40. } // namespace base