summaryrefslogtreecommitdiff
path: root/src/core/file_sys
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-09-01 13:11:30 -0400
committerGravatar Zach Hilman2018-09-04 16:24:02 -0400
commitc91b60a421a3bd0dc85d80e0a5a2d261370df340 (patch)
treecc4867bcef325b7e7b4d268f29705e38fd3ca180 /src/core/file_sys
parentbktr: Add logging on successful patch (diff)
downloadyuzu-c91b60a421a3bd0dc85d80e0a5a2d261370df340.tar.gz
yuzu-c91b60a421a3bd0dc85d80e0a5a2d261370df340.tar.xz
yuzu-c91b60a421a3bd0dc85d80e0a5a2d261370df340.zip
game_list: Fix version display on non-NAND titles
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,
82 return romfs; 82 return romfs;
83} 83}
84 84
85std::map<PatchType, u32> PatchManager::GetPatchVersionNames() const { 85std::map<PatchType, std::string> PatchManager::GetPatchVersionNames() const {
86 std::map<PatchType, u32> out; 86 std::map<PatchType, std::string> out;
87 const auto installed = Service::FileSystem::GetUnionContents(); 87 const auto installed = Service::FileSystem::GetUnionContents();
88 88
89 const auto update_tid = GetUpdateTitleID(title_id); 89 const auto update_tid = GetUpdateTitleID(title_id);
90 const auto update_version = installed->GetEntryVersion(update_tid); 90 const auto update_control = installed->GetEntry(title_id, ContentRecordType::Control);
91 if (update_version != boost::none && 91 if (update_control != nullptr) {
92 installed->HasEntry(update_tid, ContentRecordType::Program)) { 92 do {
93 out[PatchType::Update] = update_version.get(); 93 const auto romfs =
94 PatchRomFS(update_control->GetRomFS(), update_control->GetBaseIVFCOffset(),
95 FileSys::ContentRecordType::Control);
96 if (romfs == nullptr)
97 break;
98
99 const auto control_dir = FileSys::ExtractRomFS(romfs);
100 if (control_dir == nullptr)
101 break;
102
103 const auto nacp_file = control_dir->GetFile("control.nacp");
104 if (nacp_file == nullptr)
105 break;
106
107 FileSys::NACP nacp(nacp_file);
108 out[PatchType::Update] = nacp.GetVersionString();
109 } while (false);
94 } 110 }
95 111
96 return out; 112 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:
45 45
46 // Returns a vector of pairs between patch names and patch versions. 46 // Returns a vector of pairs between patch names and patch versions.
47 // i.e. Update v80 will return {Update, 80} 47 // i.e. Update v80 will return {Update, 80}
48 std::map<PatchType, u32> GetPatchVersionNames() const; 48 std::map<PatchType, std::string> GetPatchVersionNames() const;
49 49
50private: 50private:
51 u64 title_id; 51 u64 title_id;