summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2020-07-07 12:57:20 +0200
committerMorph <39850852+Morph1984@users.noreply.github.com>2020-07-10 06:39:23 +0200
commit755506d4047af89aaa4cb90720ef721582431784 (patch)
treeb527500fee78230fde8a72860e53fcc6e44ddb11
parentMerge pull request #4285 from ogniK5377/fmt-fix (diff)
downloadyuzu-755506d4047af89aaa4cb90720ef721582431784.tar
yuzu-755506d4047af89aaa4cb90720ef721582431784.tar.gz
yuzu-755506d4047af89aaa4cb90720ef721582431784.tar.bz2
yuzu-755506d4047af89aaa4cb90720ef721582431784.tar.lz
yuzu-755506d4047af89aaa4cb90720ef721582431784.tar.xz
yuzu-755506d4047af89aaa4cb90720ef721582431784.tar.zst
yuzu-755506d4047af89aaa4cb90720ef721582431784.zip
-rw-r--r--src/core/file_sys/vfs_real.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/core/file_sys/vfs_real.cpp b/src/core/file_sys/vfs_real.cpp
index e21300a7c..96ce5957c 100644
--- a/src/core/file_sys/vfs_real.cpp
+++ b/src/core/file_sys/vfs_real.cpp
@@ -112,19 +112,26 @@ VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_
const auto new_path =
FileUtil::SanitizePath(new_path_, FileUtil::DirectorySeparator::PlatformDefault);
- if (!FileUtil::Exists(old_path) || FileUtil::Exists(new_path) ||
- FileUtil::IsDirectory(old_path) || !FileUtil::Rename(old_path, new_path))
- return nullptr;
-
if (cache.find(old_path) != cache.end()) {
- auto cached = cache[old_path];
- if (!cached.expired()) {
- auto file = cached.lock();
- file->Open(new_path, "r+b");
- cache.erase(old_path);
- cache[new_path] = file;
+ auto file = cache[old_path].lock();
+
+ if (!cache[old_path].expired()) {
+ file->Close();
+ }
+
+ if (!FileUtil::Exists(old_path) || FileUtil::Exists(new_path) ||
+ FileUtil::IsDirectory(old_path) || !FileUtil::Rename(old_path, new_path)) {
+ return nullptr;
}
+
+ cache.erase(old_path);
+ file->Open(new_path, "r+b");
+ cache[new_path] = file;
+ } else {
+ UNREACHABLE();
+ return nullptr;
}
+
return OpenFile(new_path, Mode::ReadWrite);
}