From 28c4c7eb6b2c44aa8542e46a1d212a0870232308 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 21 Oct 2025 03:46:11 +0100 Subject: [PATCH] [XFS] Use new source generator based big endian marshaller --- Aaru.Filesystems/XFS/Info.cs | 8 +-- Aaru.Filesystems/XFS/Structs.cs | 114 ++++++++++++++++---------------- 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/Aaru.Filesystems/XFS/Info.cs b/Aaru.Filesystems/XFS/Info.cs index 55a752dd5..ff77eb6a9 100644 --- a/Aaru.Filesystems/XFS/Info.cs +++ b/Aaru.Filesystems/XFS/Info.cs @@ -70,7 +70,7 @@ public sealed partial class XFS { Array.Copy(sector, location, sbpiece, 0, Marshal.SizeOf()); - Superblock xfsSb = Marshal.ByteArrayToStructureBigEndian(sbpiece); + Superblock xfsSb = Marshal.ByteArrayToStructureBigEndianGenerated(sbpiece); AaruLogging.Debug(MODULE_NAME, Localization.magic_at_0_X3_equals_1_expected_2, @@ -100,7 +100,7 @@ public sealed partial class XFS if(sector.Length < Marshal.SizeOf()) return false; - Superblock xfsSb = Marshal.ByteArrayToStructureBigEndian(sector); + Superblock xfsSb = Marshal.ByteArrayToStructureBigEndianGenerated(sector); AaruLogging.Debug(MODULE_NAME, Localization.magic_at_0_equals_1_expected_2, @@ -147,7 +147,7 @@ public sealed partial class XFS { Array.Copy(sector, location, sbpiece, 0, Marshal.SizeOf()); - xfsSb = Marshal.ByteArrayToStructureBigEndian(sbpiece); + xfsSb = Marshal.ByteArrayToStructureBigEndianGenerated(sbpiece); AaruLogging.Debug(MODULE_NAME, Localization.magic_at_0_X3_equals_1_expected_2, @@ -174,7 +174,7 @@ public sealed partial class XFS if(errno != ErrorNumber.NoError || sector.Length < Marshal.SizeOf()) return; - xfsSb = Marshal.ByteArrayToStructureBigEndian(sector); + xfsSb = Marshal.ByteArrayToStructureBigEndianGenerated(sector); AaruLogging.Debug(MODULE_NAME, Localization.magic_at_0_equals_1_expected_2, diff --git a/Aaru.Filesystems/XFS/Structs.cs b/Aaru.Filesystems/XFS/Structs.cs index 5a235dfb3..2e3ee1a8d 100644 --- a/Aaru.Filesystems/XFS/Structs.cs +++ b/Aaru.Filesystems/XFS/Structs.cs @@ -28,6 +28,7 @@ using System; using System.Runtime.InteropServices; +using Aaru.CommonTypes.Attributes; namespace Aaru.Filesystems; @@ -38,66 +39,67 @@ public sealed partial class XFS #region Nested type: Superblock [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct Superblock + [SwapEndian] + partial struct Superblock { - public readonly uint magicnum; - public readonly uint blocksize; - public readonly ulong dblocks; - public readonly ulong rblocks; - public readonly ulong rextents; - public readonly Guid uuid; - public readonly ulong logstat; - public readonly ulong rootino; - public readonly ulong rbmino; - public readonly ulong rsumino; - public readonly uint rextsize; - public readonly uint agblocks; - public readonly uint agcount; - public readonly uint rbmblocks; - public readonly uint logblocks; - public readonly ushort version; - public readonly ushort sectsize; - public readonly ushort inodesize; - public readonly ushort inopblock; + public uint magicnum; + public uint blocksize; + public ulong dblocks; + public ulong rblocks; + public ulong rextents; + public Guid uuid; + public ulong logstat; + public ulong rootino; + public ulong rbmino; + public ulong rsumino; + public uint rextsize; + public uint agblocks; + public uint agcount; + public uint rbmblocks; + public uint logblocks; + public ushort version; + public ushort sectsize; + public ushort inodesize; + public ushort inopblock; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] - public readonly byte[] fname; - public readonly byte blocklog; - public readonly byte sectlog; - public readonly byte inodelog; - public readonly byte inopblog; - public readonly byte agblklog; - public readonly byte rextslog; - public readonly byte inprogress; - public readonly byte imax_pct; - public readonly ulong icount; - public readonly ulong ifree; - public readonly ulong fdblocks; - public readonly ulong frextents; - public readonly ulong uquotino; - public readonly ulong gquotino; - public readonly ushort qflags; - public readonly byte flags; - public readonly byte shared_vn; - public readonly ulong inoalignmt; - public readonly ulong unit; - public readonly ulong width; - public readonly byte dirblklog; - public readonly byte logsectlog; - public readonly ushort logsectsize; - public readonly uint logsunit; - public readonly uint features2; - public readonly uint bad_features2; - public readonly uint features_compat; - public readonly uint features_ro_compat; - public readonly uint features_incompat; - public readonly uint features_log_incompat; + public byte[] fname; + public byte blocklog; + public byte sectlog; + public byte inodelog; + public byte inopblog; + public byte agblklog; + public byte rextslog; + public byte inprogress; + public byte imax_pct; + public ulong icount; + public ulong ifree; + public ulong fdblocks; + public ulong frextents; + public ulong uquotino; + public ulong gquotino; + public ushort qflags; + public byte flags; + public byte shared_vn; + public ulong inoalignmt; + public ulong unit; + public ulong width; + public byte dirblklog; + public byte logsectlog; + public ushort logsectsize; + public uint logsunit; + public uint features2; + public uint bad_features2; + public uint features_compat; + public uint features_ro_compat; + public uint features_incompat; + public uint features_log_incompat; // This field is little-endian while rest of superblock is big-endian - public readonly uint crc; - public readonly uint spino_align; - public readonly ulong pquotino; - public readonly ulong lsn; - public readonly Guid meta_uuid; + public uint crc; + public uint spino_align; + public ulong pquotino; + public ulong lsn; + public Guid meta_uuid; } #endregion