aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/loader
diff options
context:
space:
mode:
authorZach Hilman <[email protected]>2018-08-25 11:44:14 -0400
committerZach Hilman <[email protected]>2018-09-04 14:25:54 -0400
commitb555311438ae1e2ad1e9caea55cc9f77c9ed4661 (patch)
tree40f5cad8d049e67e1a189cae1e5f4063c7b555d7 /src/core/loader
parentd770c602052a9016f4577ed8c993a8f78f8e5507 (diff)
downloadyuzu-android-b555311438ae1e2ad1e9caea55cc9f77c9ed4661.tar.gz
yuzu-android-b555311438ae1e2ad1e9caea55cc9f77c9ed4661.zip
loader: Add NSP file type and NSP-specific errors
Diffstat (limited to 'src/core/loader')
-rw-r--r--src/core/loader/loader.cpp14
-rw-r--r--src/core/loader/loader.h2
2 files changed, 14 insertions, 2 deletions
diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp
index 5980cdb25..446adf557 100644
--- a/src/core/loader/loader.cpp
+++ b/src/core/loader/loader.cpp
@@ -15,6 +15,7 @@
#include "core/loader/nca.h"
#include "core/loader/nro.h"
#include "core/loader/nso.h"
+#include "core/loader/nsp.h"
#include "core/loader/xci.h"
namespace Loader {
@@ -34,6 +35,7 @@ FileType IdentifyFile(FileSys::VirtualFile file) {
CHECK_TYPE(NCA)
CHECK_TYPE(XCI)
CHECK_TYPE(NAX)
+ CHECK_TYPE(NSP)
#undef CHECK_TYPE
@@ -59,6 +61,8 @@ FileType GuessFromFilename(const std::string& name) {
return FileType::NCA;
if (extension == "xci")
return FileType::XCI;
+ if (extension == "nsp")
+ return FileType::NSP;
return FileType::Unknown;
}
@@ -77,6 +81,8 @@ std::string GetFileTypeString(FileType type) {
return "XCI";
case FileType::NAX:
return "NAX";
+ case FileType::NSP:
+ return "NSP";
case FileType::DeconstructedRomDirectory:
return "Directory";
case FileType::Error:
@@ -87,7 +93,7 @@ std::string GetFileTypeString(FileType type) {
return "unknown";
}
-constexpr std::array<const char*, 49> RESULT_MESSAGES{
+constexpr std::array<const char*, 50> RESULT_MESSAGES{
"The operation completed successfully.",
"The loader requested to load is already loaded.",
"The operation is not implemented.",
@@ -137,7 +143,7 @@ constexpr std::array<const char*, 49> RESULT_MESSAGES{
"The AES Key Generation Source could not be found.",
"The SD Save Key Source could not be found.",
"The SD NCA Key Source could not be found.",
-};
+ "The NSP file is missing a Program-type NCA."};
std::ostream& operator<<(std::ostream& os, ResultStatus status) {
os << RESULT_MESSAGES.at(static_cast<size_t>(status));
@@ -182,6 +188,10 @@ static std::unique_ptr<AppLoader> GetFileLoader(FileSys::VirtualFile file, FileT
case FileType::NAX:
return std::make_unique<AppLoader_NAX>(std::move(file));
+ // NX NSP (Nintendo Submission Package) file format
+ case FileType::NSP:
+ return std::make_unique<AppLoader_NSP>(std::move(file));
+
// NX deconstructed ROM directory.
case FileType::DeconstructedRomDirectory:
return std::make_unique<AppLoader_DeconstructedRomDirectory>(std::move(file));
diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h
index 5a8540b0e..be66b2257 100644
--- a/src/core/loader/loader.h
+++ b/src/core/loader/loader.h
@@ -29,6 +29,7 @@ enum class FileType {
NSO,
NRO,
NCA,
+ NSP,
XCI,
NAX,
DeconstructedRomDirectory,
@@ -105,6 +106,7 @@ enum class ResultStatus : u16 {
ErrorMissingAESKeyGenerationSource,
ErrorMissingSDSaveKeySource,
ErrorMissingSDNCAKeySource,
+ ErrorNSPMissingProgramNCA,
};
std::ostream& operator<<(std::ostream& os, ResultStatus status);