cmWorkingDirectory.cxx 944 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmWorkingDirectory.h"
  4. #include "cmStringAlgorithms.h"
  5. #include "cmSystemTools.h"
  6. cmWorkingDirectory::cmWorkingDirectory(std::string const& newdir)
  7. {
  8. this->OldDir = cmSystemTools::GetCurrentWorkingDirectory();
  9. this->SetDirectory(newdir);
  10. }
  11. cmWorkingDirectory::~cmWorkingDirectory()
  12. {
  13. this->Pop();
  14. }
  15. bool cmWorkingDirectory::SetDirectory(std::string const& newdir)
  16. {
  17. cmsys::Status status = cmSystemTools::ChangeDirectory(newdir);
  18. if (status) {
  19. this->Error.clear();
  20. return true;
  21. }
  22. this->Error = cmStrCat("Failed to change working directory to \"", newdir,
  23. "\": ", status.GetString());
  24. return false;
  25. }
  26. void cmWorkingDirectory::Pop()
  27. {
  28. if (!this->OldDir.empty()) {
  29. this->SetDirectory(this->OldDir);
  30. this->OldDir.clear();
  31. }
  32. }