diff options
author | bunnei <bunneidev@gmail.com> | 2018-10-28 07:29:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-28 07:29:14 +0100 |
commit | 6f620b244149969560fb78b880e35e9af6fc97ad (patch) | |
tree | 9c22d0a43135bfc24340b2d2f66884e7afa21930 | |
parent | Merge pull request #1582 from Tinob/master (diff) | |
parent | loader/nsp: Move secondary loader initialization to constructor (diff) | |
download | yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.tar yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.tar.gz yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.tar.bz2 yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.tar.lz yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.tar.xz yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.tar.zst yuzu-6f620b244149969560fb78b880e35e9af6fc97ad.zip |
-rw-r--r-- | src/core/loader/nsp.cpp | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp index 13e57848d..080d89904 100644 --- a/src/core/loader/nsp.cpp +++ b/src/core/loader/nsp.cpp @@ -36,6 +36,16 @@ AppLoader_NSP::AppLoader_NSP(FileSys::VirtualFile file) std::tie(nacp_file, icon_file) = FileSys::PatchManager(nsp->GetProgramTitleID()).ParseControlNCA(*control_nca); + + if (nsp->IsExtractedType()) { + secondary_loader = std::make_unique<AppLoader_DeconstructedRomDirectory>(nsp->GetExeFS()); + } else { + if (title_id == 0) + return; + + secondary_loader = std::make_unique<AppLoader_NCA>( + nsp->GetNCAFile(title_id, FileSys::ContentRecordType::Program)); + } } AppLoader_NSP::~AppLoader_NSP() = default; @@ -67,26 +77,19 @@ ResultStatus AppLoader_NSP::Load(Kernel::Process& process) { return ResultStatus::ErrorAlreadyLoaded; } - if (nsp->IsExtractedType()) { - secondary_loader = std::make_unique<AppLoader_DeconstructedRomDirectory>(nsp->GetExeFS()); - } else { - if (title_id == 0) - return ResultStatus::ErrorNSPMissingProgramNCA; - - secondary_loader = std::make_unique<AppLoader_NCA>( - nsp->GetNCAFile(title_id, FileSys::ContentRecordType::Program)); + if (title_id == 0) + return ResultStatus::ErrorNSPMissingProgramNCA; - if (nsp->GetStatus() != ResultStatus::Success) - return nsp->GetStatus(); + if (nsp->GetStatus() != ResultStatus::Success) + return nsp->GetStatus(); - if (nsp->GetProgramStatus(title_id) != ResultStatus::Success) - return nsp->GetProgramStatus(title_id); + if (nsp->GetProgramStatus(title_id) != ResultStatus::Success) + return nsp->GetProgramStatus(title_id); - if (nsp->GetNCA(title_id, FileSys::ContentRecordType::Program) == nullptr) { - if (!Core::Crypto::KeyManager::KeyFileExists(false)) - return ResultStatus::ErrorMissingProductionKeyFile; - return ResultStatus::ErrorNSPMissingProgramNCA; - } + if (nsp->GetNCA(title_id, FileSys::ContentRecordType::Program) == nullptr) { + if (!Core::Crypto::KeyManager::KeyFileExists(false)) + return ResultStatus::ErrorMissingProductionKeyFile; + return ResultStatus::ErrorNSPMissingProgramNCA; } const auto result = secondary_loader->Load(process); |