summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-08-26 00:02:54 +0200
committerGitHub <noreply@github.com>2023-08-26 00:02:54 +0200
commita8edbb7019a4fd6e432cdeaf6360acb7d6e2665d (patch)
treeed11d99eaacd6da5d9d18cc4dbbbcaa658f5f9fb
parentMerge pull request #11371 from FearlessTobi/fix-cli-updates (diff)
parentfilesystem: Return correct error for RenameFile when dest_path already exists (diff)
downloadyuzu-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.cpp11
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;