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.
master
comex 2020-08-31 10:56:19 +07:00
parent 9477d23d70
commit e9bb95ae16
1 changed files with 10 additions and 4 deletions

@ -133,8 +133,11 @@ VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_
} }
cache.erase(old_path); cache.erase(old_path);
file->Open(new_path, "r+b"); if (file->Open(new_path, "r+b")) {
cache.insert_or_assign(new_path, std::move(file)); 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 { } else {
UNREACHABLE(); UNREACHABLE();
return nullptr; return nullptr;
@ -214,9 +217,12 @@ VirtualDir RealVfsFilesystem::MoveDirectory(std::string_view old_path_,
} }
auto file = cached.lock(); auto file = cached.lock();
file->Open(file_new_path, "r+b");
cache.erase(file_old_path); cache.erase(file_old_path);
if (file->Open(file_new_path, "r+b")) {
cache.insert_or_assign(std::move(file_new_path), std::move(file)); 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); return OpenDirectory(new_path, Mode::ReadWrite);