diff options
Diffstat (limited to 'src/core/loader/nsp.cpp')
| -rw-r--r-- | src/core/loader/nsp.cpp | 22 |
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 | ||
| 22 | namespace Loader { | 22 | namespace Loader { |
| 23 | 23 | ||
| 24 | AppLoader_NSP::AppLoader_NSP(FileSys::VirtualFile file) | 24 | AppLoader_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)); |