From dc4cf3d3c0ab4a04fa3ad38980d6b00a9f4a3245 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 21 Oct 2025 04:00:33 +0100 Subject: [PATCH] [PCExchange] Use new source generator based big endian marshaller --- Aaru.Filters/PCExchange.cs | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Aaru.Filters/PCExchange.cs b/Aaru.Filters/PCExchange.cs index 6c7fddfd1..e546a4f0a 100644 --- a/Aaru.Filters/PCExchange.cs +++ b/Aaru.Filters/PCExchange.cs @@ -37,6 +37,7 @@ using System.Globalization; using System.IO; using System.Runtime.InteropServices; using System.Text; +using Aaru.CommonTypes.Attributes; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; using Aaru.Helpers; @@ -47,7 +48,7 @@ namespace Aaru.Filters; /// /// Decodes PCExchange files [SuppressMessage("ReSharper", "UnusedMember.Local")] -public sealed class PcExchange : IFilter +public sealed partial class PcExchange : IFilter { const string FILE_ID = "FILEID.DAT"; const string FINDER_INFO = "FINDER.DAT"; @@ -136,7 +137,7 @@ public sealed class PcExchange : IFilter var datEntry = new Entry(); var datEntryB = new byte[Marshal.SizeOf(datEntry)]; finderDatStream.EnsureRead(datEntryB, 0, Marshal.SizeOf(datEntry)); - datEntry = Helpers.Marshal.ByteArrayToStructureBigEndian(datEntryB); + datEntry = Helpers.Marshal.ByteArrayToStructureBigEndianGenerated(datEntryB); // TODO: Add support for encoding on filters string macName = StringHandlers.PascalToString(datEntry.macName, Encoding.GetEncoding("macintosh")); @@ -193,7 +194,7 @@ public sealed class PcExchange : IFilter var datEntry = new Entry(); var datEntryB = new byte[Marshal.SizeOf(datEntry)]; finderDatStream.EnsureRead(datEntryB, 0, Marshal.SizeOf(datEntry)); - datEntry = Helpers.Marshal.ByteArrayToStructureBigEndian(datEntryB); + datEntry = Helpers.Marshal.ByteArrayToStructureBigEndianGenerated(datEntryB); string macName = StringHandlers.PascalToString(datEntry.macName, Encoding.GetEncoding("macintosh")); @@ -247,40 +248,41 @@ public sealed class PcExchange : IFilter #region Nested type: Entry [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct Entry + [SwapEndian] + struct Entry { /// /// Name in Macintosh. If PCExchange version supports FAT's LFN they are the same. Illegal characters for FAT get /// substituted with '_' both here and in FAT's LFN entry. /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public readonly byte[] macName; + public byte[] macName; /// File type - public readonly uint type; + public uint type; /// File creator - public readonly uint creator; + public uint creator; /// Finder flags - public readonly ushort fdFlags; + public ushort fdFlags; /// File's icon vertical position within its window - public readonly ushort verticalPosition; + public ushort verticalPosition; /// File's icon horizontal position within its window - public readonly ushort horizontalPosition; + public ushort horizontalPosition; /// Unknown, all bytes are empty but last, except in volume's label entry [MarshalAs(UnmanagedType.ByValArray, SizeConst = 18)] - public readonly byte[] unknown1; + public byte[] unknown1; /// File's creation date - public readonly uint creationDate; + public uint creationDate; /// File's modification date - public readonly uint modificationDate; + public uint modificationDate; /// File's last backup date - public readonly uint backupDate; + public uint backupDate; /// Unknown, but is unique, starts 0x7FFFFFFF and counts in reverse. Probably file ID for alias look up? - public readonly uint unknown2; + public uint unknown2; /// Name as in FAT entry (not LFN). Resource fork file is always using this name, never LFN. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)] - public readonly byte[] dosName; + public byte[] dosName; /// Unknown, flags? - public readonly byte unknown3; + public byte unknown3; } #endregion