diff options
| author | 2018-09-03 18:46:56 -0400 | |
|---|---|---|
| committer | 2018-09-04 16:24:24 -0400 | |
| commit | 92e26df00f12de2e084ceb84d17ca79c5323a315 (patch) | |
| tree | 4c08acfc0921310b230275a94559979d14c3e2cb /src/core | |
| parent | game_list: Fix version display on non-NAND titles (diff) | |
| download | yuzu-92e26df00f12de2e084ceb84d17ca79c5323a315.tar.gz yuzu-92e26df00f12de2e084ceb84d17ca79c5323a315.tar.xz yuzu-92e26df00f12de2e084ceb84d17ca79c5323a315.zip | |
nsp: Fix error masking issue with XCI files
Now display correct error instead of catch-all MissingProgramNCA
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/file_sys/card_image.cpp | 6 | ||||
| -rw-r--r-- | src/core/file_sys/content_archive.cpp | 8 | ||||
| -rw-r--r-- | src/core/file_sys/submission_package.cpp | 5 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/core/file_sys/card_image.cpp b/src/core/file_sys/card_image.cpp index 1bd3353e4..8218893b2 100644 --- a/src/core/file_sys/card_image.cpp +++ b/src/core/file_sys/card_image.cpp | |||
| @@ -52,11 +52,11 @@ XCI::XCI(VirtualFile file_) : file(std::move(file_)), partitions(0x4) { | |||
| 52 | const auto secure_ncas = secure_partition->GetNCAsCollapsed(); | 52 | const auto secure_ncas = secure_partition->GetNCAsCollapsed(); |
| 53 | std::copy(secure_ncas.begin(), secure_ncas.end(), std::back_inserter(ncas)); | 53 | std::copy(secure_ncas.begin(), secure_ncas.end(), std::back_inserter(ncas)); |
| 54 | 54 | ||
| 55 | program_nca_status = Loader::ResultStatus::ErrorXCIMissingProgramNCA; | ||
| 56 | program = | 55 | program = |
| 57 | secure_partition->GetNCA(secure_partition->GetProgramTitleID(), ContentRecordType::Program); | 56 | secure_partition->GetNCA(secure_partition->GetProgramTitleID(), ContentRecordType::Program); |
| 58 | if (program != nullptr) | 57 | program_nca_status = secure_partition->GetProgramStatus(secure_partition->GetProgramTitleID()); |
| 59 | program_nca_status = program->GetStatus(); | 58 | if (program_nca_status == Loader::ResultStatus::ErrorNSPMissingProgramNCA) |
| 59 | program_nca_status = Loader::ResultStatus::ErrorXCIMissingProgramNCA; | ||
| 60 | 60 | ||
| 61 | auto result = AddNCAFromPartition(XCIPartition::Update); | 61 | auto result = AddNCAFromPartition(XCIPartition::Update); |
| 62 | if (result != Loader::ResultStatus::Success) { | 62 | if (result != Loader::ResultStatus::Success) { |
diff --git a/src/core/file_sys/content_archive.cpp b/src/core/file_sys/content_archive.cpp index 26e1daf55..1c093d94f 100644 --- a/src/core/file_sys/content_archive.cpp +++ b/src/core/file_sys/content_archive.cpp | |||
| @@ -444,6 +444,12 @@ NCA::NCA(VirtualFile file_, VirtualFile bktr_base_romfs_, u64 bktr_base_ivfc_off | |||
| 444 | dirs.push_back(std::move(npfs)); | 444 | dirs.push_back(std::move(npfs)); |
| 445 | if (IsDirectoryExeFS(dirs.back())) | 445 | if (IsDirectoryExeFS(dirs.back())) |
| 446 | exefs = dirs.back(); | 446 | exefs = dirs.back(); |
| 447 | } else { | ||
| 448 | if (has_rights_id) | ||
| 449 | status = Loader::ResultStatus::ErrorIncorrectTitlekeyOrTitlekek; | ||
| 450 | else | ||
| 451 | status = Loader::ResultStatus::ErrorIncorrectKeyAreaKey; | ||
| 452 | return; | ||
| 447 | } | 453 | } |
| 448 | } else { | 454 | } else { |
| 449 | if (status != Loader::ResultStatus::Success) | 455 | if (status != Loader::ResultStatus::Success) |
| @@ -491,8 +497,6 @@ NCAContentType NCA::GetType() const { | |||
| 491 | u64 NCA::GetTitleId() const { | 497 | u64 NCA::GetTitleId() const { |
| 492 | if (is_update || status == Loader::ResultStatus::ErrorMissingBKTRBaseRomFS) | 498 | if (is_update || status == Loader::ResultStatus::ErrorMissingBKTRBaseRomFS) |
| 493 | return header.title_id | 0x800; | 499 | return header.title_id | 0x800; |
| 494 | if (status != Loader::ResultStatus::Success) | ||
| 495 | return {}; | ||
| 496 | return header.title_id; | 500 | return header.title_id; |
| 497 | } | 501 | } |
| 498 | 502 | ||
diff --git a/src/core/file_sys/submission_package.cpp b/src/core/file_sys/submission_package.cpp index bde879861..182b40698 100644 --- a/src/core/file_sys/submission_package.cpp +++ b/src/core/file_sys/submission_package.cpp | |||
| @@ -60,8 +60,11 @@ NSP::NSP(VirtualFile file_) | |||
| 60 | for (const auto& outer_file : files) { | 60 | for (const auto& outer_file : files) { |
| 61 | if (outer_file->GetName().substr(outer_file->GetName().size() - 9) == ".cnmt.nca") { | 61 | if (outer_file->GetName().substr(outer_file->GetName().size() - 9) == ".cnmt.nca") { |
| 62 | const auto nca = std::make_shared<NCA>(outer_file); | 62 | const auto nca = std::make_shared<NCA>(outer_file); |
| 63 | if (nca->GetStatus() != Loader::ResultStatus::Success) | 63 | if (nca->GetStatus() != Loader::ResultStatus::Success) { |
| 64 | program_status[nca->GetTitleId()] = nca->GetStatus(); | ||
| 64 | continue; | 65 | continue; |
| 66 | } | ||
| 67 | |||
| 65 | const auto section0 = nca->GetSubdirectories()[0]; | 68 | const auto section0 = nca->GetSubdirectories()[0]; |
| 66 | 69 | ||
| 67 | for (const auto& inner_file : section0->GetFiles()) { | 70 | for (const auto& inner_file : section0->GetFiles()) { |