diff --git a/Aaru.Partitions/Sun.cs b/Aaru.Partitions/Sun.cs
index b7c9388cb..6f50c1e4c 100644
--- a/Aaru.Partitions/Sun.cs
+++ b/Aaru.Partitions/Sun.cs
@@ -36,6 +36,7 @@ using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices;
using System.Text;
using Aaru.CommonTypes;
+using Aaru.CommonTypes.Attributes;
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Interfaces;
using Aaru.Helpers;
@@ -47,7 +48,7 @@ namespace Aaru.Partitions;
///
/// Implements decoding of Sun disklabels
[SuppressMessage("ReSharper", "InconsistentNaming")]
-public sealed class SunDisklabel : IPartition
+public sealed partial class SunDisklabel : IPartition
{
/// Sun disklabel magic number
const ushort DKL_MAGIC = 0xDABE;
@@ -152,18 +153,28 @@ public sealed class SunDisklabel : IPartition
if(!useDkl && !useDkl8 && !useDkl16) return false;
if(useDkl16 && dkl16.dkl_magic == DKL_CIGAM)
- dkl16 = SwapDiskLabel(dkl16);
+ {
+ AaruLogging.Debug(MODULE_NAME, Localization.Swapping_dk_label16);
+ dkl16 = dkl16.SwapEndian();
+ }
else if(useDkl8 && dkl8.dkl_magic == DKL_CIGAM)
- dkl8 = SwapDiskLabel(dkl8);
- else if(useDkl && dkl.dkl_magic == DKL_CIGAM) dkl = SwapDiskLabel(dkl);
+ {
+ AaruLogging.Debug(MODULE_NAME, Localization.Swapping_dk_label8);
+ dkl8 = dkl8.SwapEndian();
+ }
+ else if(useDkl && dkl.dkl_magic == DKL_CIGAM)
+ {
+ AaruLogging.Debug(MODULE_NAME, Localization.Swapping_dk_label);
+ dkl = dkl.SwapEndian();
+ }
if(useDkl)
{
ulong sectorsPerCylinder = (ulong)(dkl.dkl_nsect * dkl.dkl_nhead);
AaruLogging.Debug(MODULE_NAME,
- "dkl.dkl_asciilabel = \"{0}\"",
- StringHandlers.CToString(dkl.dkl_asciilabel));
+ "dkl.dkl_asciilabel = \"{0}\"",
+ StringHandlers.CToString(dkl.dkl_asciilabel));
AaruLogging.Debug(MODULE_NAME, "dkl.dkl_rpm = {0}", dkl.dkl_rpm);
AaruLogging.Debug(MODULE_NAME, "dkl.dkl_pcyl = {0}", dkl.dkl_pcyl);
@@ -180,10 +191,7 @@ public sealed class SunDisklabel : IPartition
for(int i = 0; i < NDKMAP; i++)
{
- AaruLogging.Debug(MODULE_NAME,
- "dkl.dkl_map[{0}].dkl_cylno = {1}",
- i,
- dkl.dkl_map[i].dkl_cylno);
+ AaruLogging.Debug(MODULE_NAME, "dkl.dkl_map[{0}].dkl_cylno = {1}", i, dkl.dkl_map[i].dkl_cylno);
AaruLogging.Debug(MODULE_NAME, "dkl.dkl_map[{0}].dkl_nblk = {1}", i, dkl.dkl_map[i].dkl_nblk);
}
@@ -217,14 +225,14 @@ public sealed class SunDisklabel : IPartition
ulong sectorsPerCylinder = (ulong)(dkl8.dkl_nsect * dkl8.dkl_nhead);
AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_asciilabel = \"{0}\"",
- StringHandlers.CToString(dkl8.dkl_asciilabel));
+ "dkl8.dkl_asciilabel = \"{0}\"",
+ StringHandlers.CToString(dkl8.dkl_asciilabel));
AaruLogging.Debug(MODULE_NAME, "dkl8.dkl_vtoc.v_version = {0}", dkl8.dkl_vtoc.v_version);
AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_vtoc.v_volume = \"{0}\"",
- StringHandlers.CToString(dkl8.dkl_vtoc.v_volume));
+ "dkl8.dkl_vtoc.v_volume = \"{0}\"",
+ StringHandlers.CToString(dkl8.dkl_vtoc.v_volume));
AaruLogging.Debug(MODULE_NAME, "dkl8.dkl_vtoc.v_nparts = {0}", dkl8.dkl_vtoc.v_nparts);
AaruLogging.Debug(MODULE_NAME, "dkl8.dkl_vtoc.v_sanity = 0x{0:X8}", dkl8.dkl_vtoc.v_sanity);
@@ -245,32 +253,26 @@ public sealed class SunDisklabel : IPartition
for(int i = 0; i < NDKMAP; i++)
{
- AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_map[{0}].dkl_cylno = {1}",
- i,
- dkl8.dkl_map[i].dkl_cylno);
+ AaruLogging.Debug(MODULE_NAME, "dkl8.dkl_map[{0}].dkl_cylno = {1}", i, dkl8.dkl_map[i].dkl_cylno);
+
+ AaruLogging.Debug(MODULE_NAME, "dkl8.dkl_map[{0}].dkl_nblk = {1}", i, dkl8.dkl_map[i].dkl_nblk);
AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_map[{0}].dkl_nblk = {1}",
- i,
- dkl8.dkl_map[i].dkl_nblk);
+ "dkl8.dkl_vtoc.v_part[{0}].p_tag = {1} ({2})",
+ i,
+ dkl8.dkl_vtoc.v_part[i].p_tag,
+ (ushort)dkl8.dkl_vtoc.v_part[i].p_tag);
AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_vtoc.v_part[{0}].p_tag = {1} ({2})",
- i,
- dkl8.dkl_vtoc.v_part[i].p_tag,
- (ushort)dkl8.dkl_vtoc.v_part[i].p_tag);
+ "dkl8.dkl_vtoc.v_part[{0}].p_flag = {1} ({2})",
+ i,
+ dkl8.dkl_vtoc.v_part[i].p_flag,
+ (ushort)dkl8.dkl_vtoc.v_part[i].p_flag);
AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_vtoc.v_part[{0}].p_flag = {1} ({2})",
- i,
- dkl8.dkl_vtoc.v_part[i].p_flag,
- (ushort)dkl8.dkl_vtoc.v_part[i].p_flag);
-
- AaruLogging.Debug(MODULE_NAME,
- "dkl8.dkl_vtoc.v_timestamp[{0}] = {1}",
- i,
- DateHandlers.UnixToDateTime(dkl8.dkl_vtoc.v_timestamp[i]));
+ "dkl8.dkl_vtoc.v_timestamp[{0}] = {1}",
+ i,
+ DateHandlers.UnixToDateTime(dkl8.dkl_vtoc.v_timestamp[i]));
}
AaruLogging.Debug(MODULE_NAME, "dkl8.dkl_magic = 0x{0:X4}", dkl8.dkl_magic);
@@ -317,15 +319,15 @@ public sealed class SunDisklabel : IPartition
AaruLogging.Debug(MODULE_NAME, "dkl16.dkl_vtoc.v_version = {0}", dkl16.dkl_vtoc.v_version);
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_volume = \"{0}\"",
- StringHandlers.CToString(dkl16.dkl_vtoc.v_volume));
+ "dkl16.dkl_vtoc.v_volume = \"{0}\"",
+ StringHandlers.CToString(dkl16.dkl_vtoc.v_volume));
AaruLogging.Debug(MODULE_NAME, "dkl16.dkl_vtoc.v_sectorsz = {0}", dkl16.dkl_vtoc.v_sectorsz);
AaruLogging.Debug(MODULE_NAME, "dkl16.dkl_vtoc.v_nparts = {0}", dkl16.dkl_vtoc.v_nparts);
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_asciilabel = \"{0}\"",
- StringHandlers.CToString(dkl16.dkl_vtoc.v_asciilabel));
+ "dkl16.dkl_vtoc.v_asciilabel = \"{0}\"",
+ StringHandlers.CToString(dkl16.dkl_vtoc.v_asciilabel));
AaruLogging.Debug(MODULE_NAME, "dkl16.dkl_pcyl = {0}", dkl16.dkl_pcyl);
AaruLogging.Debug(MODULE_NAME, "dkl16.dkl_ncyl = {0}", dkl16.dkl_ncyl);
@@ -345,31 +347,31 @@ public sealed class SunDisklabel : IPartition
for(int i = 0; i < NDKMAP16; i++)
{
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_part[{0}].p_start = {1}",
- i,
- dkl16.dkl_vtoc.v_part[i].p_start);
+ "dkl16.dkl_vtoc.v_part[{0}].p_start = {1}",
+ i,
+ dkl16.dkl_vtoc.v_part[i].p_start);
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_part[{0}].p_size = {1}",
- i,
- dkl16.dkl_vtoc.v_part[i].p_size);
+ "dkl16.dkl_vtoc.v_part[{0}].p_size = {1}",
+ i,
+ dkl16.dkl_vtoc.v_part[i].p_size);
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_part[{0}].p_tag = {1} ({2})",
- i,
- dkl16.dkl_vtoc.v_part[i].p_tag,
- (ushort)dkl16.dkl_vtoc.v_part[i].p_tag);
+ "dkl16.dkl_vtoc.v_part[{0}].p_tag = {1} ({2})",
+ i,
+ dkl16.dkl_vtoc.v_part[i].p_tag,
+ (ushort)dkl16.dkl_vtoc.v_part[i].p_tag);
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_part[{0}].p_flag = {1} ({2})",
- i,
- dkl16.dkl_vtoc.v_part[i].p_flag,
- (ushort)dkl16.dkl_vtoc.v_part[i].p_flag);
+ "dkl16.dkl_vtoc.v_part[{0}].p_flag = {1} ({2})",
+ i,
+ dkl16.dkl_vtoc.v_part[i].p_flag,
+ (ushort)dkl16.dkl_vtoc.v_part[i].p_flag);
AaruLogging.Debug(MODULE_NAME,
- "dkl16.dkl_vtoc.v_timestamp[{0}] = {1}",
- i,
- DateHandlers.UnixToDateTime(dkl16.dkl_vtoc.v_timestamp[i]));
+ "dkl16.dkl_vtoc.v_timestamp[{0}] = {1}",
+ i,
+ DateHandlers.UnixToDateTime(dkl16.dkl_vtoc.v_timestamp[i]));
}
AaruLogging.Debug(MODULE_NAME, "dkl16.dkl_magic = 0x{0:X4}", dkl16.dkl_magic);
@@ -418,68 +420,6 @@ public sealed class SunDisklabel : IPartition
#endregion
- static dk_label SwapDiskLabel(dk_label label)
- {
- AaruLogging.Debug(MODULE_NAME, Localization.Swapping_dk_label);
- label = (dk_label)Marshal.SwapStructureMembersEndian(label);
-
- for(int i = 0; i < label.dkl_map.Length; i++)
- label.dkl_map[i] = (dk_map)Marshal.SwapStructureMembersEndian(label.dkl_map[i]);
-
- return label;
- }
-
- static dk_label8 SwapDiskLabel(dk_label8 label)
- {
- AaruLogging.Debug(MODULE_NAME, Localization.Swapping_dk_label8);
- label = (dk_label8)Marshal.SwapStructureMembersEndian(label);
-
- for(int i = 0; i < label.dkl_map.Length; i++)
- label.dkl_map[i] = (dk_map)Marshal.SwapStructureMembersEndian(label.dkl_map[i]);
-
- for(int i = 0; i < label.dkl_vtoc.v_bootinfo.Length; i++)
- label.dkl_vtoc.v_bootinfo[i] = Swapping.Swap(label.dkl_vtoc.v_bootinfo[i]);
-
- for(int i = 0; i < label.dkl_vtoc.v_part.Length; i++)
- {
- label.dkl_vtoc.v_part[i].p_flag = (SunFlags)Swapping.Swap((ushort)label.dkl_vtoc.v_part[i].p_flag);
- label.dkl_vtoc.v_part[i].p_tag = (SunTag)Swapping.Swap((ushort)label.dkl_vtoc.v_part[i].p_tag);
- }
-
- for(int i = 0; i < label.dkl_vtoc.v_timestamp.Length; i++)
- label.dkl_vtoc.v_timestamp[i] = Swapping.Swap(label.dkl_vtoc.v_timestamp[i]);
-
- for(int i = 0; i < label.dkl_vtoc.v_reserved.Length; i++)
- label.dkl_vtoc.v_reserved[i] = Swapping.Swap(label.dkl_vtoc.v_reserved[i]);
-
- return label;
- }
-
- static dk_label16 SwapDiskLabel(dk_label16 label)
- {
- AaruLogging.Debug(MODULE_NAME, Localization.Swapping_dk_label16);
- label = (dk_label16)Marshal.SwapStructureMembersEndian(label);
-
- for(int i = 0; i < label.dkl_vtoc.v_bootinfo.Length; i++)
- label.dkl_vtoc.v_bootinfo[i] = Swapping.Swap(label.dkl_vtoc.v_bootinfo[i]);
-
- for(int i = 0; i < label.dkl_vtoc.v_part.Length; i++)
- {
- label.dkl_vtoc.v_part[i].p_flag = (SunFlags)Swapping.Swap((ushort)label.dkl_vtoc.v_part[i].p_flag);
- label.dkl_vtoc.v_part[i].p_tag = (SunTag)Swapping.Swap((ushort)label.dkl_vtoc.v_part[i].p_tag);
- label.dkl_vtoc.v_part[i].p_size = Swapping.Swap(label.dkl_vtoc.v_part[i].p_size);
- label.dkl_vtoc.v_part[i].p_start = Swapping.Swap(label.dkl_vtoc.v_part[i].p_start);
- }
-
- for(int i = 0; i < label.dkl_vtoc.v_timestamp.Length; i++)
- label.dkl_vtoc.v_timestamp[i] = Swapping.Swap(label.dkl_vtoc.v_timestamp[i]);
-
- for(int i = 0; i < label.dkl_vtoc.v_reserved.Length; i++)
- label.dkl_vtoc.v_reserved[i] = Swapping.Swap(label.dkl_vtoc.v_reserved[i]);
-
- return label;
- }
-
static string SunFlagsToString(SunFlags flags)
{
var sb = new StringBuilder();
@@ -524,45 +464,46 @@ public sealed class SunDisklabel : IPartition
/// SunOS disk label
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_label
+ [SwapEndian]
+ partial struct dk_label
{
/// Informative string
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_ASCII)]
- public readonly byte[] dkl_asciilabel;
+ public byte[] dkl_asciilabel;
/// Padding
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_PAD)]
- public readonly byte[] dkl_pad;
+ public byte[] dkl_pad;
/// rotations per minute
- public readonly ushort dkl_rpm;
+ public ushort dkl_rpm;
/// # physical cylinders
- public readonly ushort dkl_pcyl;
+ public ushort dkl_pcyl;
/// alternates per cylinder
- public readonly ushort dkl_apc;
+ public ushort dkl_apc;
/// size of gap 1
- public readonly ushort dkl_gap1;
+ public ushort dkl_gap1;
/// size of gap 2
- public readonly ushort dkl_gap2;
+ public ushort dkl_gap2;
/// interleave factor
- public readonly ushort dkl_intrlv;
+ public ushort dkl_intrlv;
/// # of data cylinders
- public readonly ushort dkl_ncyl;
+ public ushort dkl_ncyl;
/// # of alternate cylinders
- public readonly ushort dkl_acyl;
+ public ushort dkl_acyl;
/// # of heads in this partition
- public readonly ushort dkl_nhead;
+ public ushort dkl_nhead;
/// # of 512 byte sectors per track
- public readonly ushort dkl_nsect;
+ public ushort dkl_nsect;
/// identifies proper label location
- public readonly ushort dkl_bhead;
+ public ushort dkl_bhead;
/// physical partition #
- public readonly ushort dkl_ppart;
+ public ushort dkl_ppart;
/// Logical partitions
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NDKMAP)]
- public readonly dk_map[] dkl_map;
+ public dk_map[] dkl_map;
/// identifies this label format
- public readonly ushort dkl_magic;
+ public ushort dkl_magic;
/// xor checksum of sector
- public readonly ushort dkl_cksum;
+ public ushort dkl_cksum;
}
#endregion
@@ -570,44 +511,45 @@ public sealed class SunDisklabel : IPartition
#region Nested type: dk_label16
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_label16
+ [SwapEndian]
+ partial struct dk_label16
{
/// vtoc inclusions from AT&T SVr4
- public readonly dk_vtoc16 dkl_vtoc;
+ public dk_vtoc16 dkl_vtoc;
/// # of physical cylinders
- public readonly uint dkl_pcyl;
+ public uint dkl_pcyl;
/// # of data cylinders
- public readonly uint dkl_ncyl;
+ public uint dkl_ncyl;
/// # of alternate cylinders
- public readonly ushort dkl_acyl;
+ public ushort dkl_acyl;
/// cyl offset (for fixed head area)
- public readonly ushort dkl_bcyl;
+ public ushort dkl_bcyl;
/// # of heads
- public readonly uint dkl_nhead;
+ public uint dkl_nhead;
/// # of data sectors per track
- public readonly uint dkl_nsect;
+ public uint dkl_nsect;
/// interleave factor
- public readonly ushort dkl_intrlv;
+ public ushort dkl_intrlv;
/// skew factor
- public readonly ushort dkl_skew;
+ public ushort dkl_skew;
/// alternates per cyl (SCSI only)
- public readonly ushort dkl_apc;
+ public ushort dkl_apc;
/// revolutions per minute
- public readonly ushort dkl_rpm;
+ public ushort dkl_rpm;
/// # sectors to skip, writes
- public readonly ushort dkl_write_reinstruct;
+ public ushort dkl_write_reinstruct;
/// # sectors to skip, reads
- public readonly ushort dkl_read_reinstruct;
+ public ushort dkl_read_reinstruct;
/// for compatible expansion
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
- public readonly ushort[] dkl_extra;
+ public ushort[] dkl_extra;
/// unused part of 512 bytes
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_PAD16)]
- public readonly byte[] dkl_pad;
+ public byte[] dkl_pad;
/// identifies this label format
- public readonly ushort dkl_magic;
+ public ushort dkl_magic;
/// xor checksum of sector
- public readonly ushort dkl_cksum;
+ public ushort dkl_cksum;
}
#endregion
@@ -615,51 +557,52 @@ public sealed class SunDisklabel : IPartition
#region Nested type: dk_label8
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_label8
+ [SwapEndian]
+ partial struct dk_label8
{
/// for compatibility
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_ASCII)]
- public readonly byte[] dkl_asciilabel;
+ public byte[] dkl_asciilabel;
/// vtoc inclusions from AT&T SVr4
- public readonly dk_vtoc8 dkl_vtoc;
+ public dk_vtoc8 dkl_vtoc;
/// # sectors to skip, writes
- public readonly ushort dkl_write_reinstruct;
+ public ushort dkl_write_reinstruct;
/// # sectors to skip, reads
- public readonly ushort dkl_read_reinstruct;
+ public ushort dkl_read_reinstruct;
/// unused part of 512 bytes
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_PAD8)]
- public readonly byte[] dkl_pad;
+ public byte[] dkl_pad;
/// rotations per minute
- public readonly ushort dkl_rpm;
+ public ushort dkl_rpm;
/// # physical cylinders
- public readonly ushort dkl_pcyl;
+ public ushort dkl_pcyl;
/// alternates per cylinder
- public readonly ushort dkl_apc;
+ public ushort dkl_apc;
/// obsolete
- public readonly ushort dkl_obs1;
+ public ushort dkl_obs1;
/// obsolete
- public readonly ushort dkl_obs2;
+ public ushort dkl_obs2;
/// interleave factor
- public readonly ushort dkl_intrlv;
+ public ushort dkl_intrlv;
/// # of data cylinders
- public readonly ushort dkl_ncyl;
+ public ushort dkl_ncyl;
/// # of alternate cylinders
- public readonly ushort dkl_acyl;
+ public ushort dkl_acyl;
/// # of heads in this partition
- public readonly ushort dkl_nhead;
+ public ushort dkl_nhead;
/// # of 512 byte sectors per track
- public readonly ushort dkl_nsect;
+ public ushort dkl_nsect;
/// obsolete
- public readonly ushort dkl_obs3;
+ public ushort dkl_obs3;
/// obsolete
- public readonly ushort dkl_obs4;
+ public ushort dkl_obs4;
/// logical partition headers
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NDKMAP)]
- public readonly dk_map[] dkl_map;
+ public dk_map[] dkl_map;
/// identifies this label format
- public readonly ushort dkl_magic;
+ public ushort dkl_magic;
/// xor checksum of sector
- public readonly ushort dkl_cksum;
+ public ushort dkl_cksum;
}
#endregion
@@ -668,12 +611,13 @@ public sealed class SunDisklabel : IPartition
/// SunOS logical partitions
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_map
+ [SwapEndian]
+ partial struct dk_map
{
/// starting cylinder
- public readonly int dkl_cylno;
+ public int dkl_cylno;
/// number of blocks
- public readonly int dkl_nblk;
+ public int dkl_nblk;
}
#endregion
@@ -682,7 +626,8 @@ public sealed class SunDisklabel : IPartition
/// Solaris logical partition for small disk label
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_map2
+ [SwapEndian]
+ partial struct dk_map2
{
/// ID tag of partition
public SunTag p_tag;
@@ -695,34 +640,35 @@ public sealed class SunDisklabel : IPartition
#region Nested type: dk_vtoc16
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_vtoc16
+ [SwapEndian]
+ partial struct dk_vtoc16
{
/// info needed by mboot
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
- public readonly uint[] v_bootinfo;
+ public uint[] v_bootinfo;
/// to verify vtoc sanity
- public readonly uint v_sanity;
+ public uint v_sanity;
/// layout version
- public readonly uint v_version;
+ public uint v_version;
/// volume name
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_VVOL)]
- public readonly byte[] v_volume;
+ public byte[] v_volume;
/// sector size in bytes
- public readonly ushort v_sectorsz;
+ public ushort v_sectorsz;
/// number of partitions
- public readonly ushort v_nparts;
+ public ushort v_nparts;
/// free space
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
- public readonly uint[] v_reserved;
+ public uint[] v_reserved;
/// partition headers
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NDKMAP16)]
- public readonly dkl_partition[] v_part;
+ public dkl_partition[] v_part;
/// partition timestamp
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NDKMAP16)]
- public readonly int[] v_timestamp;
+ public int[] v_timestamp;
/// for compatibility
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_ASCII)]
- public readonly byte[] v_asciilabel;
+ public byte[] v_asciilabel;
}
#endregion
@@ -730,31 +676,32 @@ public sealed class SunDisklabel : IPartition
#region Nested type: dk_vtoc8
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dk_vtoc8
+ [SwapEndian]
+ partial struct dk_vtoc8
{
/// layout version
- public readonly uint v_version;
+ public uint v_version;
/// volume name
[MarshalAs(UnmanagedType.ByValArray, SizeConst = LEN_DKL_VVOL)]
- public readonly byte[] v_volume;
+ public byte[] v_volume;
/// number of partitions
- public readonly ushort v_nparts;
+ public ushort v_nparts;
/// partition hdrs, sec 2
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NDKMAP)]
- public readonly dk_map2[] v_part;
+ public dk_map2[] v_part;
/// Alignment
- public readonly ushort padding;
+ public ushort padding;
/// info needed by mboot
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
- public readonly uint[] v_bootinfo;
+ public uint[] v_bootinfo;
/// to verify vtoc sanity
- public readonly uint v_sanity;
+ public uint v_sanity;
/// free space
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
- public readonly uint[] v_reserved;
+ public uint[] v_reserved;
/// partition timestamp
[MarshalAs(UnmanagedType.ByValArray, SizeConst = NDKMAP)]
- public readonly int[] v_timestamp;
+ public int[] v_timestamp;
}
#endregion
@@ -763,7 +710,8 @@ public sealed class SunDisklabel : IPartition
/// Solaris logical partition
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct dkl_partition
+ [SwapEndian]
+ partial struct dkl_partition
{
/// ID tag of partition
public SunTag p_tag;