Merge pull request #4265 from Morph1984/file-rename

vfs_real: Fix MoveFile
This commit is contained in:
Fernando Sahmkow 2020-07-12 13:00:09 -04:00 committed by GitHub
commit 739d90ee66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -112,19 +112,26 @@ VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_
const auto new_path = const auto new_path =
FileUtil::SanitizePath(new_path_, FileUtil::DirectorySeparator::PlatformDefault); 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()) { if (cache.find(old_path) != cache.end()) {
auto cached = cache[old_path]; auto file = cache[old_path].lock();
if (!cached.expired()) {
auto file = cached.lock(); if (!cache[old_path].expired()) {
file->Open(new_path, "r+b"); file->Close();
cache.erase(old_path);
cache[new_path] = file;
} }
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); return OpenFile(new_path, Mode::ReadWrite);
} }