summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar comex2020-08-31 10:56:19 -0400
committerGravatar comex2021-01-23 16:19:29 -0500
commite9bb95ae1604ab2077ab80782c690daa005fcd21 (patch)
tree1eec360d2c4a8300206ae50931dd71c57261c624 /src
parentshader_ir: Fix comment typo (diff)
downloadyuzu-e9bb95ae1604ab2077ab80782c690daa005fcd21.tar.gz
yuzu-e9bb95ae1604ab2077ab80782c690daa005fcd21.tar.xz
yuzu-e9bb95ae1604ab2077ab80782c690daa005fcd21.zip
vfs_real: When moving files or directories, don't assume file opening will succeed
Found this via a warning, but it's a substantive fix. Since this is only for a cache, it should be safe to silently drop the entry if opening fails. I think.
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/vfs_real.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/core/file_sys/vfs_real.cpp b/src/core/file_sys/vfs_real.cpp
index a287eebe3..a44ce6288 100644
--- a/src/core/file_sys/vfs_real.cpp
+++ b/src/core/file_sys/vfs_real.cpp
@@ -133,8 +133,11 @@ VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_
133 } 133 }
134 134
135 cache.erase(old_path); 135 cache.erase(old_path);
136 file->Open(new_path, "r+b"); 136 if (file->Open(new_path, "r+b")) {
137 cache.insert_or_assign(new_path, std::move(file)); 137 cache.insert_or_assign(new_path, std::move(file));
138 } else {
139 LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", new_path);
140 }
138 } else { 141 } else {
139 UNREACHABLE(); 142 UNREACHABLE();
140 return nullptr; 143 return nullptr;
@@ -214,9 +217,12 @@ VirtualDir RealVfsFilesystem::MoveDirectory(std::string_view old_path_,
214 } 217 }
215 218
216 auto file = cached.lock(); 219 auto file = cached.lock();
217 file->Open(file_new_path, "r+b");
218 cache.erase(file_old_path); 220 cache.erase(file_old_path);
219 cache.insert_or_assign(std::move(file_new_path), std::move(file)); 221 if (file->Open(file_new_path, "r+b")) {
222 cache.insert_or_assign(std::move(file_new_path), std::move(file));
223 } else {
224 LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", file_new_path);
225 }
220 } 226 }
221 227
222 return OpenDirectory(new_path, Mode::ReadWrite); 228 return OpenDirectory(new_path, Mode::ReadWrite);