diff options
author | bunnei <bunneidev@gmail.com> | 2023-06-09 23:59:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-09 23:59:51 -0700 |
commit | f759ff3a5c2ee78d2ddc16af9c57aa03518f4502 (patch) | |
tree | 1a578ea5b5de4ccf2e38df4fa9f69ff9c6c0e853 /src/core/loader/nro.cpp | |
parent | 55b543f466b61ed5450afdd0a23317bcacccf4e1 (diff) | |
parent | 72d9dc9a3f63b314cea7b166b6f81000e20a14c3 (diff) |
Merge pull request #10691 from t895/nro-check
android: Add proper homebrew check
Diffstat (limited to 'src/core/loader/nro.cpp')
-rw-r--r-- | src/core/loader/nro.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index 73d04d7ee5..7be6cf5f35 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp @@ -33,7 +33,8 @@ static_assert(sizeof(NroSegmentHeader) == 0x8, "NroSegmentHeader has incorrect s struct NroHeader { INSERT_PADDING_BYTES(0x4); u32_le module_header_offset; - INSERT_PADDING_BYTES(0x8); + u32 magic_ext1; + u32 magic_ext2; u32_le magic; INSERT_PADDING_BYTES(0x4); u32_le file_size; @@ -124,6 +125,16 @@ FileType AppLoader_NRO::IdentifyType(const FileSys::VirtualFile& nro_file) { return FileType::Error; } +bool AppLoader_NRO::IsHomebrew() { + // Read NSO header + NroHeader nro_header{}; + if (sizeof(NroHeader) != file->ReadObject(&nro_header)) { + return false; + } + return nro_header.magic_ext1 == Common::MakeMagic('H', 'O', 'M', 'E') && + nro_header.magic_ext2 == Common::MakeMagic('B', 'R', 'E', 'W'); +} + static constexpr u32 PageAlignSize(u32 size) { return static_cast<u32>((size + Core::Memory::YUZU_PAGEMASK) & ~Core::Memory::YUZU_PAGEMASK); } |