diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/filesystem/filesystem.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/core/hle/service/filesystem/filesystem.cpp b/src/core/hle/service/filesystem/filesystem.cpp index 4c1ea1a5b..508db7360 100644 --- a/src/core/hle/service/filesystem/filesystem.cpp +++ b/src/core/hle/service/filesystem/filesystem.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <utility> | 4 | #include <utility> |
| 5 | 5 | ||
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "common/fs/fs.h" | ||
| 7 | #include "common/fs/path_util.h" | 8 | #include "common/fs/path_util.h" |
| 8 | #include "common/settings.h" | 9 | #include "common/settings.h" |
| 9 | #include "core/core.h" | 10 | #include "core/core.h" |
| @@ -154,10 +155,18 @@ Result VfsDirectoryServiceWrapper::RenameFile(const std::string& src_path_, | |||
| 154 | std::string src_path(Common::FS::SanitizePath(src_path_)); | 155 | std::string src_path(Common::FS::SanitizePath(src_path_)); |
| 155 | std::string dest_path(Common::FS::SanitizePath(dest_path_)); | 156 | std::string dest_path(Common::FS::SanitizePath(dest_path_)); |
| 156 | auto src = backing->GetFileRelative(src_path); | 157 | auto src = backing->GetFileRelative(src_path); |
| 158 | auto dst = backing->GetFileRelative(dest_path); | ||
| 157 | if (Common::FS::GetParentPath(src_path) == Common::FS::GetParentPath(dest_path)) { | 159 | if (Common::FS::GetParentPath(src_path) == Common::FS::GetParentPath(dest_path)) { |
| 158 | // Use more-optimized vfs implementation rename. | 160 | // Use more-optimized vfs implementation rename. |
| 159 | if (src == nullptr) | 161 | if (src == nullptr) { |
| 160 | return FileSys::ERROR_PATH_NOT_FOUND; | 162 | return FileSys::ERROR_PATH_NOT_FOUND; |
| 163 | } | ||
| 164 | |||
| 165 | if (dst && Common::FS::Exists(dst->GetFullPath())) { | ||
| 166 | LOG_ERROR(Service_FS, "File at new_path={} already exists", dst->GetFullPath()); | ||
| 167 | return FileSys::ERROR_PATH_ALREADY_EXISTS; | ||
| 168 | } | ||
| 169 | |||
| 161 | if (!src->Rename(Common::FS::GetFilename(dest_path))) { | 170 | if (!src->Rename(Common::FS::GetFilename(dest_path))) { |
| 162 | // TODO(DarkLordZach): Find a better error code for this | 171 | // TODO(DarkLordZach): Find a better error code for this |
| 163 | return ResultUnknown; | 172 | return ResultUnknown; |