summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-09-03 18:46:56 -0400
committerGravatar Zach Hilman2018-09-04 16:24:24 -0400
commit92e26df00f12de2e084ceb84d17ca79c5323a315 (patch)
tree4c08acfc0921310b230275a94559979d14c3e2cb /src/core
parentgame_list: Fix version display on non-NAND titles (diff)
downloadyuzu-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.cpp6
-rw-r--r--src/core/file_sys/content_archive.cpp8
-rw-r--r--src/core/file_sys/submission_package.cpp5
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 {
491u64 NCA::GetTitleId() const { 497u64 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()) {