diff options
| author | 2020-08-31 10:56:19 -0400 | |
|---|---|---|
| committer | 2021-01-23 16:19:29 -0500 | |
| commit | e9bb95ae1604ab2077ab80782c690daa005fcd21 (patch) | |
| tree | 1eec360d2c4a8300206ae50931dd71c57261c624 /src | |
| parent | shader_ir: Fix comment typo (diff) | |
| download | yuzu-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.cpp | 14 |
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); |