Browse Source
Merge pull request #11370 from FearlessTobi/fix-filesize
filesystem: Return correct error for RenameFile when dest_path already exists
pull/15/merge
liamwhite
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
10 additions and
1 deletions
-
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; |
|
|
|
|