summaryrefslogtreecommitdiff
path: root/src/common/file_util.cpp
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-12-09 05:22:16 -0300
committerGravatar ReinUsesLisp2020-12-09 05:42:03 -0300
commit532983437616e15539b448594a360c138995e282 (patch)
tree2537197bb02dfce45dbc55933cabfa06a1b5bc25 /src/common/file_util.cpp
parentcommon/file_util: Succeed on CreateDir when the directory exists (diff)
downloadyuzu-532983437616e15539b448594a360c138995e282.tar.gz
yuzu-532983437616e15539b448594a360c138995e282.tar.xz
yuzu-532983437616e15539b448594a360c138995e282.zip
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 '')
-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 c4d738bb6..7752c0421 100644
--- a/src/common/file_util.cpp
+++ b/src/common/file_util.cpp
@@ -114,20 +114,41 @@ bool CreateDir(const fs::path& path) {
114 return true; 114 return true;
115} 115}
116 116
117bool CreateFullPath(const fs::path& path) { 117bool CreateDirs(const fs::path& path) {
118 LOG_TRACE(Common_Filesystem, "path {}", path.string()); 118 LOG_TRACE(Common_Filesystem, "path {}", path.string());
119 119
120 if (Exists(path)) {
121 LOG_DEBUG(Common_Filesystem, "path exists {}", path.string());
122 return true;
123 }
124
120 std::error_code ec; 125 std::error_code ec;
121 const bool success = fs::create_directories(path, ec); 126 const bool success = fs::create_directories(path, ec);
122 127
123 if (!success) { 128 if (!success) {
124 LOG_ERROR(Common_Filesystem, "Unable to create full path: {}", ec.message()); 129 LOG_ERROR(Common_Filesystem, "Unable to create directories: {}", ec.message());
125 return false; 130 return false;
126 } 131 }
127 132
128 return true; 133 return true;
129} 134}
130 135
136bool CreateFullPath(const fs::path& path) {
137 LOG_TRACE(Common_Filesystem, "path {}", path);
138
139 // Removes trailing slashes and turns any '\' into '/'
140 const auto new_path = SanitizePath(path.string(), DirectorySeparator::ForwardSlash);
141
142 if (new_path.rfind('.') == std::string::npos) {
143 // The path is a directory
144 return CreateDirs(new_path);
145 } else {
146 // The path is a file
147 // Creates directory preceding the last '/'
148 return CreateDirs(new_path.substr(0, new_path.rfind('/')));
149 }
150}
151
131bool Rename(const fs::path& src, const fs::path& dst) { 152bool Rename(const fs::path& src, const fs::path& dst) {
132 LOG_TRACE(Common_Filesystem, "{} --> {}", src.string(), dst.string()); 153 LOG_TRACE(Common_Filesystem, "{} --> {}", src.string(), dst.string());
133 154