diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-08-26 00:02:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-26 00:02:54 +0200 |
commit | a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d (patch) | |
tree | ed11d99eaacd6da5d9d18cc4dbbbcaa658f5f9fb | |
parent | Merge pull request #11371 from FearlessTobi/fix-cli-updates (diff) | |
parent | filesystem: Return correct error for RenameFile when dest_path already exists (diff) | |
download | yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.tar yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.tar.gz yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.tar.bz2 yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.tar.lz yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.tar.xz yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.tar.zst yuzu-a8edbb7019a4fd6e432cdeaf6360acb7d6e2665d.zip |
-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 @@ #include <utility> #include "common/assert.h" +#include "common/fs/fs.h" #include "common/fs/path_util.h" #include "common/settings.h" #include "core/core.h" @@ -154,10 +155,18 @@ Result VfsDirectoryServiceWrapper::RenameFile(const std::string& src_path_, std::string src_path(Common::FS::SanitizePath(src_path_)); std::string dest_path(Common::FS::SanitizePath(dest_path_)); auto src = backing->GetFileRelative(src_path); + auto dst = backing->GetFileRelative(dest_path); if (Common::FS::GetParentPath(src_path) == Common::FS::GetParentPath(dest_path)) { // Use more-optimized vfs implementation rename. - if (src == nullptr) + if (src == nullptr) { return FileSys::ERROR_PATH_NOT_FOUND; + } + + if (dst && Common::FS::Exists(dst->GetFullPath())) { + LOG_ERROR(Service_FS, "File at new_path={} already exists", dst->GetFullPath()); + return FileSys::ERROR_PATH_ALREADY_EXISTS; + } + if (!src->Rename(Common::FS::GetFilename(dest_path))) { // TODO(DarkLordZach): Find a better error code for this return ResultUnknown; |