diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-29 03:39:29 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-29 03:39:29 -0400 |
| commit | ea6c1193fbfa95e586bb6d129dc684163a12cb3e (patch) | |
| tree | e4d23143900184630deeabe27eab1321dac4a428 /src/core/file_sys | |
| parent | 0bb5055b6541c74f47603a8dff0569a509cbaf18 (diff) | |
Revert "Import experimental NS2 support and accumulated GPU fixes"
This reverts commit 535b676970. The Switch 2 support comes from the nx2
work instead, merged next.
Diffstat (limited to 'src/core/file_sys')
| -rw-r--r-- | src/core/file_sys/program_metadata.cpp | 55 | ||||
| -rw-r--r-- | src/core/file_sys/program_metadata.h | 8 |
2 files changed, 7 insertions, 56 deletions
diff --git a/src/core/file_sys/program_metadata.cpp b/src/core/file_sys/program_metadata.cpp index b528523e67..63ca9d3fe3 100644 --- a/src/core/file_sys/program_metadata.cpp +++ b/src/core/file_sys/program_metadata.cpp @@ -20,10 +20,6 @@ ProgramMetadata::ProgramMetadata() = default; ProgramMetadata::~ProgramMetadata() = default; Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) { - uses_extended_acid = false; - if (!file) { - return Loader::ResultStatus::ErrorBadNPDMHeader; - } const std::size_t total_size = file->GetSize(); if (total_size < sizeof(Header)) { return Loader::ResultStatus::ErrorBadNPDMHeader; @@ -33,55 +29,17 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) { return Loader::ResultStatus::ErrorBadNPDMHeader; } - if (npdm_header.magic != std::array{'M', 'E', 'T', 'A'}) { - return Loader::ResultStatus::ErrorBadNPDMHeader; - } - - const auto contains = [](u64 offset, u64 size, u64 limit) { - return offset <= limit && size <= limit - offset; - }; - const u64 acid_offset = npdm_header.acid_offset; - const u64 acid_size = npdm_header.acid_size; - const u64 aci_offset = npdm_header.aci_offset; - const u64 aci_size = npdm_header.aci_size; - if (acid_offset < sizeof(Header) || !contains(acid_offset, acid_size, total_size)) { + if (sizeof(AcidHeader) != file->ReadObject(&acid_header, npdm_header.acid_offset)) { return Loader::ResultStatus::ErrorBadACIDHeader; } - const auto read_acid = [&](u64 body_offset) { - return contains(body_offset, sizeof(AcidHeader), acid_size) && - file->ReadObject(&acid_header, acid_offset + body_offset) == sizeof(AcidHeader) && - acid_header.magic == std::array{'A', 'C', 'I', 'D'}; - }; - if (!read_acid(0x200)) { - if (!read_acid(0x300)) { - return Loader::ResultStatus::ErrorBadACIDHeader; - } - uses_extended_acid = true; - } - - if (aci_offset < sizeof(Header) || !contains(aci_offset, aci_size, total_size) || - aci_size < sizeof(AciHeader) || - sizeof(AciHeader) != file->ReadObject(&aci_header, aci_offset) || - aci_header.magic != std::array{'A', 'C', 'I', '0'}) { + if (sizeof(AciHeader) != file->ReadObject(&aci_header, npdm_header.aci_offset)) { return Loader::ResultStatus::ErrorBadACIHeader; } - constexpr u64 fac_read_size = 4 + sizeof(FileAccessControl::permissions) + - sizeof(FileAccessControl::unknown); - if (acid_header.fac_size < fac_read_size || - !contains(acid_header.fac_offset, acid_header.fac_size, acid_size)) { - return Loader::ResultStatus::ErrorBadFileAccessControl; - } - constexpr u64 fah_read_size = 4 + sizeof(FileAccessHeader::permissions) + 4 * sizeof(u32); - if (aci_header.fah_size < fah_read_size || - !contains(aci_header.fah_offset, aci_header.fah_size, aci_size)) { - return Loader::ResultStatus::ErrorBadFileAccessHeader; - } - // Load acid_file_access per-component instead of the entire struct, since this struct does not // reflect the layout of the real data. - std::size_t current_offset = acid_offset + acid_header.fac_offset; + std::size_t current_offset = acid_header.fac_offset; if (sizeof(FileAccessControl::version) != file->ReadBytes(&acid_file_access.version, sizeof(FileAccessControl::version), current_offset)) { @@ -99,7 +57,7 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) { } // Load aci_file_access per-component instead of the entire struct, same as acid_file_access - current_offset = aci_offset + aci_header.fah_offset; + current_offset = aci_header.fah_offset; if (sizeof(FileAccessHeader::version) != file->ReadBytes(&aci_file_access.version, sizeof(FileAccessHeader::version), current_offset)) { @@ -131,10 +89,6 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) { return Loader::ResultStatus::ErrorBadFileAccessHeader; } - if (aci_header.kac_size % sizeof(u32) != 0 || - !contains(aci_header.kac_offset, aci_header.kac_size, aci_size)) { - return Loader::ResultStatus::ErrorBadKernelCapabilityDescriptors; - } aci_kernel_capabilities.resize(aci_header.kac_size / sizeof(u32)); const u64 read_size = aci_header.kac_size; const u64 read_offset = npdm_header.aci_offset + aci_header.kac_offset; @@ -174,7 +128,6 @@ void ProgramMetadata::LoadManual(bool is_64_bit, ProgramAddressSpaceType address u32 main_thread_stack_size, u64 title_id, u64 filesystem_permissions, u32 system_resource_size, KernelCapabilityDescriptors capabilities) { - uses_extended_acid = false; npdm_header.has_64_bit_instructions.Assign(is_64_bit); npdm_header.address_space_type.Assign(address_space); npdm_header.main_thread_priority = static_cast<u8>(main_thread_prio); diff --git a/src/core/file_sys/program_metadata.h b/src/core/file_sys/program_metadata.h index eb4cf11894..115e6d6cd1 100644 --- a/src/core/file_sys/program_metadata.h +++ b/src/core/file_sys/program_metadata.h @@ -77,9 +77,6 @@ public: u8 GetMainThreadCore() const; u32 GetMainThreadStackSize() const; u64 GetTitleID() const; - bool UsesExtendedAcid() const { - return uses_extended_acid; - } u64 GetFilesystemPermissions() const; u32 GetSystemResourceSize() const; PoolPartition GetPoolPartition() const; @@ -119,6 +116,8 @@ private: static_assert(sizeof(Header) == 0x80, "NPDM header structure size is wrong"); struct AcidHeader { + std::array<u8, 0x100> signature; + std::array<u8, 0x100> nca_modulus; std::array<char, 4> magic; u32_le nca_size; std::array<u8, 0x4> reserved; @@ -140,7 +139,7 @@ private: INSERT_PADDING_BYTES(0x8); }; - static_assert(sizeof(AcidHeader) == 0x40, "ACID header body size is wrong"); + static_assert(sizeof(AcidHeader) == 0x240, "ACID header structure size is wrong"); struct AciHeader { std::array<char, 4> magic; @@ -178,7 +177,6 @@ private: }; Header npdm_header{}; - bool uses_extended_acid{}; AciHeader aci_header{}; AcidHeader acid_header{}; |
