summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/file_sys/submission_package.cpp21
-rw-r--r--src/core/loader/nsp.cpp2
2 files changed, 22 insertions, 1 deletions
diff --git a/src/core/file_sys/submission_package.cpp b/src/core/file_sys/submission_package.cpp
index c69caae0f..753d2f58a 100644
--- a/src/core/file_sys/submission_package.cpp
+++ b/src/core/file_sys/submission_package.cpp
@@ -85,12 +85,29 @@ Loader::ResultStatus NSP::GetProgramStatus(u64 title_id) const {
85} 85}
86 86
87u64 NSP::GetFirstTitleID() const { 87u64 NSP::GetFirstTitleID() const {
88 if (IsExtractedType()) {
89 return GetProgramTitleID();
90 }
91
88 if (program_status.empty()) 92 if (program_status.empty())
89 return 0; 93 return 0;
90 return program_status.begin()->first; 94 return program_status.begin()->first;
91} 95}
92 96
93u64 NSP::GetProgramTitleID() const { 97u64 NSP::GetProgramTitleID() const {
98 if (IsExtractedType()) {
99 if (GetExeFS() == nullptr || !IsDirectoryExeFS(GetExeFS())) {
100 return 0;
101 }
102
103 ProgramMetadata meta;
104 if (meta.Load(GetExeFS()->GetFile("main.npdm")) == Loader::ResultStatus::Success) {
105 return meta.GetTitleID();
106 } else {
107 return 0;
108 }
109 }
110
94 const auto out = GetFirstTitleID(); 111 const auto out = GetFirstTitleID();
95 if ((out & 0x800) == 0) 112 if ((out & 0x800) == 0)
96 return out; 113 return out;
@@ -102,6 +119,10 @@ u64 NSP::GetProgramTitleID() const {
102} 119}
103 120
104std::vector<u64> NSP::GetTitleIDs() const { 121std::vector<u64> NSP::GetTitleIDs() const {
122 if (IsExtractedType()) {
123 return {GetProgramTitleID()};
124 }
125
105 std::vector<u64> out; 126 std::vector<u64> out;
106 out.reserve(ncas.size()); 127 out.reserve(ncas.size());
107 for (const auto& kv : ncas) 128 for (const auto& kv : ncas)
diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp
index ad56bbb38..8b90bbd30 100644
--- a/src/core/loader/nsp.cpp
+++ b/src/core/loader/nsp.cpp
@@ -77,7 +77,7 @@ AppLoader_NSP::LoadResult AppLoader_NSP::Load(Kernel::Process& process) {
77 return {ResultStatus::ErrorAlreadyLoaded, {}}; 77 return {ResultStatus::ErrorAlreadyLoaded, {}};
78 } 78 }
79 79
80 if (title_id == 0) { 80 if (!nsp->IsExtractedType() && title_id == 0) {
81 return {ResultStatus::ErrorNSPMissingProgramNCA, {}}; 81 return {ResultStatus::ErrorNSPMissingProgramNCA, {}};
82 } 82 }
83 83