diff options
Diffstat (limited to 'src/core/loader/nsp.cpp')
| -rw-r--r-- | src/core/loader/nsp.cpp | 19 |
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 | ||
| 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 | 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)); |