patch_manager: Invert conditionals within ApplyLayeredFS()

Avoids the need to nest code quite a bit by early-exiting in error
cases.
This commit is contained in:
Lioncash 2018-09-25 20:09:20 -04:00
parent e3b2ef9170
commit 11104b4883

View file

@ -70,15 +70,18 @@ VirtualDir PatchManager::PatchExeFS(VirtualDir exefs) const {
static void ApplyLayeredFS(VirtualFile& romfs, u64 title_id, ContentRecordType type) { static void ApplyLayeredFS(VirtualFile& romfs, u64 title_id, ContentRecordType type) {
const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id); const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id);
if (type == ContentRecordType::Program && load_dir != nullptr && load_dir->GetSize() > 0) { if (type != ContentRecordType::Program || load_dir == nullptr || load_dir->GetSize() <= 0) {
auto extracted = ExtractRomFS(romfs); return;
}
auto extracted = ExtractRomFS(romfs);
if (extracted == nullptr) {
return;
}
if (extracted != nullptr) {
auto patch_dirs = load_dir->GetSubdirectories(); auto patch_dirs = load_dir->GetSubdirectories();
std::sort(patch_dirs.begin(), patch_dirs.end(), std::sort(patch_dirs.begin(), patch_dirs.end(),
[](const VirtualDir& l, const VirtualDir& r) { [](const VirtualDir& l, const VirtualDir& r) { return l->GetName() < r->GetName(); });
return l->GetName() < r->GetName();
});
std::vector<VirtualDir> layers; std::vector<VirtualDir> layers;
layers.reserve(patch_dirs.size() + 1); layers.reserve(patch_dirs.size() + 1);
@ -87,21 +90,21 @@ static void ApplyLayeredFS(VirtualFile& romfs, u64 title_id, ContentRecordType t
if (romfs_dir != nullptr) if (romfs_dir != nullptr)
layers.push_back(std::move(romfs_dir)); layers.push_back(std::move(romfs_dir));
} }
layers.push_back(std::move(extracted)); layers.push_back(std::move(extracted));
auto layered = LayeredVfsDirectory::MakeLayeredDirectory(std::move(layers)); auto layered = LayeredVfsDirectory::MakeLayeredDirectory(std::move(layers));
if (layered != nullptr) { if (layered == nullptr) {
auto packed = CreateRomFS(std::move(layered)); return;
}
auto packed = CreateRomFS(std::move(layered));
if (packed == nullptr) {
return;
}
if (packed != nullptr) {
LOG_INFO(Loader, " RomFS: LayeredFS patches applied successfully"); LOG_INFO(Loader, " RomFS: LayeredFS patches applied successfully");
romfs = std::move(packed); romfs = std::move(packed);
} }
}
}
}
}
VirtualFile PatchManager::PatchRomFS(VirtualFile romfs, u64 ivfc_offset, VirtualFile PatchManager::PatchRomFS(VirtualFile romfs, u64 ivfc_offset,
ContentRecordType type) const { ContentRecordType type) const {