diff options
author | David <25727384+ogniK5377@users.noreply.github.com> | 2019-09-21 12:05:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-21 12:05:24 +0200 |
commit | 25383b9ff26af3152749fcc9864fd6f777c81f9f (patch) | |
tree | b18c475af680ac4d59ba0ce15ae9cb102d2006e3 /src/core/file_sys | |
parent | Merge pull request #2866 from Morph1984/checkbox_fix (diff) | |
parent | nsp: Correct status codes for extracted NSPs (diff) | |
download | yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.tar yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.tar.gz yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.tar.bz2 yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.tar.lz yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.tar.xz yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.tar.zst yuzu-25383b9ff26af3152749fcc9864fd6f777c81f9f.zip |
Diffstat (limited to 'src/core/file_sys')
-rw-r--r-- | src/core/file_sys/submission_package.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/core/file_sys/submission_package.cpp b/src/core/file_sys/submission_package.cpp index 8b3b14e25..730221fd6 100644 --- a/src/core/file_sys/submission_package.cpp +++ b/src/core/file_sys/submission_package.cpp @@ -14,6 +14,7 @@ #include "core/file_sys/content_archive.h" #include "core/file_sys/nca_metadata.h" #include "core/file_sys/partition_filesystem.h" +#include "core/file_sys/program_metadata.h" #include "core/file_sys/submission_package.h" #include "core/loader/loader.h" @@ -78,6 +79,10 @@ Loader::ResultStatus NSP::GetStatus() const { } Loader::ResultStatus NSP::GetProgramStatus(u64 title_id) const { + if (IsExtractedType() && GetExeFS() != nullptr && FileSys::IsDirectoryExeFS(GetExeFS())) { + return Loader::ResultStatus::Success; + } + const auto iter = program_status.find(title_id); if (iter == program_status.end()) return Loader::ResultStatus::ErrorNSPMissingProgramNCA; @@ -85,12 +90,29 @@ Loader::ResultStatus NSP::GetProgramStatus(u64 title_id) const { } u64 NSP::GetFirstTitleID() const { + if (IsExtractedType()) { + return GetProgramTitleID(); + } + if (program_status.empty()) return 0; return program_status.begin()->first; } u64 NSP::GetProgramTitleID() const { + if (IsExtractedType()) { + if (GetExeFS() == nullptr || !IsDirectoryExeFS(GetExeFS())) { + return 0; + } + + ProgramMetadata meta; + if (meta.Load(GetExeFS()->GetFile("main.npdm")) == Loader::ResultStatus::Success) { + return meta.GetTitleID(); + } else { + return 0; + } + } + const auto out = GetFirstTitleID(); if ((out & 0x800) == 0) return out; @@ -102,6 +124,10 @@ u64 NSP::GetProgramTitleID() const { } std::vector<u64> NSP::GetTitleIDs() const { + if (IsExtractedType()) { + return {GetProgramTitleID()}; + } + std::vector<u64> out; out.reserve(ncas.size()); for (const auto& kv : ncas) |