diff --git a/Aaru.Filesystems/AppleHFSPlus/Info.cs b/Aaru.Filesystems/AppleHFSPlus/Info.cs index bdb862050..14c7a7052 100644 --- a/Aaru.Filesystems/AppleHFSPlus/Info.cs +++ b/Aaru.Filesystems/AppleHFSPlus/Info.cs @@ -174,7 +174,7 @@ public sealed partial class AppleHFSPlus Array.Copy(vhSector, 0x400, tmp, 0, 0x400); vhSector = tmp; - vh = Marshal.ByteArrayToStructureBigEndian(vhSector); + vh = Marshal.ByteArrayToStructureBigEndianGenerated(vhSector); if(vh.version is 4 or 5) { diff --git a/Aaru.Filesystems/AppleHFSPlus/Structs.cs b/Aaru.Filesystems/AppleHFSPlus/Structs.cs index a5fc4404e..c4138d829 100644 --- a/Aaru.Filesystems/AppleHFSPlus/Structs.cs +++ b/Aaru.Filesystems/AppleHFSPlus/Structs.cs @@ -27,6 +27,7 @@ // ****************************************************************************/ using System.Runtime.InteropServices; +using Aaru.CommonTypes.Attributes; namespace Aaru.Filesystems; @@ -39,268 +40,269 @@ public sealed partial class AppleHFSPlus /// HFS+ Volume Header, should be at offset 0x0400 bytes in volume with a size of 532 bytes [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct VolumeHeader + [SwapEndian] + partial struct VolumeHeader { /// 0x000, "H+" for HFS+, "HX" for HFSX public ushort signature; /// 0x002, 4 for HFS+, 5 for HFSX - public readonly ushort version; + public ushort version; /// 0x004, Volume attributes - public readonly uint attributes; + public uint attributes; /// /// 0x008, Implementation that last mounted the volume. Reserved by Apple: "8.10" Mac OS 8.1 to 9.2.2 "10.0" Mac /// OS X "HFSJ" Journaled implementation "fsck" /sbin/fsck /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public readonly byte[] lastMountedVersion; + public byte[] lastMountedVersion; /// 0x00C, Allocation block number containing the journal - public readonly uint journalInfoBlock; + public uint journalInfoBlock; /// 0x010, Date of volume creation - public readonly uint createDate; + public uint createDate; /// 0x014, Date of last volume modification - public readonly uint modifyDate; + public uint modifyDate; /// 0x018, Date of last backup - public readonly uint backupDate; + public uint backupDate; /// 0x01C, Date of last consistency check - public readonly uint checkedDate; + public uint checkedDate; /// 0x020, File on the volume - public readonly uint fileCount; + public uint fileCount; /// 0x024, Folders on the volume - public readonly uint folderCount; + public uint folderCount; /// 0x028, Bytes per allocation block - public readonly uint blockSize; + public uint blockSize; /// 0x02C, Allocation blocks on the volume - public readonly uint totalBlocks; + public uint totalBlocks; /// 0x030, Free allocation blocks - public readonly uint freeBlocks; + public uint freeBlocks; /// 0x034, Hint for next allocation block - public readonly uint nextAllocation; + public uint nextAllocation; /// 0x038, Resource fork clump size - public readonly uint rsrcClumpSize; + public uint rsrcClumpSize; /// 0x03C, Data fork clump size - public readonly uint dataClumpSize; + public uint dataClumpSize; /// 0x040, Next unused CNID - public readonly uint nextCatalogID; + public uint nextCatalogID; /// 0x044, Times that the volume has been mounted writable - public readonly uint writeCount; + public uint writeCount; /// 0x048, Used text encoding hints - public readonly ulong encodingsBitmap; + public ulong encodingsBitmap; /// 0x050, finderInfo[0], CNID for bootable system's directory - public readonly uint drFndrInfo0; + public uint drFndrInfo0; /// 0x054, finderInfo[1], CNID of the directory containing the boot application - public readonly uint drFndrInfo1; + public uint drFndrInfo1; /// 0x058, finderInfo[2], CNID of the directory that should be opened on boot - public readonly uint drFndrInfo2; + public uint drFndrInfo2; /// 0x05C, finderInfo[3], CNID for Mac OS 8 or 9 directory - public readonly uint drFndrInfo3; + public uint drFndrInfo3; /// 0x060, finderInfo[4], Reserved - public readonly uint drFndrInfo4; + public uint drFndrInfo4; /// 0x064, finderInfo[5], CNID for Mac OS X directory - public readonly uint drFndrInfo5; + public uint drFndrInfo5; /// 0x068, finderInfo[6], first part of Mac OS X volume ID - public readonly uint drFndrInfo6; + public uint drFndrInfo6; /// 0x06C, finderInfo[7], second part of Mac OS X volume ID - public readonly uint drFndrInfo7; + public uint drFndrInfo7; // HFSPlusForkData allocationFile; /// 0x070 - public readonly ulong allocationFile_logicalSize; + public ulong allocationFile_logicalSize; /// 0x078 - public readonly uint allocationFile_clumpSize; + public uint allocationFile_clumpSize; /// 0x07C - public readonly uint allocationFile_totalBlocks; + public uint allocationFile_totalBlocks; /// 0x080 - public readonly uint allocationFile_extents_startBlock0; + public uint allocationFile_extents_startBlock0; /// 0x084 - public readonly uint allocationFile_extents_blockCount0; + public uint allocationFile_extents_blockCount0; /// 0x088 - public readonly uint allocationFile_extents_startBlock1; + public uint allocationFile_extents_startBlock1; /// 0x08C - public readonly uint allocationFile_extents_blockCount1; + public uint allocationFile_extents_blockCount1; /// 0x090 - public readonly uint allocationFile_extents_startBlock2; + public uint allocationFile_extents_startBlock2; /// 0x094 - public readonly uint allocationFile_extents_blockCount2; + public uint allocationFile_extents_blockCount2; /// 0x098 - public readonly uint allocationFile_extents_startBlock3; + public uint allocationFile_extents_startBlock3; /// 0x09C - public readonly uint allocationFile_extents_blockCount3; + public uint allocationFile_extents_blockCount3; /// 0x0A0 - public readonly uint allocationFile_extents_startBlock4; + public uint allocationFile_extents_startBlock4; /// 0x0A4 - public readonly uint allocationFile_extents_blockCount4; + public uint allocationFile_extents_blockCount4; /// 0x0A8 - public readonly uint allocationFile_extents_startBlock5; + public uint allocationFile_extents_startBlock5; /// 0x0AC - public readonly uint allocationFile_extents_blockCount5; + public uint allocationFile_extents_blockCount5; /// 0x0B0 - public readonly uint allocationFile_extents_startBlock6; + public uint allocationFile_extents_startBlock6; /// 0x0B4 - public readonly uint allocationFile_extents_blockCount6; + public uint allocationFile_extents_blockCount6; /// 0x0B8 - public readonly uint allocationFile_extents_startBlock7; + public uint allocationFile_extents_startBlock7; /// 0x0BC - public readonly uint allocationFile_extents_blockCount7; + public uint allocationFile_extents_blockCount7; // HFSPlusForkData extentsFile; /// 0x0C0 - public readonly ulong extentsFile_logicalSize; + public ulong extentsFile_logicalSize; /// 0x0C8 - public readonly uint extentsFile_clumpSize; + public uint extentsFile_clumpSize; /// 0x0CC - public readonly uint extentsFile_totalBlocks; + public uint extentsFile_totalBlocks; /// 0x0D0 - public readonly uint extentsFile_extents_startBlock0; + public uint extentsFile_extents_startBlock0; /// 0x0D4 - public readonly uint extentsFile_extents_blockCount0; + public uint extentsFile_extents_blockCount0; /// 0x0D8 - public readonly uint extentsFile_extents_startBlock1; + public uint extentsFile_extents_startBlock1; /// 0x0DC - public readonly uint extentsFile_extents_blockCount1; + public uint extentsFile_extents_blockCount1; /// 0x0E0 - public readonly uint extentsFile_extents_startBlock2; + public uint extentsFile_extents_startBlock2; /// 0x0E4 - public readonly uint extentsFile_extents_blockCount2; + public uint extentsFile_extents_blockCount2; /// 0x0E8 - public readonly uint extentsFile_extents_startBlock3; + public uint extentsFile_extents_startBlock3; /// 0x0EC - public readonly uint extentsFile_extents_blockCount3; + public uint extentsFile_extents_blockCount3; /// 0x0F0 - public readonly uint extentsFile_extents_startBlock4; + public uint extentsFile_extents_startBlock4; /// 0x0F4 - public readonly uint extentsFile_extents_blockCount4; + public uint extentsFile_extents_blockCount4; /// 0x0F8 - public readonly uint extentsFile_extents_startBlock5; + public uint extentsFile_extents_startBlock5; /// 0x0FC - public readonly uint extentsFile_extents_blockCount5; + public uint extentsFile_extents_blockCount5; /// 0x100 - public readonly uint extentsFile_extents_startBlock6; + public uint extentsFile_extents_startBlock6; /// 0x104 - public readonly uint extentsFile_extents_blockCount6; + public uint extentsFile_extents_blockCount6; /// 0x108 - public readonly uint extentsFile_extents_startBlock7; + public uint extentsFile_extents_startBlock7; /// 0x10C - public readonly uint extentsFile_extents_blockCount7; + public uint extentsFile_extents_blockCount7; // HFSPlusForkData catalogFile; /// 0x110 - public readonly ulong catalogFile_logicalSize; + public ulong catalogFile_logicalSize; /// 0x118 - public readonly uint catalogFile_clumpSize; + public uint catalogFile_clumpSize; /// 0x11C - public readonly uint catalogFile_totalBlocks; + public uint catalogFile_totalBlocks; /// 0x120 - public readonly uint catalogFile_extents_startBlock0; + public uint catalogFile_extents_startBlock0; /// 0x124 - public readonly uint catalogFile_extents_blockCount0; + public uint catalogFile_extents_blockCount0; /// 0x128 - public readonly uint catalogFile_extents_startBlock1; + public uint catalogFile_extents_startBlock1; /// 0x12C - public readonly uint catalogFile_extents_blockCount1; + public uint catalogFile_extents_blockCount1; /// 0x130 - public readonly uint catalogFile_extents_startBlock2; + public uint catalogFile_extents_startBlock2; /// 0x134 - public readonly uint catalogFile_extents_blockCount2; + public uint catalogFile_extents_blockCount2; /// 0x138 - public readonly uint catalogFile_extents_startBlock3; + public uint catalogFile_extents_startBlock3; /// 0x13C - public readonly uint catalogFile_extents_blockCount3; + public uint catalogFile_extents_blockCount3; /// 0x140 - public readonly uint catalogFile_extents_startBlock4; + public uint catalogFile_extents_startBlock4; /// 0x144 - public readonly uint catalogFile_extents_blockCount4; + public uint catalogFile_extents_blockCount4; /// 0x148 - public readonly uint catalogFile_extents_startBlock5; + public uint catalogFile_extents_startBlock5; /// 0x14C - public readonly uint catalogFile_extents_blockCount5; + public uint catalogFile_extents_blockCount5; /// 0x150 - public readonly uint catalogFile_extents_startBlock6; + public uint catalogFile_extents_startBlock6; /// 0x154 - public readonly uint catalogFile_extents_blockCount6; + public uint catalogFile_extents_blockCount6; /// 0x158 - public readonly uint catalogFile_extents_startBlock7; + public uint catalogFile_extents_startBlock7; /// 0x15C - public readonly uint catalogFile_extents_blockCount7; + public uint catalogFile_extents_blockCount7; // HFSPlusForkData attributesFile; /// 0x160 - public readonly ulong attributesFile_logicalSize; + public ulong attributesFile_logicalSize; /// 0x168 - public readonly uint attributesFile_clumpSize; + public uint attributesFile_clumpSize; /// 0x16C - public readonly uint attributesFile_totalBlocks; + public uint attributesFile_totalBlocks; /// 0x170 - public readonly uint attributesFile_extents_startBlock0; + public uint attributesFile_extents_startBlock0; /// 0x174 - public readonly uint attributesFile_extents_blockCount0; + public uint attributesFile_extents_blockCount0; /// 0x178 - public readonly uint attributesFile_extents_startBlock1; + public uint attributesFile_extents_startBlock1; /// 0x17C - public readonly uint attributesFile_extents_blockCount1; + public uint attributesFile_extents_blockCount1; /// 0x180 - public readonly uint attributesFile_extents_startBlock2; + public uint attributesFile_extents_startBlock2; /// 0x184 - public readonly uint attributesFile_extents_blockCount2; + public uint attributesFile_extents_blockCount2; /// 0x188 - public readonly uint attributesFile_extents_startBlock3; + public uint attributesFile_extents_startBlock3; /// 0x18C - public readonly uint attributesFile_extents_blockCount3; + public uint attributesFile_extents_blockCount3; /// 0x190 - public readonly uint attributesFile_extents_startBlock4; + public uint attributesFile_extents_startBlock4; /// 0x194 - public readonly uint attributesFile_extents_blockCount4; + public uint attributesFile_extents_blockCount4; /// 0x198 - public readonly uint attributesFile_extents_startBlock5; + public uint attributesFile_extents_startBlock5; /// 0x19C - public readonly uint attributesFile_extents_blockCount5; + public uint attributesFile_extents_blockCount5; /// 0x1A0 - public readonly uint attributesFile_extents_startBlock6; + public uint attributesFile_extents_startBlock6; /// 0x1A4 - public readonly uint attributesFile_extents_blockCount6; + public uint attributesFile_extents_blockCount6; /// 0x1A8 - public readonly uint attributesFile_extents_startBlock7; + public uint attributesFile_extents_startBlock7; /// 0x1AC - public readonly uint attributesFile_extents_blockCount7; + public uint attributesFile_extents_blockCount7; // HFSPlusForkData startupFile; /// 0x1B0 - public readonly ulong startupFile_logicalSize; + public ulong startupFile_logicalSize; /// 0x1B8 - public readonly uint startupFile_clumpSize; + public uint startupFile_clumpSize; /// 0x1BC - public readonly uint startupFile_totalBlocks; + public uint startupFile_totalBlocks; /// 0x1C0 - public readonly uint startupFile_extents_startBlock0; + public uint startupFile_extents_startBlock0; /// 0x1C4 - public readonly uint startupFile_extents_blockCount0; + public uint startupFile_extents_blockCount0; /// 0x1C8 - public readonly uint startupFile_extents_startBlock1; + public uint startupFile_extents_startBlock1; /// 0x1D0 - public readonly uint startupFile_extents_blockCount1; + public uint startupFile_extents_blockCount1; /// 0x1D4 - public readonly uint startupFile_extents_startBlock2; + public uint startupFile_extents_startBlock2; /// 0x1D8 - public readonly uint startupFile_extents_blockCount2; + public uint startupFile_extents_blockCount2; /// 0x1DC - public readonly uint startupFile_extents_startBlock3; + public uint startupFile_extents_startBlock3; /// 0x1E0 - public readonly uint startupFile_extents_blockCount3; + public uint startupFile_extents_blockCount3; /// 0x1E4 - public readonly uint startupFile_extents_startBlock4; + public uint startupFile_extents_startBlock4; /// 0x1E8 - public readonly uint startupFile_extents_blockCount4; + public uint startupFile_extents_blockCount4; /// 0x1EC - public readonly uint startupFile_extents_startBlock5; + public uint startupFile_extents_startBlock5; /// 0x1F0 - public readonly uint startupFile_extents_blockCount5; + public uint startupFile_extents_blockCount5; /// 0x1F4 - public readonly uint startupFile_extents_startBlock6; + public uint startupFile_extents_startBlock6; /// 0x1F8 - public readonly uint startupFile_extents_blockCount6; + public uint startupFile_extents_blockCount6; /// 0x1FC - public readonly uint startupFile_extents_startBlock7; + public uint startupFile_extents_startBlock7; /// 0x200 - public readonly uint startupFile_extents_blockCount7; + public uint startupFile_extents_blockCount7; } #endregion