diff --git a/Aaru.Filesystems/FATX/Dir.cs b/Aaru.Filesystems/FATX/Dir.cs index 890ac1d0c..a25868af4 100644 --- a/Aaru.Filesystems/FATX/Dir.cs +++ b/Aaru.Filesystems/FATX/Dir.cs @@ -130,7 +130,7 @@ public sealed partial class XboxFatPlugin ? Marshal.ByteArrayToStructureLittleEndian(directoryBuffer, pos, Marshal.SizeOf()) - : Marshal.ByteArrayToStructureBigEndian(directoryBuffer, + : Marshal.ByteArrayToStructureBigEndianGenerated(directoryBuffer, pos, Marshal.SizeOf()); diff --git a/Aaru.Filesystems/FATX/Info.cs b/Aaru.Filesystems/FATX/Info.cs index b44c1c82e..7c1628ddf 100644 --- a/Aaru.Filesystems/FATX/Info.cs +++ b/Aaru.Filesystems/FATX/Info.cs @@ -48,7 +48,7 @@ public sealed partial class XboxFatPlugin if(errno != ErrorNumber.NoError) return false; - Superblock sb = Marshal.ByteArrayToStructureBigEndian(sector); + Superblock sb = Marshal.ByteArrayToStructureBigEndianGenerated(sector); return sb.magic is FATX_MAGIC or FATX_CIGAM; } @@ -68,7 +68,7 @@ public sealed partial class XboxFatPlugin if(errno != ErrorNumber.NoError) return; - Superblock fatxSb = Marshal.ByteArrayToStructureBigEndian(sector); + Superblock fatxSb = Marshal.ByteArrayToStructureBigEndianGenerated(sector); if(fatxSb.magic == FATX_CIGAM) { diff --git a/Aaru.Filesystems/FATX/Structs.cs b/Aaru.Filesystems/FATX/Structs.cs index daceb0828..494556058 100644 --- a/Aaru.Filesystems/FATX/Structs.cs +++ b/Aaru.Filesystems/FATX/Structs.cs @@ -27,6 +27,7 @@ // ****************************************************************************/ using System.Runtime.InteropServices; +using Aaru.CommonTypes.Attributes; using Aaru.CommonTypes.Interfaces; namespace Aaru.Filesystems; @@ -36,20 +37,21 @@ public sealed partial class XboxFatPlugin #region Nested type: DirectoryEntry [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct DirectoryEntry + [SwapEndian] + partial struct DirectoryEntry { - public readonly byte filenameSize; - public readonly Attributes attributes; + public byte filenameSize; + public Attributes attributes; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_FILENAME)] - public readonly byte[] filename; - public readonly uint firstCluster; - public readonly uint length; - public readonly ushort lastWrittenTime; - public readonly ushort lastWrittenDate; - public readonly ushort lastAccessTime; - public readonly ushort lastAccessDate; - public readonly ushort creationTime; - public readonly ushort creationDate; + public byte[] filename; + public uint firstCluster; + public uint length; + public ushort lastWrittenTime; + public ushort lastWrittenDate; + public ushort lastAccessTime; + public ushort lastAccessDate; + public ushort creationTime; + public ushort creationDate; } #endregion @@ -96,16 +98,17 @@ public sealed partial class XboxFatPlugin #region Nested type: Superblock [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct Superblock + [SwapEndian] + partial struct Superblock { - public readonly uint magic; - public readonly uint id; - public readonly uint sectorsPerCluster; - public readonly uint rootDirectoryCluster; + public uint magic; + public uint id; + public uint sectorsPerCluster; + public uint rootDirectoryCluster; // TODO: Undetermined size [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public readonly byte[] volumeLabel; + public byte[] volumeLabel; } #endregion diff --git a/Aaru.Filesystems/FATX/Super.cs b/Aaru.Filesystems/FATX/Super.cs index a20558b3a..076ca1395 100644 --- a/Aaru.Filesystems/FATX/Super.cs +++ b/Aaru.Filesystems/FATX/Super.cs @@ -69,7 +69,7 @@ public sealed partial class XboxFatPlugin if(_superblock.magic == FATX_CIGAM) { - _superblock = Marshal.ByteArrayToStructureBigEndian(sector); + _superblock = Marshal.ByteArrayToStructureBigEndianGenerated(sector); _littleEndian = false; } @@ -233,7 +233,7 @@ public sealed partial class XboxFatPlugin ? Marshal.ByteArrayToStructureLittleEndian(rootDirectoryBuffer, pos, Marshal.SizeOf()) - : Marshal.ByteArrayToStructureBigEndian(rootDirectoryBuffer, + : Marshal.ByteArrayToStructureBigEndianGenerated(rootDirectoryBuffer, pos, Marshal.SizeOf());