diff options
| author | Assuka <59313695+a55uka@users.noreply.github.com> | 2026-11-02 02:36:13 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-11-02 02:36:13 +0000 |
| commit | 2a80edb6d3d7b7f2fd2bba11cc30d399e02ba7e9 (patch) | |
| tree | b41ab638a347af0deb6e6a799f545574cd0c56c3 /src/core/file_sys/nup_container.cpp | |
| parent | 6612817cb4b6da97c4fc88e232a8efa07a3704db (diff) | |
| parent | 10268f8c4ba3cc94142613a601b9b71a37ca7402 (diff) | |
Merge pull request #267 from Djihads80/fix/align_fields_nup_format
nup_container: update record layouts to aligned NUP v1 fields
Diffstat (limited to 'src/core/file_sys/nup_container.cpp')
| -rw-r--r-- | src/core/file_sys/nup_container.cpp | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/src/core/file_sys/nup_container.cpp b/src/core/file_sys/nup_container.cpp index efd08390a0..0e485b44ec 100644 --- a/src/core/file_sys/nup_container.cpp +++ b/src/core/file_sys/nup_container.cpp @@ -4,6 +4,7 @@ #include "core/file_sys/nup_container.h" #include <algorithm> +#include <cstddef> #include <cstring> #include <list> #include <map> @@ -60,20 +61,31 @@ struct TocHeader { static_assert(sizeof(TocHeader) == TocHeaderSize); struct PackageRecord { - u64_le title_id; - u32_le root_dir; - u32_le exefs_dir; - u32_le romfs_dir; - u32_le version; - u8 kind; - u8 flags; - u16_le reserved; - u64_le meta_offset; - u32_le meta_size; - u32_le reserved2; - std::array<u8, 20> reserved3; + u64_le title_id; // 0x00 + u32_le root_dir; // 0x08 + u32_le exefs_dir; // 0x0C + u32_le romfs_dir; // 0x10 + u32_le version; // 0x14 + u8 kind; // 0x18 + u8 flags; // 0x19 + u16_le reserved; // 0x1A + u32_le reserved2; // 0x1C + u64_le meta_offset; // 0x20 + u32_le meta_size; // 0x28 + std::array<u8, 20> reserved3; // 0x2C }; static_assert(sizeof(PackageRecord) == PackageRecordSize); +static_assert(offsetof(PackageRecord, title_id) == 0x00); +static_assert(offsetof(PackageRecord, root_dir) == 0x08); +static_assert(offsetof(PackageRecord, exefs_dir) == 0x0C); +static_assert(offsetof(PackageRecord, romfs_dir) == 0x10); +static_assert(offsetof(PackageRecord, version) == 0x14); +static_assert(offsetof(PackageRecord, kind) == 0x18); +static_assert(offsetof(PackageRecord, flags) == 0x19); +static_assert(offsetof(PackageRecord, reserved) == 0x1A); +static_assert(offsetof(PackageRecord, reserved2) == 0x1C); +static_assert(offsetof(PackageRecord, meta_offset) == 0x20); +static_assert(offsetof(PackageRecord, meta_size) == 0x28); struct DirRecord { u32_le name_offset; @@ -85,19 +97,27 @@ struct DirRecord { static_assert(sizeof(DirRecord) == DirRecordSize); struct FileRecord { - u32_le name_offset; - u32_le name_length; - u32_le reserved; - u64_le size; - std::array<u8, 0x20> sha256; - u64_le extent_offset; - u64_le extent_size; - u8 codec; - u8 codec_flags; - u16_le reserved2; - std::array<u8, 8> reserved3; + u32_le name_offset; // 0x00 + u32_le name_length; // 0x04 + u64_le size; // 0x08 + u64_le extent_offset; // 0x10 + u64_le extent_size; // 0x18 + std::array<u8, 0x20> sha256; // 0x20 + u8 codec; // 0x40 + u8 codec_flags; // 0x41 + u16_le reserved2; // 0x42 + std::array<u8, 12> reserved3; // 0x44 }; static_assert(sizeof(FileRecord) == FileRecordSize); +static_assert(offsetof(FileRecord, name_offset) == 0x00); +static_assert(offsetof(FileRecord, name_length) == 0x04); +static_assert(offsetof(FileRecord, size) == 0x08); +static_assert(offsetof(FileRecord, extent_offset) == 0x10); +static_assert(offsetof(FileRecord, extent_size) == 0x18); +static_assert(offsetof(FileRecord, sha256) == 0x20); +static_assert(offsetof(FileRecord, codec) == 0x40); +static_assert(offsetof(FileRecord, codec_flags) == 0x41); +static_assert(offsetof(FileRecord, reserved2) == 0x42); struct TlvHeader { u16_le type; |
