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