summaryrefslogtreecommitdiffstats
path: root/src/core/loader
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2018-08-26 04:42:54 +0200
committerZach Hilman <zachhilman@gmail.com>2018-09-04 20:29:19 +0200
commite4e55d064edd71fbf359dec9d6b5efad4f0d6c91 (patch)
tree2ab6e2d16084e7071d89139e6ab25b2c11a31990 /src/core/loader
parentqt: Add UI support for NSP files (diff)
downloadyuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.tar
yuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.tar.gz
yuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.tar.bz2
yuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.tar.lz
yuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.tar.xz
yuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.tar.zst
yuzu-e4e55d064edd71fbf359dec9d6b5efad4f0d6c91.zip
Diffstat (limited to 'src/core/loader')
-rw-r--r--src/core/loader/nsp.cpp11
-rw-r--r--src/core/loader/nsp.h2
2 files changed, 10 insertions, 3 deletions
diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp
index 75d9fc1bc..b59d40052 100644
--- a/src/core/loader/nsp.cpp
+++ b/src/core/loader/nsp.cpp
@@ -21,22 +21,27 @@ namespace Loader {
AppLoader_NSP::AppLoader_NSP(FileSys::VirtualFile file)
: AppLoader(file), nsp(std::make_unique<FileSys::NSP>(file)),
title_id(nsp->GetProgramTitleID()) {
+
if (nsp->GetStatus() != ResultStatus::Success)
return;
if (nsp->IsExtractedType())
return;
+
const auto control_nca =
nsp->GetNCA(nsp->GetFirstTitleID(), FileSys::ContentRecordType::Control);
if (control_nca == nullptr || control_nca->GetStatus() != ResultStatus::Success)
return;
+
const auto romfs = FileSys::ExtractRomFS(control_nca->GetRomFS());
if (romfs == nullptr)
return;
+
for (const auto& language : FileSys::LANGUAGE_NAMES) {
icon_file = romfs->GetFile("icon_" + std::string(language) + ".dat");
if (icon_file != nullptr)
break;
}
+
const auto nacp_raw = romfs->GetFile("control.nacp");
if (nacp_raw == nullptr)
return;
@@ -51,15 +56,17 @@ FileType AppLoader_NSP::IdentifyType(const FileSys::VirtualFile& file) {
if (nsp.GetStatus() == ResultStatus::Success) {
// Extracted Type case
if (nsp.IsExtractedType() && nsp.GetExeFS() != nullptr &&
- FileSys::IsDirectoryExeFS(nsp.GetExeFS()) && nsp.GetRomFS() != nullptr)
+ FileSys::IsDirectoryExeFS(nsp.GetExeFS()) && nsp.GetRomFS() != nullptr) {
return FileType::NSP;
+ }
// Non-Ectracted Type case
if (!nsp.IsExtractedType() &&
nsp.GetNCA(nsp.GetFirstTitleID(), FileSys::ContentRecordType::Program) != nullptr &&
AppLoader_NCA::IdentifyType(nsp.GetNCAFile(
- nsp.GetFirstTitleID(), FileSys::ContentRecordType::Program)) == FileType::NCA)
+ nsp.GetFirstTitleID(), FileSys::ContentRecordType::Program)) == FileType::NCA) {
return FileType::NSP;
+ }
}
return FileType::Error;
diff --git a/src/core/loader/nsp.h b/src/core/loader/nsp.h
index 785feaf37..7ef810499 100644
--- a/src/core/loader/nsp.h
+++ b/src/core/loader/nsp.h
@@ -22,7 +22,7 @@ class AppLoader_NCA;
class AppLoader_NSP final : public AppLoader {
public:
explicit AppLoader_NSP(FileSys::VirtualFile file);
- ~AppLoader_NSP();
+ ~AppLoader_NSP() override;
/**
* Returns the type of the file