summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/file_sys')
-rw-r--r--src/core/file_sys/patch_manager.cpp28
-rw-r--r--src/core/file_sys/patch_manager.h2
2 files changed, 23 insertions, 7 deletions
diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp
index 8b7d79773..b6e25f7eb 100644
--- a/src/core/file_sys/patch_manager.cpp
+++ b/src/core/file_sys/patch_manager.cpp
@@ -82,15 +82,31 @@ VirtualFile PatchManager::PatchRomFS(VirtualFile romfs, u64 ivfc_offset,
return romfs;
}
-std::map<PatchType, u32> PatchManager::GetPatchVersionNames() const {
- std::map<PatchType, u32> out;
+std::map<PatchType, std::string> PatchManager::GetPatchVersionNames() const {
+ std::map<PatchType, std::string> out;
const auto installed = Service::FileSystem::GetUnionContents();
const auto update_tid = GetUpdateTitleID(title_id);
- const auto update_version = installed->GetEntryVersion(update_tid);
- if (update_version != boost::none &&
- installed->HasEntry(update_tid, ContentRecordType::Program)) {
- out[PatchType::Update] = update_version.get();
+ const auto update_control = installed->GetEntry(title_id, ContentRecordType::Control);
+ if (update_control != nullptr) {
+ do {
+ const auto romfs =
+ PatchRomFS(update_control->GetRomFS(), update_control->GetBaseIVFCOffset(),
+ FileSys::ContentRecordType::Control);
+ if (romfs == nullptr)
+ break;
+
+ const auto control_dir = FileSys::ExtractRomFS(romfs);
+ if (control_dir == nullptr)
+ break;
+
+ const auto nacp_file = control_dir->GetFile("control.nacp");
+ if (nacp_file == nullptr)
+ break;
+
+ FileSys::NACP nacp(nacp_file);
+ out[PatchType::Update] = nacp.GetVersionString();
+ } while (false);
}
return out;
diff --git a/src/core/file_sys/patch_manager.h b/src/core/file_sys/patch_manager.h
index 021bc3366..b6bf86222 100644
--- a/src/core/file_sys/patch_manager.h
+++ b/src/core/file_sys/patch_manager.h
@@ -45,7 +45,7 @@ public:
// Returns a vector of pairs between patch names and patch versions.
// i.e. Update v80 will return {Update, 80}
- std::map<PatchType, u32> GetPatchVersionNames() const;
+ std::map<PatchType, std::string> GetPatchVersionNames() const;
private:
u64 title_id;