From 2446b20524ebff00ad868154907b735e60f3e74d Mon Sep 17 00:00:00 2001 From: Brad King <brad.king@kitware.com> Date: Mon, 12 Apr 2021 15:01:25 -0400 Subject: [PATCH] SystemTools: Return Status from MakeDirectory --- SystemTools.cxx | 27 +++++++++++++-------------- SystemTools.hxx.in | 6 +++--- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/SystemTools.cxx b/SystemTools.cxx index 2ac9641..153c447 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -882,21 +882,24 @@ FILE* SystemTools::Fopen(const std::string& file, const char* mode) #endif } -bool SystemTools::MakeDirectory(const char* path, const mode_t* mode) +Status SystemTools::MakeDirectory(const char* path, const mode_t* mode) { if (!path) { - return false; + return Status::POSIX(EINVAL); } return SystemTools::MakeDirectory(std::string(path), mode); } -bool SystemTools::MakeDirectory(const std::string& path, const mode_t* mode) +Status SystemTools::MakeDirectory(std::string const& path, const mode_t* mode) { - if (SystemTools::PathExists(path)) { - return SystemTools::FileIsDirectory(path); - } if (path.empty()) { - return false; + return Status::POSIX(EINVAL); + } + if (SystemTools::PathExists(path)) { + if (SystemTools::FileIsDirectory(path)) { + return Status::Success(); + } + return Status::POSIX(EEXIST); } std::string dir = path; SystemTools::ConvertToUnixSlashes(dir); @@ -914,15 +917,11 @@ bool SystemTools::MakeDirectory(const std::string& path, const mode_t* mode) ++pos; } topdir = dir; - if (Mkdir(topdir, mode) != 0) { - // if it is some other error besides directory exists - // then return false - if (errno != EEXIST) { - return false; - } + if (Mkdir(topdir, mode) != 0 && errno != EEXIST) { + return Status::POSIX_errno(); } - return true; + return Status::Success(); } // replace replace with with as many times as it shows up in source. diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 9274006..ddd114e 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -554,9 +554,9 @@ public: * can make a full path even if none of the directories existed * prior to calling this function. */ - static bool MakeDirectory(const char* path, const mode_t* mode = nullptr); - static bool MakeDirectory(const std::string& path, - const mode_t* mode = nullptr); + static Status MakeDirectory(const char* path, const mode_t* mode = nullptr); + static Status MakeDirectory(std::string const& path, + const mode_t* mode = nullptr); /** * Copy the source file to the destination file only -- GitLab