diff --git a/Aaru.Filesystems/HPOFS/Info.cs b/Aaru.Filesystems/HPOFS/Info.cs index 52e042c5a..325ab2bd9 100644 --- a/Aaru.Filesystems/HPOFS/Info.cs +++ b/Aaru.Filesystems/HPOFS/Info.cs @@ -90,9 +90,13 @@ public sealed partial class HPOFS if(errno != ErrorNumber.NoError) return; - BiosParameterBlock bpb = Marshal.ByteArrayToStructureLittleEndian(hpofsBpbSector); - MediaInformationBlock mib = Marshal.ByteArrayToStructureBigEndian(medInfoSector); - VolumeInformationBlock vib = Marshal.ByteArrayToStructureBigEndian(volInfoSector); + BiosParameterBlock bpb = Marshal.ByteArrayToStructureLittleEndian(hpofsBpbSector); + + MediaInformationBlock mib = + Marshal.ByteArrayToStructureBigEndianGenerated(medInfoSector); + + VolumeInformationBlock vib = + Marshal.ByteArrayToStructureBigEndianGenerated(volInfoSector); AaruLogging.Debug(MODULE_NAME, "bpb.oem_name = \"{0}\"", StringHandlers.CToString(bpb.oem_name)); @@ -114,14 +118,12 @@ public sealed partial class HPOFS AaruLogging.Debug(MODULE_NAME, "bpb.serial_no = 0x{0:X8}", bpb.serial_no); AaruLogging.Debug(MODULE_NAME, - "bpb.volume_label = \"{0}\"", - StringHandlers.SpacePaddedToString(bpb.volume_label)); + "bpb.volume_label = \"{0}\"", + StringHandlers.SpacePaddedToString(bpb.volume_label)); AaruLogging.Debug(MODULE_NAME, "bpb.fs_type = \"{0}\"", StringHandlers.CToString(bpb.fs_type)); - AaruLogging.Debug(MODULE_NAME, - "bpb.boot_code is empty? = {0}", - ArrayHelpers.ArrayIsNullOrEmpty(bpb.boot_code)); + AaruLogging.Debug(MODULE_NAME, "bpb.boot_code is empty? = {0}", ArrayHelpers.ArrayIsNullOrEmpty(bpb.boot_code)); AaruLogging.Debug(MODULE_NAME, "bpb.unknown = {0}", bpb.unknown); AaruLogging.Debug(MODULE_NAME, "bpb.unknown2 = {0}", bpb.unknown2); @@ -129,18 +131,16 @@ public sealed partial class HPOFS AaruLogging.Debug(MODULE_NAME, "mib.blockId = \"{0}\"", StringHandlers.CToString(mib.blockId)); AaruLogging.Debug(MODULE_NAME, - "mib.volumeLabel = \"{0}\"", - StringHandlers.SpacePaddedToString(mib.volumeLabel)); + "mib.volumeLabel = \"{0}\"", + StringHandlers.SpacePaddedToString(mib.volumeLabel)); - AaruLogging.Debug(MODULE_NAME, - "mib.comment = \"{0}\"", - StringHandlers.SpacePaddedToString(mib.comment)); + AaruLogging.Debug(MODULE_NAME, "mib.comment = \"{0}\"", StringHandlers.SpacePaddedToString(mib.comment)); AaruLogging.Debug(MODULE_NAME, "mib.serial = 0x{0:X8}", mib.serial); AaruLogging.Debug(MODULE_NAME, - "mib.creationTimestamp = {0}", - DateHandlers.DosToDateTime(mib.creationDate, mib.creationTime)); + "mib.creationTimestamp = {0}", + DateHandlers.DosToDateTime(mib.creationDate, mib.creationTime)); AaruLogging.Debug(MODULE_NAME, "mib.codepageType = {0}", mib.codepageType); AaruLogging.Debug(MODULE_NAME, "mib.codepage = {0}", mib.codepage); @@ -156,35 +156,25 @@ public sealed partial class HPOFS AaruLogging.Debug(MODULE_NAME, "mib.unknown5 = {0}", mib.unknown5); AaruLogging.Debug(MODULE_NAME, "mib.unknown6 = {0}", mib.unknown6); - AaruLogging.Debug(MODULE_NAME, - "mib.filler is empty? = {0}", - ArrayHelpers.ArrayIsNullOrEmpty(mib.filler)); + AaruLogging.Debug(MODULE_NAME, "mib.filler is empty? = {0}", ArrayHelpers.ArrayIsNullOrEmpty(mib.filler)); AaruLogging.Debug(MODULE_NAME, "vib.blockId = \"{0}\"", StringHandlers.CToString(vib.blockId)); AaruLogging.Debug(MODULE_NAME, "vib.unknown = {0}", vib.unknown); AaruLogging.Debug(MODULE_NAME, "vib.unknown2 = {0}", vib.unknown2); - AaruLogging.Debug(MODULE_NAME, - "vib.unknown3 is empty? = {0}", - ArrayHelpers.ArrayIsNullOrEmpty(vib.unknown3)); + AaruLogging.Debug(MODULE_NAME, "vib.unknown3 is empty? = {0}", ArrayHelpers.ArrayIsNullOrEmpty(vib.unknown3)); - AaruLogging.Debug(MODULE_NAME, - "vib.unknown4 = \"{0}\"", - StringHandlers.SpacePaddedToString(vib.unknown4)); + AaruLogging.Debug(MODULE_NAME, "vib.unknown4 = \"{0}\"", StringHandlers.SpacePaddedToString(vib.unknown4)); AaruLogging.Debug(MODULE_NAME, "vib.owner = \"{0}\"", StringHandlers.SpacePaddedToString(vib.owner)); - AaruLogging.Debug(MODULE_NAME, - "vib.unknown5 = \"{0}\"", - StringHandlers.SpacePaddedToString(vib.unknown5)); + AaruLogging.Debug(MODULE_NAME, "vib.unknown5 = \"{0}\"", StringHandlers.SpacePaddedToString(vib.unknown5)); AaruLogging.Debug(MODULE_NAME, "vib.unknown6 = {0}", vib.unknown6); AaruLogging.Debug(MODULE_NAME, "vib.percentFull = {0}", vib.percentFull); AaruLogging.Debug(MODULE_NAME, "vib.unknown7 = {0}", vib.unknown7); - AaruLogging.Debug(MODULE_NAME, - "vib.filler is empty? = {0}", - ArrayHelpers.ArrayIsNullOrEmpty(vib.filler)); + AaruLogging.Debug(MODULE_NAME, "vib.filler is empty? = {0}", ArrayHelpers.ArrayIsNullOrEmpty(vib.filler)); sb.AppendLine(Localization.HPOFS_Name); sb.AppendFormat(Localization.OEM_name_0, StringHandlers.SpacePaddedToString(bpb.oem_name)).AppendLine(); diff --git a/Aaru.Filesystems/HPOFS/Structs.cs b/Aaru.Filesystems/HPOFS/Structs.cs index b78473704..96566f4d5 100644 --- a/Aaru.Filesystems/HPOFS/Structs.cs +++ b/Aaru.Filesystems/HPOFS/Structs.cs @@ -28,6 +28,7 @@ using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; +using Aaru.CommonTypes.Attributes; namespace Aaru.Filesystems; @@ -271,52 +272,53 @@ public sealed partial class HPOFS /// Media Information Block, at sector 13, big-endian [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct MediaInformationBlock + [SwapEndian] + partial struct MediaInformationBlock { /// Block identifier "MEDINFO " [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public readonly byte[] blockId; + public byte[] blockId; /// Volume label [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public readonly byte[] volumeLabel; + public byte[] volumeLabel; /// Volume comment [MarshalAs(UnmanagedType.ByValArray, SizeConst = 160)] - public readonly byte[] comment; + public byte[] comment; /// Volume serial number - public readonly uint serial; + public uint serial; /// Volume creation date, DOS format - public readonly ushort creationDate; + public ushort creationDate; /// Volume creation time, DOS format - public readonly ushort creationTime; + public ushort creationTime; /// Codepage type: 1 ASCII, 2 EBCDIC - public readonly ushort codepageType; + public ushort codepageType; /// Codepage - public readonly ushort codepage; + public ushort codepage; /// RPS level - public readonly uint rps; + public uint rps; /// Coincides with bytes per sector, and bytes per cluster, need more media - public readonly ushort bps; + public ushort bps; /// Coincides with bytes per sector, and bytes per cluster, need more media - public readonly ushort bpc; + public ushort bpc; /// Unknown, empty - public readonly uint unknown2; + public uint unknown2; /// Sectors (or clusters) - public readonly uint sectors; + public uint sectors; /// Unknown, coincides with bps but changing it makes nothing - public readonly uint unknown3; + public uint unknown3; /// Empty? - public readonly ulong unknown4; + public ulong unknown4; /// Format major version - public readonly ushort major; + public ushort major; /// Format minor version - public readonly ushort minor; + public ushort minor; /// Empty? - public readonly uint unknown5; + public uint unknown5; /// Unknown, non-empty - public readonly uint unknown6; + public uint unknown6; /// Empty [MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] - public readonly byte[] filler; + public byte[] filler; } #endregion @@ -354,40 +356,41 @@ public sealed partial class HPOFS /// Volume Information Block, at sector 14, big-endian [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct VolumeInformationBlock + [SwapEndian] + partial struct VolumeInformationBlock { /// Block identifier "VOLINFO " [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public readonly byte[] blockId; + public byte[] blockId; /// Unknown - public readonly uint unknown; + public uint unknown; /// Unknown - public readonly uint unknown2; + public uint unknown2; /// Some kind of counter - public readonly uint dir_intent_cnt; + public uint dir_intent_cnt; /// Some kind of counter, another - public readonly uint dir_update_cnt; + public uint dir_update_cnt; /// Unknown [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)] - public readonly byte[] unknown3; + public byte[] unknown3; /// Unknown, space-padded string [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public readonly byte[] unknown4; + public byte[] unknown4; /// Owner, space-padded string [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - public readonly byte[] owner; + public byte[] owner; /// Unknown, space-padded string [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public readonly byte[] unknown5; + public byte[] unknown5; /// Unknown, empty? - public readonly uint unknown6; + public uint unknown6; /// Maximum percent full - public readonly ushort percentFull; + public ushort percentFull; /// Unknown, empty? - public readonly ushort unknown7; + public ushort unknown7; /// Empty [MarshalAs(UnmanagedType.ByValArray, SizeConst = 384)] - public readonly byte[] filler; + public byte[] filler; } #endregion