aboutsummaryrefslogtreecommitdiff
path: root/src/common/file_util.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-12-09 05:22:16 -0300
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-12-09 05:42:03 -0300
commit443d8d3a2377060890055079113d9eca76a4e512 (patch)
tree2537197bb02dfce45dbc55933cabfa06a1b5bc25 /src/common/file_util.cpp
parent74e078db5580dd0b0986b30121e69318f83fed09 (diff)
common/file_util: Fix and deprecate CreateFullPath, add CreateDirs
Fix CreateFullPath to have its intended previous behavior (whatever that was), and deprecate it in favor of the new CreateDirs function. Unlike CreateDir, CreateDirs is marked as [[nodiscard]] to avoid new code ignoring its result value.
Diffstat (limited to 'src/common/file_util.cpp')
-rw-r--r--src/common/file_util.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp
index c4d738bb61..7752c04213 100644
--- a/src/common/file_util.cpp
+++ b/src/common/file_util.cpp
@@ -114,20 +114,41 @@ bool CreateDir(const fs::path& path) {
return true;
}
-bool CreateFullPath(const fs::path& path) {
+bool CreateDirs(const fs::path& path) {
LOG_TRACE(Common_Filesystem, "path {}", path.string());
+ if (Exists(path)) {
+ LOG_DEBUG(Common_Filesystem, "path exists {}", path.string());
+ return true;
+ }
+
std::error_code ec;
const bool success = fs::create_directories(path, ec);
if (!success) {
- LOG_ERROR(Common_Filesystem, "Unable to create full path: {}", ec.message());
+ LOG_ERROR(Common_Filesystem, "Unable to create directories: {}", ec.message());
return false;
}
return true;
}
+bool CreateFullPath(const fs::path& path) {
+ LOG_TRACE(Common_Filesystem, "path {}", path);
+
+ // Removes trailing slashes and turns any '\' into '/'
+ const auto new_path = SanitizePath(path.string(), DirectorySeparator::ForwardSlash);
+
+ if (new_path.rfind('.') == std::string::npos) {
+ // The path is a directory
+ return CreateDirs(new_path);
+ } else {
+ // The path is a file
+ // Creates directory preceding the last '/'
+ return CreateDirs(new_path.substr(0, new_path.rfind('/')));
+ }
+}
+
bool Rename(const fs::path& src, const fs::path& dst) {
LOG_TRACE(Common_Filesystem, "{} --> {}", src.string(), dst.string());