cmWorkingDirectory.cxx 796 B

123456789101112131415161718192021222324252627282930313233343536
  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 <cerrno>
  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. if (cmSystemTools::ChangeDirectory(newdir)) {
  18. this->ResultCode = 0;
  19. return true;
  20. }
  21. this->ResultCode = errno;
  22. return false;
  23. }
  24. void cmWorkingDirectory::Pop()
  25. {
  26. if (!this->OldDir.empty()) {
  27. this->SetDirectory(this->OldDir);
  28. this->OldDir.clear();
  29. }
  30. }