summaryrefslogtreecommitdiff
path: root/src/core/loader/nsp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/loader/nsp.cpp')
-rw-r--r--src/core/loader/nsp.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp
index 15e528fa8..e821937fd 100644
--- a/src/core/loader/nsp.cpp
+++ b/src/core/loader/nsp.cpp
@@ -21,26 +21,33 @@
21 21
22namespace Loader { 22namespace Loader {
23 23
24AppLoader_NSP::AppLoader_NSP(FileSys::VirtualFile file) 24AppLoader_NSP::AppLoader_NSP(FileSys::VirtualFile file,
25 const Service::FileSystem::FileSystemController& fsc,
26 const FileSys::ContentProvider& content_provider)
25 : AppLoader(file), nsp(std::make_unique<FileSys::NSP>(file)), 27 : AppLoader(file), nsp(std::make_unique<FileSys::NSP>(file)),
26 title_id(nsp->GetProgramTitleID()) { 28 title_id(nsp->GetProgramTitleID()) {
27 29
28 if (nsp->GetStatus() != ResultStatus::Success) 30 if (nsp->GetStatus() != ResultStatus::Success) {
29 return; 31 return;
32 }
30 33
31 if (nsp->IsExtractedType()) { 34 if (nsp->IsExtractedType()) {
32 secondary_loader = std::make_unique<AppLoader_DeconstructedRomDirectory>(nsp->GetExeFS()); 35 secondary_loader = std::make_unique<AppLoader_DeconstructedRomDirectory>(nsp->GetExeFS());
33 } else { 36 } else {
34 const auto control_nca = 37 const auto control_nca =
35 nsp->GetNCA(nsp->GetProgramTitleID(), FileSys::ContentRecordType::Control); 38 nsp->GetNCA(nsp->GetProgramTitleID(), FileSys::ContentRecordType::Control);
36 if (control_nca == nullptr || control_nca->GetStatus() != ResultStatus::Success) 39 if (control_nca == nullptr || control_nca->GetStatus() != ResultStatus::Success) {
37 return; 40 return;
41 }
38 42
39 std::tie(nacp_file, icon_file) = 43 std::tie(nacp_file, icon_file) = [this, &content_provider, &control_nca, &fsc] {
40 FileSys::PatchManager(nsp->GetProgramTitleID()).ParseControlNCA(*control_nca); 44 const FileSys::PatchManager pm{nsp->GetProgramTitleID(), fsc, content_provider};
45 return pm.ParseControlNCA(*control_nca);
46 }();
41 47
42 if (title_id == 0) 48 if (title_id == 0) {
43 return; 49 return;
50 }
44 51
45 secondary_loader = std::make_unique<AppLoader_NCA>( 52 secondary_loader = std::make_unique<AppLoader_NCA>(
46 nsp->GetNCAFile(title_id, FileSys::ContentRecordType::Program)); 53 nsp->GetNCAFile(title_id, FileSys::ContentRecordType::Program));