diff options
| author | comex <comexk@gmail.com> | 2020-08-31 10:56:19 -0400 | 
|---|---|---|
| committer | comex <comexk@gmail.com> | 2021-01-23 16:19:29 -0500 | 
| commit | e9bb95ae1604ab2077ab80782c690daa005fcd21 (patch) | |
| tree | 1eec360d2c4a8300206ae50931dd71c57261c624 /src/core | |
| parent | 9477d23d70067b39a03c2d15a5e5ee202f616793 (diff) | |
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/core')
| -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_          }          cache.erase(old_path); -        file->Open(new_path, "r+b"); -        cache.insert_or_assign(new_path, std::move(file)); +        if (file->Open(new_path, "r+b")) { +            cache.insert_or_assign(new_path, std::move(file)); +        } else { +            LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", new_path); +        }      } else {          UNREACHABLE();          return nullptr; @@ -214,9 +217,12 @@ VirtualDir RealVfsFilesystem::MoveDirectory(std::string_view old_path_,          }          auto file = cached.lock(); -        file->Open(file_new_path, "r+b");          cache.erase(file_old_path); -        cache.insert_or_assign(std::move(file_new_path), std::move(file)); +        if (file->Open(file_new_path, "r+b")) { +            cache.insert_or_assign(std::move(file_new_path), std::move(file)); +        } else { +            LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", file_new_path); +        }      }      return OpenDirectory(new_path, Mode::ReadWrite); | 
