diff options
| author | 2023-06-09 23:59:51 -0700 | |
|---|---|---|
| committer | 2023-06-09 23:59:51 -0700 | |
| commit | f759ff3a5c2ee78d2ddc16af9c57aa03518f4502 (patch) | |
| tree | 1a578ea5b5de4ccf2e38df4fa9f69ff9c6c0e853 /src/core/loader/nro.cpp | |
| parent | Merge pull request #10686 from t895/version-check (diff) | |
| parent | android: Add proper homebrew check (diff) | |
| download | yuzu-f759ff3a5c2ee78d2ddc16af9c57aa03518f4502.tar.gz yuzu-f759ff3a5c2ee78d2ddc16af9c57aa03518f4502.tar.xz yuzu-f759ff3a5c2ee78d2ddc16af9c57aa03518f4502.zip | |
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 73d04d7ee..7be6cf5f3 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 | |||
| 33 | struct NroHeader { | 33 | struct NroHeader { |
| 34 | INSERT_PADDING_BYTES(0x4); | 34 | INSERT_PADDING_BYTES(0x4); |
| 35 | u32_le module_header_offset; | 35 | u32_le module_header_offset; |
| 36 | INSERT_PADDING_BYTES(0x8); | 36 | u32 magic_ext1; |
| 37 | u32 magic_ext2; | ||
| 37 | u32_le magic; | 38 | u32_le magic; |
| 38 | INSERT_PADDING_BYTES(0x4); | 39 | INSERT_PADDING_BYTES(0x4); |
| 39 | u32_le file_size; | 40 | u32_le file_size; |
| @@ -124,6 +125,16 @@ FileType AppLoader_NRO::IdentifyType(const FileSys::VirtualFile& nro_file) { | |||
| 124 | return FileType::Error; | 125 | return FileType::Error; |
| 125 | } | 126 | } |
| 126 | 127 | ||
| 128 | bool AppLoader_NRO::IsHomebrew() { | ||
| 129 | // Read NSO header | ||
| 130 | NroHeader nro_header{}; | ||
| 131 | if (sizeof(NroHeader) != file->ReadObject(&nro_header)) { | ||
| 132 | return false; | ||
| 133 | } | ||
| 134 | return nro_header.magic_ext1 == Common::MakeMagic('H', 'O', 'M', 'E') && | ||
| 135 | nro_header.magic_ext2 == Common::MakeMagic('B', 'R', 'E', 'W'); | ||
| 136 | } | ||
| 137 | |||
| 127 | static constexpr u32 PageAlignSize(u32 size) { | 138 | static constexpr u32 PageAlignSize(u32 size) { |
| 128 | return static_cast<u32>((size + Core::Memory::YUZU_PAGEMASK) & ~Core::Memory::YUZU_PAGEMASK); | 139 | return static_cast<u32>((size + Core::Memory::YUZU_PAGEMASK) & ~Core::Memory::YUZU_PAGEMASK); |
| 129 | } | 140 | } |