[HAMMER] Use new source generator based big endian marshaller

This commit is contained in:
2025-10-21 03:25:11 +01:00
parent 804f82fa7e
commit 271c63cee5
2 changed files with 32 additions and 29 deletions

View File

@@ -84,7 +84,7 @@ public sealed partial class HAMMER
SuperBlock superBlock = magic == HAMMER_FSBUF_VOLUME
? Marshal.ByteArrayToStructureLittleEndian<SuperBlock>(sbSector)
: Marshal.ByteArrayToStructureBigEndian<SuperBlock>(sbSector);
: Marshal.ByteArrayToStructureBigEndianGenerated<SuperBlock>(sbSector);
sb.AppendLine(Localization.HAMMER_filesystem);

View File

@@ -29,6 +29,7 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices;
using Aaru.CommonTypes.Attributes;
using hammer_crc_t = uint;
using hammer_off_t = ulong;
using hammer_tid_t = ulong;
@@ -45,7 +46,8 @@ public sealed partial class HAMMER
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")]
struct HammerBlockMap
[SwapEndian]
partial struct HammerBlockMap
{
/// <summary>zone-2 offset only used by zone-4</summary>
public hammer_off_t phys_offset;
@@ -66,46 +68,47 @@ public sealed partial class HAMMER
/// <summary>Hammer superblock</summary>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
[SuppressMessage("ReSharper", "BuiltInTypeReferenceStyle")]
readonly struct SuperBlock
[SwapEndian]
partial struct SuperBlock
{
/// <summary><see cref="HAMMER_FSBUF_VOLUME" /> for a valid header</summary>
public readonly ulong vol_signature;
public ulong vol_signature;
/* These are relative to block device offset, not zone offsets. */
/// <summary>offset of boot area</summary>
public readonly long vol_bot_beg;
public long vol_bot_beg;
/// <summary>offset of memory log</summary>
public readonly long vol_mem_beg;
public long vol_mem_beg;
/// <summary>offset of the first buffer in volume</summary>
public readonly long vol_buf_beg;
public long vol_buf_beg;
/// <summary>offset of volume EOF (on buffer boundary)</summary>
public readonly long vol_buf_end;
public readonly long vol_reserved01;
public long vol_buf_end;
public long vol_reserved01;
/// <summary>identify filesystem</summary>
public readonly Guid vol_fsid;
public Guid vol_fsid;
/// <summary>identify filesystem type</summary>
public readonly Guid vol_fstype;
public Guid vol_fstype;
/// <summary>filesystem label</summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
public readonly byte[] vol_label;
public byte[] vol_label;
/// <summary>volume number within filesystem</summary>
public readonly int vol_no;
public int vol_no;
/// <summary>number of volumes making up filesystem</summary>
public readonly int vol_count;
public int vol_count;
/// <summary>version control information</summary>
public readonly uint vol_version;
public uint vol_version;
/// <summary>header crc</summary>
public readonly hammer_crc_t vol_crc;
public hammer_crc_t vol_crc;
/// <summary>volume flags</summary>
public readonly uint vol_flags;
public uint vol_flags;
/// <summary>the root volume number (must be 0)</summary>
public readonly uint vol_rootvol;
public uint vol_rootvol;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public readonly uint[] vol_reserved;
public uint[] vol_reserved;
/*
* These fields are initialized and space is reserved in every
@@ -115,29 +118,29 @@ public sealed partial class HAMMER
* by newfs_hammer(8).
*/
/// <summary>total big-blocks when fs is empty</summary>
public readonly long vol0_stat_bigblocks;
public long vol0_stat_bigblocks;
/// <summary>number of free big-blocks</summary>
public readonly long vol0_stat_freebigblocks;
public readonly long vol0_reserved01;
public long vol0_stat_freebigblocks;
public long vol0_reserved01;
/// <summary>for statfs only</summary>
public readonly long vol0_stat_inodes;
public readonly long vol0_reserved02;
public long vol0_stat_inodes;
public long vol0_reserved02;
/// <summary>B-Tree root offset in zone-8</summary>
public readonly hammer_off_t vol0_btree_root;
public hammer_off_t vol0_btree_root;
/// <summary>highest partially synchronized TID</summary>
public readonly hammer_tid_t vol0_next_tid;
public readonly hammer_off_t vol0_reserved03;
public hammer_tid_t vol0_next_tid;
public hammer_off_t vol0_reserved03;
/// <summary>
/// Blockmaps for zones. Not all zones use a blockmap. Note that the entire root blockmap is cached in the
/// hammer_mount structure.
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public readonly HammerBlockMap[] vol0_blockmap;
public HammerBlockMap[] vol0_blockmap;
/// <summary>Array of zone-2 addresses for undo FIFO.</summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
public readonly hammer_off_t[] vol0_undo_array;
public hammer_off_t[] vol0_undo_array;
}
#endregion