diff options
| author | lat9nq <22451773+lat9nq@users.noreply.github.com> | 2021-06-10 16:25:25 -0400 |
|---|---|---|
| committer | lat9nq <lat9nq@gmail.com> | 2022-02-13 02:20:56 -0500 |
| commit | bfb7cbc2922655e8a7a9e6f8bb80a186d4d75495 (patch) | |
| tree | 30c36b49f63918ccf8b3c78e077bec4d769b3b6a /src/core/file_sys/program_metadata.h | |
| parent | eaca010ee97ad2bdc8e54b347b93f01bf163c9d8 (diff) | |
program_metadata: Unpack FileAccessHeader and FileAccessControl
Avoids a reference binding to a misaligned addresses. Unpacking one
requires unpacking the other, otherwise there'll be a misaligned address
on the leftover one.
Diffstat (limited to 'src/core/file_sys/program_metadata.h')
| -rw-r--r-- | src/core/file_sys/program_metadata.h | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/src/core/file_sys/program_metadata.h b/src/core/file_sys/program_metadata.h index 1eee916be..c89a1c445 100644 --- a/src/core/file_sys/program_metadata.h +++ b/src/core/file_sys/program_metadata.h @@ -143,20 +143,18 @@ private: static_assert(sizeof(AciHeader) == 0x40, "ACI0 header structure size is wrong"); -#pragma pack(push, 1) - + // FileAccessControl and FileAccessHeader need loaded per-component: this layout does not + // reflect the real layout to avoid reference binding to misaligned addresses struct FileAccessControl { u8 version; - INSERT_PADDING_BYTES(3); + // 3 padding bytes u64_le permissions; std::array<u8, 0x20> unknown; }; - static_assert(sizeof(FileAccessControl) == 0x2C, "FS access control structure size is wrong"); - struct FileAccessHeader { u8 version; - INSERT_PADDING_BYTES(3); + // 3 padding bytes u64_le permissions; u32_le unk_offset; u32_le unk_size; @@ -164,10 +162,6 @@ private: u32_le unk_size_2; }; - static_assert(sizeof(FileAccessHeader) == 0x1C, "FS access header structure size is wrong"); - -#pragma pack(pop) - Header npdm_header; AciHeader aci_header; AcidHeader acid_header; |
