From 45195a51a76b3000e028234f619a4d15bff443eb Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 19 Sep 2018 14:13:00 -0400 Subject: nax: Avoid re-parsing NAX data with GetFileType() An instance of the NAX apploader already has an existing NAX instance in memory. Calling directly into IdentifyType() directly would re-parse the whole file again into yet another NAX instance, only to toss it away again. This gets rid of unnecessary/redundant file parsing and allocations. --- src/core/loader/nax.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/core/loader/nax.cpp') diff --git a/src/core/loader/nax.cpp b/src/core/loader/nax.cpp index 02a0d5ba7..5d4380684 100644 --- a/src/core/loader/nax.cpp +++ b/src/core/loader/nax.cpp @@ -11,16 +11,8 @@ #include "core/loader/nca.h" namespace Loader { - -AppLoader_NAX::AppLoader_NAX(FileSys::VirtualFile file) - : AppLoader(file), nax(std::make_unique(file)), - nca_loader(std::make_unique(nax->GetDecrypted())) {} - -AppLoader_NAX::~AppLoader_NAX() = default; - -FileType AppLoader_NAX::IdentifyType(const FileSys::VirtualFile& file) { - FileSys::NAX nax(file); - +namespace { +FileType IdentifyTypeImpl(const FileSys::NAX& nax) { if (nax.GetStatus() != ResultStatus::Success) { return FileType::Error; } @@ -32,6 +24,22 @@ FileType AppLoader_NAX::IdentifyType(const FileSys::VirtualFile& file) { return FileType::NAX; } +} // Anonymous namespace + +AppLoader_NAX::AppLoader_NAX(FileSys::VirtualFile file) + : AppLoader(file), nax(std::make_unique(file)), + nca_loader(std::make_unique(nax->GetDecrypted())) {} + +AppLoader_NAX::~AppLoader_NAX() = default; + +FileType AppLoader_NAX::IdentifyType(const FileSys::VirtualFile& file) { + const FileSys::NAX nax(file); + return IdentifyTypeImpl(nax); +} + +FileType AppLoader_NAX::GetFileType() { + return IdentifyTypeImpl(*nax); +} ResultStatus AppLoader_NAX::Load(Kernel::SharedPtr& process) { if (is_loaded) { -- cgit v1.2.3