[STFS] Use new source generator based big endian marshaller

This commit is contained in:
2025-10-21 10:50:51 +01:00
parent 66ce90a155
commit 6d3e8515f9
3 changed files with 18 additions and 11 deletions

View File

@@ -26,7 +26,7 @@ public sealed partial class Stfs
stream.ReadExactly(hdr, 0, hdr.Length); stream.ReadExactly(hdr, 0, hdr.Length);
RemotePackage header = Marshal.ByteArrayToStructureBigEndian<RemotePackage>(hdr); RemotePackage header = Marshal.ByteArrayToStructureBigEndianGenerated<RemotePackage>(hdr);
if(header.Magic is not (PackageMagic.Console or PackageMagic.Live or PackageMagic.Microsoft)) return false; if(header.Magic is not (PackageMagic.Console or PackageMagic.Live or PackageMagic.Microsoft)) return false;
@@ -51,7 +51,7 @@ public sealed partial class Stfs
// Reverse positions that hold UTF16-BE strings // Reverse positions that hold UTF16-BE strings
ReverseShorts(hdr, 0x0411, 0x1300); ReverseShorts(hdr, 0x0411, 0x1300);
RemotePackage header = Marshal.ByteArrayToStructureBigEndian<RemotePackage>(hdr); RemotePackage header = Marshal.ByteArrayToStructureBigEndianGenerated<RemotePackage>(hdr);
if(header.Magic is not (PackageMagic.Console or PackageMagic.Live or PackageMagic.Microsoft)) return; if(header.Magic is not (PackageMagic.Console or PackageMagic.Live or PackageMagic.Microsoft)) return;
@@ -78,7 +78,7 @@ public sealed partial class Stfs
if(header.Magic == PackageMagic.Console) if(header.Magic == PackageMagic.Console)
{ {
ConsolePackage consolePackage = Marshal.ByteArrayToStructureBigEndian<ConsolePackage>(hdr); ConsolePackage consolePackage = Marshal.ByteArrayToStructureBigEndianGenerated<ConsolePackage>(hdr);
sb.AppendFormat(Localization.Certificate_owner_console_ID_0_1_2_3_4, sb.AppendFormat(Localization.Certificate_owner_console_ID_0_1_2_3_4,
consolePackage.CertificateOwnerConsoleId[0], consolePackage.CertificateOwnerConsoleId[0],

View File

@@ -23,7 +23,7 @@ public sealed partial class Stfs
_stream.ReadExactly(hdr, 0, hdr.Length); _stream.ReadExactly(hdr, 0, hdr.Length);
RemotePackage header = Marshal.ByteArrayToStructureBigEndian<RemotePackage>(hdr); RemotePackage header = Marshal.ByteArrayToStructureBigEndianGenerated<RemotePackage>(hdr);
if(header.Magic is not (PackageMagic.Console or PackageMagic.Live or PackageMagic.Microsoft)) if(header.Magic is not (PackageMagic.Console or PackageMagic.Live or PackageMagic.Microsoft))
return ErrorNumber.InvalidArgument; return ErrorNumber.InvalidArgument;
@@ -56,7 +56,7 @@ public sealed partial class Stfs
do do
{ {
FileTableEntry entry = Marshal.ByteArrayToStructureBigEndian<FileTableEntry>(buffer, in_pos, entrySize); FileTableEntry entry = Marshal.ByteArrayToStructureBigEndianGenerated<FileTableEntry>(buffer, in_pos, entrySize);
if(entry.FilenameLength == 0) break; if(entry.FilenameLength == 0) break;

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Aaru.CommonTypes.Attributes;
namespace Aaru.Archives; namespace Aaru.Archives;
@@ -8,7 +9,8 @@ public sealed partial class Stfs
#region Nested type: ConsolePackage #region Nested type: ConsolePackage
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
struct ConsolePackage [SwapEndian]
partial struct ConsolePackage
{ {
public PackageMagic Magic; public PackageMagic Magic;
public ushort PkCertificateSize; public ushort PkCertificateSize;
@@ -49,7 +51,8 @@ public sealed partial class Stfs
#region Nested type: FileTableEntry #region Nested type: FileTableEntry
[StructLayout(LayoutKind.Sequential, Pack = 1)] [StructLayout(LayoutKind.Sequential, Pack = 1)]
struct FileTableEntry [SwapEndian]
partial struct FileTableEntry
{ {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x28)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x28)]
public byte[] Filename; public byte[] Filename;
@@ -73,7 +76,8 @@ public sealed partial class Stfs
#region Nested type: LicenseEntry #region Nested type: LicenseEntry
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
struct LicenseEntry [SwapEndian]
partial struct LicenseEntry
{ {
public long LicenseId; public long LicenseId;
public int LicenseBits; public int LicenseBits;
@@ -85,7 +89,8 @@ public sealed partial class Stfs
#region Nested type: LocalizedString #region Nested type: LocalizedString
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
struct LocalizedString [SwapEndian]
partial struct LocalizedString
{ {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string Name; public string Name;
@@ -96,7 +101,8 @@ public sealed partial class Stfs
#region Nested type: Metadata #region Nested type: Metadata
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
struct Metadata [SwapEndian]
partial struct Metadata
{ {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public LicenseEntry[] Licensing; public LicenseEntry[] Licensing;
@@ -157,7 +163,8 @@ public sealed partial class Stfs
#region Nested type: RemotePackage #region Nested type: RemotePackage
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
struct RemotePackage [SwapEndian]
partial struct RemotePackage
{ {
public PackageMagic Magic; public PackageMagic Magic;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]