/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#include "cmWorkingDirectory.h"

#include "cmSystemTools.h"

#include <cerrno>

cmWorkingDirectory::cmWorkingDirectory(std::string const& newdir)
{
    this->OldDir = cmSystemTools::GetCurrentWorkingDirectory();
    this->SetDirectory(newdir);
}

cmWorkingDirectory::~cmWorkingDirectory() { this->Pop(); }

bool
cmWorkingDirectory::SetDirectory(std::string const& newdir)
{
    if(cmSystemTools::ChangeDirectory(newdir) == 0)
    {
        this->ResultCode = 0;
        return true;
    }
    this->ResultCode = errno;
    return false;
}

void
cmWorkingDirectory::Pop()
{
    if(!this->OldDir.empty())
    {
        this->SetDirectory(this->OldDir);
        this->OldDir.clear();
    }
}
