aboutsummaryrefslogtreecommitdiff
path: root/src/core/loader/loader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/loader/loader.cpp')
-rw-r--r--src/core/loader/loader.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp
index 92e2e2f602..5871ac412f 100644
--- a/src/core/loader/loader.cpp
+++ b/src/core/loader/loader.cpp
@@ -393,6 +393,13 @@ std::unique_ptr<AppLoader> GetLoader(Core::System& system, FileSys::VirtualFile
FileType type = IdentifyFile(file);
const FileType filename_type = GuessFromFilename(file->GetName());
+ // A "main" inside an ExeFS directory is also a valid NSO, but loading it alone skips
+ // main.npdm, rtld and the sdk/subsdk modules. Load the whole directory instead.
+ if (type == FileType::NSO && filename_type == FileType::DeconstructedRomDirectory &&
+ IdentifyFileLoader<AppLoader_DeconstructedRomDirectory>(file)) {
+ type = FileType::DeconstructedRomDirectory;
+ }
+
// Special case: 00 is either a NCA or NAX.
if (type != filename_type && !(file->GetName() == "00" && type == FileType::NAX)) {
LOG_WARNING(Loader, "File {} has a different type ({}) than its extension.",