diff --git a/Aaru.Partitions/Aaru.Partitions.csproj b/Aaru.Partitions/Aaru.Partitions.csproj index abd1bce35..e8b484af9 100644 --- a/Aaru.Partitions/Aaru.Partitions.csproj +++ b/Aaru.Partitions/Aaru.Partitions.csproj @@ -60,7 +60,7 @@ - + diff --git a/Aaru.Partitions/Aaru.Partitions.csproj.DotSettings b/Aaru.Partitions/Aaru.Partitions.csproj.DotSettings index 29151f92c..50c5847b4 100644 --- a/Aaru.Partitions/Aaru.Partitions.csproj.DotSettings +++ b/Aaru.Partitions/Aaru.Partitions.csproj.DotSettings @@ -1,5 +1,6 @@ - True \ No newline at end of file + x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=localization/@EntryIndexedValue">True \ No newline at end of file diff --git a/Aaru.Partitions/Acorn.cs b/Aaru.Partitions/Acorn.cs index 800ba75de..337cda02d 100644 --- a/Aaru.Partitions/Acorn.cs +++ b/Aaru.Partitions/Acorn.cs @@ -57,10 +57,14 @@ public sealed class Acorn : IPartition const uint TYPE_MASK = 15; readonly byte[] _linuxIcsMagic = "LinuxPart"u8.ToArray(); +#region IPartition Members + /// public string Name => Localization.Acorn_Name; + /// public Guid Id => new("A7C8FEBE-8D00-4933-B9F3-42184C8BA808"); + /// public string Author => Authors.NataliaPortillo; @@ -77,8 +81,10 @@ public sealed class Acorn : IPartition return partitions.Count != 0; } +#endregion + static void GetFileCorePartitions(IMediaImage imagePlugin, List partitions, ulong sectorOffset, - ref ulong counter) + ref ulong counter) { // RISC OS always checks for the partition on 0. Afaik no emulator chains it. if(sectorOffset != 0) @@ -99,12 +105,12 @@ public sealed class Acorn : IPartition AcornBootBlock bootBlock = Marshal.ByteArrayToStructureLittleEndian(sector); - int checksum = 0; + var checksum = 0; - for(int i = 0; i < 0x1FF; i++) + for(var i = 0; i < 0x1FF; i++) checksum = (checksum & 0xFF) + (checksum >> 8) + sector[i]; - int heads = bootBlock.discRecord.heads + ((bootBlock.discRecord.lowsector >> 6) & 1); + int heads = bootBlock.discRecord.heads + (bootBlock.discRecord.lowsector >> 6 & 1); int secCyl = bootBlock.discRecord.spt * heads; int mapSector = bootBlock.startCylinder * secCyl; @@ -120,8 +126,8 @@ public sealed class Acorn : IPartition { var part = new Partition { - Size = ((ulong)bootBlock.discRecord.disc_size_high * 0x100000000) + bootBlock.discRecord.disc_size, - Length = (((ulong)bootBlock.discRecord.disc_size_high * 0x100000000) + bootBlock.discRecord.disc_size) / + Size = (ulong)bootBlock.discRecord.disc_size_high * 0x100000000 + bootBlock.discRecord.disc_size, + Length = ((ulong)bootBlock.discRecord.disc_size_high * 0x100000000 + bootBlock.discRecord.disc_size) / imagePlugin.Info.SectorSize, Type = Localization.Filecore, Name = StringHandlers.CToString(bootBlock.discRecord.disc_name, Encoding.GetEncoding("iso-8859-1")) @@ -150,11 +156,11 @@ public sealed class Acorn : IPartition Sequence = counter, Scheme = "Filecore/Linux", Type = entry.magic switch - { - LINUX_MAGIC => Localization.Linux, - SWAP_MAGIC => Localization.Linux_swap, - _ => Localization.Unknown_partition_type - } + { + LINUX_MAGIC => Localization.Linux, + SWAP_MAGIC => Localization.Linux_swap, + _ => Localization.Unknown_partition_type + } }; part.Offset = part.Start * (ulong)sector.Length; @@ -175,6 +181,7 @@ public sealed class Acorn : IPartition RiscIxTable table = Marshal.ByteArrayToStructureLittleEndian(map); if(table.magic == RISCIX_MAGIC) + { foreach(RiscIxEntry entry in table.partitions) { var part = new Partition @@ -196,6 +203,7 @@ public sealed class Acorn : IPartition partitions.Add(part); counter++; } + } break; } @@ -216,10 +224,10 @@ public sealed class Acorn : IPartition uint icsSum = 0x50617274; - for(int i = 0; i < 508; i++) + for(var i = 0; i < 508; i++) icsSum += sector[i]; - uint discCheck = BitConverter.ToUInt32(sector, 508); + var discCheck = BitConverter.ToUInt32(sector, 508); if(icsSum != discCheck) return; @@ -281,6 +289,23 @@ public sealed class Acorn : IPartition } } +#region Nested type: AcornBootBlock + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct AcornBootBlock + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x1C0)] + public readonly byte[] spare; + public readonly DiscRecord discRecord; + public readonly byte flags; + public readonly ushort startCylinder; + public readonly byte checksum; + } + +#endregion + +#region Nested type: DiscRecord + [StructLayout(LayoutKind.Sequential)] struct DiscRecord { @@ -310,17 +335,44 @@ public sealed class Acorn : IPartition public readonly byte[] reserved; } +#endregion + +#region Nested type: IcsEntry + [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct AcornBootBlock + struct IcsEntry { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x1C0)] - public readonly byte[] spare; - public readonly DiscRecord discRecord; - public readonly byte flags; - public readonly ushort startCylinder; - public readonly byte checksum; + public readonly uint start; + public readonly int size; } +#endregion + +#region Nested type: IcsTable + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct IcsTable + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public readonly IcsEntry[] entries; + } + +#endregion + +#region Nested type: LinuxEntry + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct LinuxEntry + { + public readonly uint magic; + public readonly uint start; + public readonly uint size; + } + +#endregion + +#region Nested type: LinuxTable + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct LinuxTable { @@ -330,22 +382,9 @@ public sealed class Acorn : IPartition public readonly byte[] padding; } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct LinuxEntry - { - public readonly uint magic; - public readonly uint start; - public readonly uint size; - } +#endregion - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct RiscIxTable - { - public readonly uint magic; - public readonly uint date; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public readonly RiscIxEntry[] partitions; - } +#region Nested type: RiscIxEntry [StructLayout(LayoutKind.Sequential, Pack = 1)] struct RiscIxEntry @@ -357,17 +396,18 @@ public sealed class Acorn : IPartition public readonly byte[] name; } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct IcsTable - { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public readonly IcsEntry[] entries; - } +#endregion + +#region Nested type: RiscIxTable [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct IcsEntry + struct RiscIxTable { - public readonly uint start; - public readonly int size; + public readonly uint magic; + public readonly uint date; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public readonly RiscIxEntry[] partitions; } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/AppleMap.cs b/Aaru.Partitions/AppleMap.cs index 21fa9f1b3..823b4ab55 100644 --- a/Aaru.Partitions/AppleMap.cs +++ b/Aaru.Partitions/AppleMap.cs @@ -61,10 +61,14 @@ public sealed class AppleMap : IPartition const uint HFS_MAGIC_OLD = 0x54465331; const string MODULE_NAME = "Apple Partition Map (APM) Plugin"; +#region IPartition Members + /// public string Name => Localization.AppleMap_Name; + /// public Guid Id => new("36405F8D-4F1A-07F5-209C-223D735D6D22"); + /// public string Author => Authors.NataliaPortillo; @@ -89,37 +93,39 @@ public sealed class AppleMap : IPartition { case 256: { - byte[] tmp = new byte[512]; + var tmp = new byte[512]; Array.Copy(ddmSector, 0, tmp, 0, 256); ddmSector = tmp; maxDrivers = 29; break; } - case < 256: return false; + case < 256: + return false; } AppleDriverDescriptorMap ddm = Marshal.ByteArrayToStructureBigEndian(ddmSector); - AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbSig = 0x{0:X4}", ddm.sbSig); + AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbSig = 0x{0:X4}", ddm.sbSig); AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbBlockSize = {0}", ddm.sbBlockSize); - AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbBlocks = {0}", ddm.sbBlocks); - AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbDevType = {0}", ddm.sbDevType); - AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbDevId = {0}", ddm.sbDevId); + AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbBlocks = {0}", ddm.sbBlocks); + AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbDevType = {0}", ddm.sbDevType); + AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbDevId = {0}", ddm.sbDevId); AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbData = 0x{0:X8}", ddm.sbData); AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbDrvrCount = {0}", ddm.sbDrvrCount); uint sequence = 0; if(ddm.sbSig == DDM_MAGIC) + { if(ddm.sbDrvrCount < maxDrivers) { ddm.sbMap = new AppleDriverEntry[ddm.sbDrvrCount]; - for(int i = 0; i < ddm.sbDrvrCount; i++) + for(var i = 0; i < ddm.sbDrvrCount; i++) { - byte[] tmp = new byte[8]; - Array.Copy(ddmSector, 18 + (i * 8), tmp, 0, 8); + var tmp = new byte[8]; + Array.Copy(ddmSector, 18 + i * 8, tmp, 0, 8); ddm.sbMap[i] = Marshal.ByteArrayToStructureBigEndian(tmp); AaruConsole.DebugWriteLine(MODULE_NAME, "ddm.sbMap[{1}].ddBlock = {0}", ddm.sbMap[i].ddBlock, @@ -152,6 +158,7 @@ public sealed class AppleMap : IPartition sequence++; } } + } errno = imagePlugin.ReadSector(1 + sectorOffset, out byte[] partSector); @@ -164,9 +171,9 @@ public sealed class AppleMap : IPartition // This is the easy one, no sector size mixing if(oldMap.pdSig == APM_MAGIC_OLD) { - for(int i = 2; i < partSector.Length; i += 12) + for(var i = 2; i < partSector.Length; i += 12) { - byte[] tmp = new byte[12]; + var tmp = new byte[12]; Array.Copy(partSector, i, tmp, 0, 12); AppleMapOldPartitionEntry oldEntry = @@ -217,7 +224,7 @@ public sealed class AppleMap : IPartition // If sector is bigger than 512 if(ddmSector.Length > 512) { - byte[] tmp = new byte[512]; + var tmp = new byte[512]; Array.Copy(ddmSector, 512, tmp, 0, 512); entry = Marshal.ByteArrayToStructureBigEndian(tmp); @@ -228,7 +235,7 @@ public sealed class AppleMap : IPartition entrySize = 512; entryCount = entry.entries; skipDdm = 512; - sectorsToRead = ((entryCount + 1) * 512 / sectorSize) + 1; + sectorsToRead = (entryCount + 1) * 512 / sectorSize + 1; } else { @@ -267,18 +274,18 @@ public sealed class AppleMap : IPartition if(errno != ErrorNumber.NoError) return false; - AaruConsole.DebugWriteLine(MODULE_NAME, "entry_size = {0}", entrySize); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry_count = {0}", entryCount); - AaruConsole.DebugWriteLine(MODULE_NAME, "skip_ddm = {0}", skipDdm); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry_size = {0}", entrySize); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry_count = {0}", entryCount); + AaruConsole.DebugWriteLine(MODULE_NAME, "skip_ddm = {0}", skipDdm); AaruConsole.DebugWriteLine(MODULE_NAME, "sectors_to_read = {0}", sectorsToRead); - byte[] copy = new byte[entries.Length - skipDdm]; + var copy = new byte[entries.Length - skipDdm]; Array.Copy(entries, skipDdm, copy, 0, copy.Length); entries = copy; - for(int i = 0; i < entryCount; i++) + for(var i = 0; i < entryCount; i++) { - byte[] tmp = new byte[entrySize]; + var tmp = new byte[entrySize]; Array.Copy(entries, i * entrySize, tmp, 0, entrySize); entry = Marshal.ByteArrayToStructureBigEndian(tmp); @@ -287,9 +294,9 @@ public sealed class AppleMap : IPartition AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].signature = 0x{1:X4}", i, entry.signature); AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].reserved1 = 0x{1:X4}", i, entry.reserved1); - AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].entries = {1}", i, entry.entries); - AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].start = {1}", i, entry.start); - AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].sectors = {1}", i, entry.sectors); + AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].entries = {1}", i, entry.entries); + AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].start = {1}", i, entry.start); + AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].sectors = {1}", i, entry.sectors); AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].name = \"{1}\"", i, StringHandlers.CToString(entry.name)); @@ -301,7 +308,7 @@ public sealed class AppleMap : IPartition entry.first_data_block); AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].data_sectors = {1}", i, entry.data_sectors); - AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].flags = {1}", i, (AppleMapFlags)entry.flags); + AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].flags = {1}", i, (AppleMapFlags)entry.flags); AaruConsole.DebugWriteLine(MODULE_NAME, "dpme[{0}].first_boot_block = {1}", i, entry.first_boot_block); @@ -338,8 +345,8 @@ public sealed class AppleMap : IPartition Name = StringHandlers.CToString(entry.name), Offset = entry.start * entrySize, Size = entry.sectors * entrySize, - Start = (entry.start * entrySize / sectorSize) + sectorOffset, - Length = entry.sectors * entrySize / sectorSize, + Start = entry.start * entrySize / sectorSize + sectorOffset, + Length = entry.sectors * entrySize / sectorSize, Scheme = Name }; @@ -398,14 +405,20 @@ public sealed class AppleMap : IPartition sequence++; } else + { AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Not_adding_partition_because_start_0_is_outside_media_size_1, partition.Start, imagePlugin.Info.Sectors - 1); + } } return partitions.Count > 0; } +#endregion + +#region Nested type: AppleDriverDescriptorMap + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct AppleDriverDescriptorMap { @@ -428,6 +441,10 @@ public sealed class AppleMap : IPartition public AppleDriverEntry[] sbMap; } +#endregion + +#region Nested type: AppleDriverEntry + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct AppleDriverEntry { @@ -439,26 +456,9 @@ public sealed class AppleMap : IPartition public readonly ushort ddType; } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct AppleOldDevicePartitionMap - { - /// Signature - public readonly ushort pdSig; - /// Entries of the driver descriptor - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)] - public readonly AppleMapOldPartitionEntry[] pdMap; - } +#endregion - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct AppleMapOldPartitionEntry - { - /// First sector of the partition - public readonly uint pdStart; - /// Number of sectors of the partition - public readonly uint pdSize; - /// Partition type - public readonly uint pdFSID; - } +#region Nested type: AppleMapFlags [Flags] enum AppleMapFlags : uint @@ -489,6 +489,25 @@ public sealed class AppleMap : IPartition Reserved = 0xBFFFFC00 } +#endregion + +#region Nested type: AppleMapOldPartitionEntry + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct AppleMapOldPartitionEntry + { + /// First sector of the partition + public readonly uint pdStart; + /// Number of sectors of the partition + public readonly uint pdSize; + /// Partition type + public readonly uint pdFSID; + } + +#endregion + +#region Nested type: AppleMapPartitionEntry + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct AppleMapPartitionEntry { @@ -535,4 +554,20 @@ public sealed class AppleMap : IPartition [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public readonly uint[] boot_arguments; } + +#endregion + +#region Nested type: AppleOldDevicePartitionMap + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct AppleOldDevicePartitionMap + { + /// Signature + public readonly ushort pdSig; + /// Entries of the driver descriptor + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)] + public readonly AppleMapOldPartitionEntry[] pdMap; + } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/Apricot.cs b/Aaru.Partitions/Apricot.cs index 65e4827eb..d34b6cb97 100644 --- a/Aaru.Partitions/Apricot.cs +++ b/Aaru.Partitions/Apricot.cs @@ -46,11 +46,8 @@ namespace Aaru.Partitions; /// Implements decoding of Apricot partitions public sealed class Apricot : IPartition { - const string MODULE_NAME = "Apricot partitions plugin"; - readonly int[] _baudRates = - { - 50, 75, 110, 134, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600, 19200 - }; + const string MODULE_NAME = "Apricot partitions plugin"; + readonly int[] _baudRates = { 50, 75, 110, 134, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600, 19200 }; readonly string[] _bootTypeCodes = { Localization.Non_bootable, Localization.Apricot_XI_RAM_BIOS, Localization.Generic_ROM_BIOS, @@ -60,14 +57,8 @@ public sealed class Apricot : IPartition { Localization.MF1DD_70_track, "MF1DD", "MF2DD", "Winchester 5M", "Winchester 10M", "Winchester 20M" }; - readonly int[] _lineModes = - { - 256, 200 - }; - readonly int[] _lineWidths = - { - 80, 40 - }; + readonly int[] _lineModes = { 256, 200 }; + readonly int[] _lineWidths = { 80, 40 }; readonly string[] _operatingSystemCodes = { Localization.Invalid_operating_system, "MS-DOS", "UCSD Pascal", Localization.CPM, "Concurrent CP/M" @@ -77,19 +68,17 @@ public sealed class Apricot : IPartition Localization.None_parity, Localization.Odd_parity, Localization.Even_parity, Localization.Mark_parity, Localization.Space_parity }; - readonly string[] _printDevices = - { - Localization.Parallel_print_device, Localization.Serial_print_device - }; - readonly double[] _stopBits = - { - 1, 1.5, 2 - }; + readonly string[] _printDevices = { Localization.Parallel_print_device, Localization.Serial_print_device }; + readonly double[] _stopBits = { 1, 1.5, 2 }; + +#region IPartition Members /// public string Name => Localization.Apricot_Name; + /// public Guid Id => new("8CBF5864-7B5A-47A0-8CEB-199C74FA22DE"); + /// public string Author => Authors.NataliaPortillo; @@ -130,31 +119,32 @@ public sealed class Apricot : IPartition : Localization.Unknown_operating_system); AaruConsole.DebugWriteLine(MODULE_NAME, "label.writeProtected = {0}", label.writeProtected); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.copyProtected = {0}", label.copyProtected); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.copyProtected = {0}", label.copyProtected); AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootType = {0} ({1})", label.bootType, - label.bootType < _bootTypeCodes.Length ? _bootTypeCodes[label.bootType] + label.bootType < _bootTypeCodes.Length + ? _bootTypeCodes[label.bootType] : Localization.Unknown_boot_type); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.partitionCount = {0}", label.partitionCount); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.winchester = {0}", label.winchester); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.sectorSize = {0}", label.sectorSize); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.spt = {0}", label.spt); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.cylinders = {0}", label.cylinders); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.heads = {0}", label.heads); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.interleave = {0}", label.interleave); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.skew = {0}", label.skew); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootLocation = {0}", label.bootLocation); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootSize = {0}", label.bootSize); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.partitionCount = {0}", label.partitionCount); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.winchester = {0}", label.winchester); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.sectorSize = {0}", label.sectorSize); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.spt = {0}", label.spt); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.cylinders = {0}", label.cylinders); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.heads = {0}", label.heads); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.interleave = {0}", label.interleave); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.skew = {0}", label.skew); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootLocation = {0}", label.bootLocation); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootSize = {0}", label.bootSize); AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootAddress = 0x{0:X8}", label.bootAddress); AaruConsole.DebugWriteLine(MODULE_NAME, "label.bootOffset:label.bootSegment = {0:X4}:{1:X4}", label.bootOffset, label.bootSegment); AaruConsole.DebugWriteLine(MODULE_NAME, "label.firstDataBlock = {0}", label.firstDataBlock); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.generation = {0}", label.generation); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.copyCount = {0}", label.copyCount); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.maxCopies = {0}", label.maxCopies); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.generation = {0}", label.generation); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.copyCount = {0}", label.copyCount); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.maxCopies = {0}", label.maxCopies); AaruConsole.DebugWriteLine(MODULE_NAME, "label.serialNumber = \"{0}\"", StringHandlers.CToString(label.serialNumber)); @@ -165,18 +155,19 @@ public sealed class Apricot : IPartition AaruConsole.DebugWriteLine(MODULE_NAME, "label.copyright = \"{0}\"", StringHandlers.CToString(label.copyright)); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.bps = {0}", label.mainBPB.bps); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.spc = {0}", label.mainBPB.spc); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.bps = {0}", label.mainBPB.bps); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.spc = {0}", label.mainBPB.spc); AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.rsectors = {0}", label.mainBPB.rsectors); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.fats_no = {0}", label.mainBPB.fats_no); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.fats_no = {0}", label.mainBPB.fats_no); AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.root_ent = {0}", label.mainBPB.root_ent); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.sectors = {0}", label.mainBPB.sectors); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.media = {0}", label.mainBPB.media); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.spfat = {0}", label.mainBPB.spfat); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.sectors = {0}", label.mainBPB.sectors); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.media = {0}", label.mainBPB.media); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.spfat = {0}", label.mainBPB.spfat); AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.diskType = {0} ({1})", label.mainBPB.diskType, label.mainBPB.diskType < _diskTypeCodes.Length - ? _diskTypeCodes[label.mainBPB.diskType] : Localization.Unknown_disk_type); + ? _diskTypeCodes[label.mainBPB.diskType] + : Localization.Unknown_disk_type); AaruConsole.DebugWriteLine(MODULE_NAME, "label.mainBPB.startSector = {0}", label.mainBPB.startSector); @@ -188,23 +179,24 @@ public sealed class Apricot : IPartition AaruConsole.DebugWriteLine(MODULE_NAME, "label.biosMajorVersion = {0}", label.biosMajorVersion); AaruConsole.DebugWriteLine(MODULE_NAME, "label.biosMinorVersion = {0}", label.biosMinorVersion); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.diagnosticsFlag = {0}", label.diagnosticsFlag); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.diagnosticsFlag = {0}", label.diagnosticsFlag); AaruConsole.DebugWriteLine(MODULE_NAME, "label.prnDevice = {0} ({1})", label.prnDevice, - label.prnDevice < _printDevices.Length ? _printDevices[label.prnDevice] + label.prnDevice < _printDevices.Length + ? _printDevices[label.prnDevice] : Localization.Unknown_print_device); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.bellVolume = {0}", label.bellVolume); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.enableCache = {0}", label.enableCache); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.enableGraphics = {0}", label.enableGraphics); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.dosLength = {0}", label.dosLength); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.fontLength = {0}", label.fontLength); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.keyboardLength = {0}", label.keyboardLength); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.dosStart = {0}", label.dosStart); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.fontStart = {0}", label.fontStart); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.keyboardStart = {0}", label.keyboardStart); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.keyboardVolume = {0}", label.keyboardVolume); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.autorepeat = {0}", label.autorepeat); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.bellVolume = {0}", label.bellVolume); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.enableCache = {0}", label.enableCache); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.enableGraphics = {0}", label.enableGraphics); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.dosLength = {0}", label.dosLength); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.fontLength = {0}", label.fontLength); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.keyboardLength = {0}", label.keyboardLength); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.dosStart = {0}", label.dosStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.fontStart = {0}", label.fontStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.keyboardStart = {0}", label.keyboardStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.keyboardVolume = {0}", label.keyboardVolume); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.autorepeat = {0}", label.autorepeat); AaruConsole.DebugWriteLine(MODULE_NAME, "label.autorepeatLeadIn = {0}", label.autorepeatLeadIn); AaruConsole.DebugWriteLine(MODULE_NAME, "label.autorepeatInterval = {0}", label.autorepeatInterval); @@ -240,18 +232,19 @@ public sealed class Apricot : IPartition AaruConsole.DebugWriteLine(MODULE_NAME, "label.parityCheck = {0}", label.parityCheck); AaruConsole.DebugWriteLine(MODULE_NAME, "label.parityType = {0} ({1})", label.parityType, - label.parityType < _parityTypes.Length ? _parityTypes[label.parityType] + label.parityType < _parityTypes.Length + ? _parityTypes[label.parityType] : Localization.Unknown_parity_type); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.txXonXoff = {0}", label.txXonXoff); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.rxXonXoff = {0}", label.rxXonXoff); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.xonCharacter = {0}", label.xonCharacter); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.xoffCharacter = {0}", label.xoffCharacter); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.txXonXoff = {0}", label.txXonXoff); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.rxXonXoff = {0}", label.rxXonXoff); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.xonCharacter = {0}", label.xonCharacter); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.xoffCharacter = {0}", label.xoffCharacter); AaruConsole.DebugWriteLine(MODULE_NAME, "label.rxXonXoffBuffer = {0}", label.rxXonXoffBuffer); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.dtrDsr = {0}", label.dtrDsr); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.ctsRts = {0}", label.ctsRts); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.nullsAfterCr = {0}", label.nullsAfterCr); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.nullsAfterFF = {0}", label.nullsAfterFF); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.dtrDsr = {0}", label.dtrDsr); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.ctsRts = {0}", label.ctsRts); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.nullsAfterCr = {0}", label.nullsAfterCr); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.nullsAfterFF = {0}", label.nullsAfterFF); AaruConsole.DebugWriteLine(MODULE_NAME, "label.lfAfterCRSerial = {0}", label.lfAfterCRSerial); AaruConsole.DebugWriteLine(MODULE_NAME, "label.biosErrorReportSerial = {0}", @@ -261,9 +254,9 @@ public sealed class Apricot : IPartition ArrayHelpers.ArrayIsNullOrEmpty(label.spareSerial)); AaruConsole.DebugWriteLine(MODULE_NAME, "label.lfAfterCrParallel = {0}", label.lfAfterCrParallel); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.selectLine = {0}", label.selectLine); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.paperEmpty = {0}", label.paperEmpty); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.faultLine = {0}", label.faultLine); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.selectLine = {0}", label.selectLine); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.paperEmpty = {0}", label.paperEmpty); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.faultLine = {0}", label.faultLine); AaruConsole.DebugWriteLine(MODULE_NAME, "label.biosErrorReportParallel = {0}", label.biosErrorReportParallel); @@ -274,16 +267,16 @@ public sealed class Apricot : IPartition AaruConsole.DebugWriteLine(MODULE_NAME, "label.spareWinchester is null? = {0}", ArrayHelpers.ArrayIsNullOrEmpty(label.spareWinchester)); - AaruConsole.DebugWriteLine(MODULE_NAME, "label.parkingEnabled = {0}", label.parkingEnabled); + AaruConsole.DebugWriteLine(MODULE_NAME, "label.parkingEnabled = {0}", label.parkingEnabled); AaruConsole.DebugWriteLine(MODULE_NAME, "label.formatProtection = {0}", label.formatProtection); AaruConsole.DebugWriteLine(MODULE_NAME, "label.spareRamDisk is null? = {0}", ArrayHelpers.ArrayIsNullOrEmpty(label.spareRamDisk)); - for(int i = 0; i < 32; i++) + for(var i = 0; i < 32; i++) AaruConsole.DebugWriteLine(MODULE_NAME, "label.badBlocks[{1}] = {0}", label.badBlocks[i], i); - for(int i = 0; i < 8; i++) + for(var i = 0; i < 8; i++) { AaruConsole.DebugWriteLine(MODULE_NAME, "label.partitions[{1}].bps = {0}", label.partitions[i].bps, i); @@ -349,6 +342,10 @@ public sealed class Apricot : IPartition return partitions.Count > 0; } +#endregion + +#region Nested type: Label + /// Apricot Label. [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct Label @@ -560,6 +557,10 @@ public sealed class Apricot : IPartition public readonly bool cpmDoubleSided; } +#endregion + +#region Nested type: ParameterBlock + [StructLayout(LayoutKind.Sequential, Pack = 1)] struct ParameterBlock { @@ -584,4 +585,6 @@ public sealed class Apricot : IPartition /// Volume starting sector public readonly ushort startSector; } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/Atari.cs b/Aaru.Partitions/Atari.cs index 369f9a75d..6f6810293 100644 --- a/Aaru.Partitions/Atari.cs +++ b/Aaru.Partitions/Atari.cs @@ -61,10 +61,14 @@ public sealed class AtariPartitions : IPartition const uint TYPE_MINIX2 = 0x004D4E58; const string MODULE_NAME = "Atari partitions plugin"; +#region IPartition Members + /// public string Name => Localization.AtariPartitions_Name; + /// public Guid Id => new("d1dd0f24-ec39-4c4d-9072-be31919a3b5e"); + /// public string Author => Authors.NataliaPortillo; @@ -89,22 +93,22 @@ public sealed class AtariPartitions : IPartition Array.Copy(sector, 0, table.Boot, 0, 342); - for(int i = 0; i < 8; i++) + for(var i = 0; i < 8; i++) { - table.IcdEntries[i].Type = BigEndianBitConverter.ToUInt32(sector, 342 + (i * 12) + 0); - table.IcdEntries[i].Start = BigEndianBitConverter.ToUInt32(sector, 342 + (i * 12) + 4); - table.IcdEntries[i].Length = BigEndianBitConverter.ToUInt32(sector, 342 + (i * 12) + 8); + table.IcdEntries[i].Type = BigEndianBitConverter.ToUInt32(sector, 342 + i * 12 + 0); + table.IcdEntries[i].Start = BigEndianBitConverter.ToUInt32(sector, 342 + i * 12 + 4); + table.IcdEntries[i].Length = BigEndianBitConverter.ToUInt32(sector, 342 + i * 12 + 8); } Array.Copy(sector, 438, table.Unused, 0, 12); table.Size = BigEndianBitConverter.ToUInt32(sector, 450); - for(int i = 0; i < 4; i++) + for(var i = 0; i < 4; i++) { - table.Entries[i].Type = BigEndianBitConverter.ToUInt32(sector, 454 + (i * 12) + 0); - table.Entries[i].Start = BigEndianBitConverter.ToUInt32(sector, 454 + (i * 12) + 4); - table.Entries[i].Length = BigEndianBitConverter.ToUInt32(sector, 454 + (i * 12) + 8); + table.Entries[i].Type = BigEndianBitConverter.ToUInt32(sector, 454 + i * 12 + 0); + table.Entries[i].Start = BigEndianBitConverter.ToUInt32(sector, 454 + i * 12 + 4); + table.Entries[i].Length = BigEndianBitConverter.ToUInt32(sector, 454 + i * 12 + 8); } table.BadStart = BigEndianBitConverter.ToUInt32(sector, 502); @@ -115,7 +119,7 @@ public sealed class AtariPartitions : IPartition sha1Ctx.Update(table.Boot); AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Boot_code_SHA1_0, sha1Ctx.End()); - for(int i = 0; i < 8; i++) + for(var i = 0; i < 8; i++) { AaruConsole.DebugWriteLine(MODULE_NAME, Markup.Escape("table.icdEntries[{0}].flag = 0x{1:X2}"), i, (table.IcdEntries[i].Type & 0xFF000000) >> 24); @@ -132,7 +136,7 @@ public sealed class AtariPartitions : IPartition AaruConsole.DebugWriteLine(MODULE_NAME, "table.size = {0}", table.Size); - for(int i = 0; i < 4; i++) + for(var i = 0; i < 4; i++) { AaruConsole.DebugWriteLine(MODULE_NAME, Markup.Escape("table.entries[{0}].flag = 0x{1:X2}"), i, (table.Entries[i].Type & 0xFF000000) >> 24); @@ -147,14 +151,14 @@ public sealed class AtariPartitions : IPartition table.Entries[i].Length); } - AaruConsole.DebugWriteLine(MODULE_NAME, "table.badStart = {0}", table.BadStart); - AaruConsole.DebugWriteLine(MODULE_NAME, "table.badLength = {0}", table.BadLength); + AaruConsole.DebugWriteLine(MODULE_NAME, "table.badStart = {0}", table.BadStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "table.badLength = {0}", table.BadLength); AaruConsole.DebugWriteLine(MODULE_NAME, "table.checksum = 0x{0:X4}", table.Checksum); - bool validTable = false; + var validTable = false; ulong partitionSequence = 0; - for(int i = 0; i < 4; i++) + for(var i = 0; i < 4; i++) { uint type = table.Entries[i].Type & 0x00FFFFFF; @@ -176,15 +180,17 @@ public sealed class AtariPartitions : IPartition if(table.Entries[i].Start <= imagePlugin.Info.Sectors) { if(table.Entries[i].Start + table.Entries[i].Length > imagePlugin.Info.Sectors) + { AaruConsole.DebugWriteLine(MODULE_NAME, Localization.WARNING_End_of_partition_goes_beyond_device_size); + } ulong sectorSize = imagePlugin.Info.SectorSize; if(sectorSize is 2448 or 2352) sectorSize = 2048; - byte[] partType = new byte[3]; + var partType = new byte[3]; partType[0] = (byte)((type & 0xFF0000) >> 16); partType[1] = (byte)((type & 0x00FF00) >> 8); partType[2] = (byte)(type & 0x0000FF); @@ -266,19 +272,19 @@ public sealed class AtariPartitions : IPartition Entries = new AtariEntry[4] }; - for(int j = 0; j < 4; j++) + for(var j = 0; j < 4; j++) { extendedTable.Entries[j].Type = - BigEndianBitConverter.ToUInt32(extendedSector, 454 + (j * 12) + 0); + BigEndianBitConverter.ToUInt32(extendedSector, 454 + j * 12 + 0); extendedTable.Entries[j].Start = - BigEndianBitConverter.ToUInt32(extendedSector, 454 + (j * 12) + 4); + BigEndianBitConverter.ToUInt32(extendedSector, 454 + j * 12 + 4); extendedTable.Entries[j].Length = - BigEndianBitConverter.ToUInt32(extendedSector, 454 + (j * 12) + 8); + BigEndianBitConverter.ToUInt32(extendedSector, 454 + j * 12 + 8); } - for(int j = 0; j < 4; j++) + for(var j = 0; j < 4; j++) { uint extendedType = extendedTable.Entries[j].Type & 0x00FFFFFF; @@ -301,15 +307,17 @@ public sealed class AtariPartitions : IPartition continue; if(extendedTable.Entries[j].Start + extendedTable.Entries[j].Length > imagePlugin.Info.Sectors) + { AaruConsole.DebugWriteLine(MODULE_NAME, Localization.WARNING_End_of_partition_goes_beyond_device_size); + } ulong sectorSize = imagePlugin.Info.SectorSize; if(sectorSize is 2448 or 2352) sectorSize = 2048; - byte[] partType = new byte[3]; + var partType = new byte[3]; partType[0] = (byte)((extendedType & 0xFF0000) >> 16); partType[1] = (byte)((extendedType & 0x00FF00) >> 8); partType[2] = (byte)(extendedType & 0x0000FF); @@ -386,7 +394,7 @@ public sealed class AtariPartitions : IPartition if(!validTable) return partitions.Count > 0; - for(int i = 0; i < 8; i++) + for(var i = 0; i < 8; i++) { uint type = table.IcdEntries[i].Type & 0x00FFFFFF; @@ -407,15 +415,17 @@ public sealed class AtariPartitions : IPartition continue; if(table.IcdEntries[i].Start + table.IcdEntries[i].Length > imagePlugin.Info.Sectors) + { AaruConsole.DebugWriteLine(MODULE_NAME, Localization.WARNING_End_of_partition_goes_beyond_device_size); + } ulong sectorSize = imagePlugin.Info.SectorSize; if(sectorSize is 2448 or 2352) sectorSize = 2048; - byte[] partType = new byte[3]; + var partType = new byte[3]; partType[0] = (byte)((type & 0xFF0000) >> 16); partType[1] = (byte)((type & 0x00FF00) >> 8); partType[2] = (byte)(type & 0x0000FF); @@ -488,6 +498,10 @@ public sealed class AtariPartitions : IPartition return partitions.Count > 0; } +#endregion + +#region Nested type: AtariEntry + /// Atari partition entry struct AtariEntry { @@ -499,6 +513,10 @@ public sealed class AtariPartitions : IPartition public uint Length; } +#endregion + +#region Nested type: AtariTable + struct AtariTable { /// Boot code for 342 bytes @@ -518,4 +536,6 @@ public sealed class AtariPartitions : IPartition /// Checksum for bootable disks public ushort Checksum; } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/BSD.cs b/Aaru.Partitions/BSD.cs index e3f0d3fa2..e949d9548 100644 --- a/Aaru.Partitions/BSD.cs +++ b/Aaru.Partitions/BSD.cs @@ -55,20 +55,18 @@ public sealed class BSD : IPartition const uint MAX_LABEL_SIZE = 500; const string MODULE_NAME = "BSD disklabel plugin"; /// Known sector locations for BSD disklabel - readonly ulong[] _labelLocations = - { - 0, 1, 2, 9 - }; + readonly ulong[] _labelLocations = { 0, 1, 2, 9 }; /// Known byte offsets for BSD disklabel - readonly uint[] _labelOffsets = - { - 0, 9, 64, 128, 516 - }; + readonly uint[] _labelOffsets = { 0, 9, 64, 128, 516 }; + +#region IPartition Members /// public string Name => Localization.BSD_Name; + /// public Guid Id => new("246A6D93-4F1A-1F8A-344D-50187A5513A9"); + /// public string Author => Authors.NataliaPortillo; @@ -81,8 +79,8 @@ public sealed class BSD : IPartition if((MAX_LABEL_SIZE + _labelOffsets.Last()) % imagePlugin.Info.SectorSize > 0) run++; - var dl = new DiskLabel(); - bool found = false; + var dl = new DiskLabel(); + var found = false; foreach(ulong location in _labelLocations) { @@ -96,7 +94,7 @@ public sealed class BSD : IPartition foreach(uint offset in _labelOffsets) { - byte[] sector = new byte[MAX_LABEL_SIZE]; + var sector = new byte[MAX_LABEL_SIZE]; if(offset + MAX_LABEL_SIZE > tmp.Length) break; @@ -128,46 +126,46 @@ public sealed class BSD : IPartition if(dl is { d_magic: DISK_CIGAM, d_magic2: DISK_CIGAM }) dl = SwapDiskLabel(dl); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_type = {0}", dl.d_type); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_subtype = {0}", dl.d_subtype); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_typename = {0}", StringHandlers.CToString(dl.d_typename)); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_packname = {0}", StringHandlers.CToString(dl.d_packname)); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_secsize = {0}", dl.d_secsize); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_nsectors = {0}", dl.d_nsectors); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_ntracks = {0}", dl.d_ntracks); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_ncylinders = {0}", dl.d_ncylinders); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_secpercyl = {0}", dl.d_secpercyl); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_secperunit = {0}", dl.d_secperunit); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_type = {0}", dl.d_type); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_subtype = {0}", dl.d_subtype); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_typename = {0}", StringHandlers.CToString(dl.d_typename)); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_packname = {0}", StringHandlers.CToString(dl.d_packname)); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_secsize = {0}", dl.d_secsize); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_nsectors = {0}", dl.d_nsectors); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_ntracks = {0}", dl.d_ntracks); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_ncylinders = {0}", dl.d_ncylinders); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_secpercyl = {0}", dl.d_secpercyl); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_secperunit = {0}", dl.d_secperunit); AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_sparespertrack = {0}", dl.d_sparespertrack); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_sparespercyl = {0}", dl.d_sparespercyl); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_acylinders = {0}", dl.d_acylinders); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_rpm = {0}", dl.d_rpm); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_interleave = {0}", dl.d_interleave); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_trackskew = {0}", dl.d_trackskew); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_cylskeew = {0}", dl.d_cylskeew); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_headswitch = {0}", dl.d_headswitch); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_trkseek = {0}", dl.d_trkseek); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_flags = {0}", dl.d_flags); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[0] = {0}", dl.d_drivedata[0]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[1] = {0}", dl.d_drivedata[1]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[2] = {0}", dl.d_drivedata[2]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[3] = {0}", dl.d_drivedata[3]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[4] = {0}", dl.d_drivedata[4]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[0] = {0}", dl.d_spare[0]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[1] = {0}", dl.d_spare[1]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[2] = {0}", dl.d_spare[2]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[3] = {0}", dl.d_spare[3]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[4] = {0}", dl.d_spare[4]); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_magic2 = 0x{0:X8}", dl.d_magic2); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_checksum = 0x{0:X8}", dl.d_checksum); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_npartitions = {0}", dl.d_npartitions); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_bbsize = {0}", dl.d_bbsize); - AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_sbsize = {0}", dl.d_sbsize); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_sparespercyl = {0}", dl.d_sparespercyl); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_acylinders = {0}", dl.d_acylinders); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_rpm = {0}", dl.d_rpm); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_interleave = {0}", dl.d_interleave); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_trackskew = {0}", dl.d_trackskew); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_cylskeew = {0}", dl.d_cylskeew); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_headswitch = {0}", dl.d_headswitch); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_trkseek = {0}", dl.d_trkseek); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_flags = {0}", dl.d_flags); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[0] = {0}", dl.d_drivedata[0]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[1] = {0}", dl.d_drivedata[1]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[2] = {0}", dl.d_drivedata[2]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[3] = {0}", dl.d_drivedata[3]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_drivedata[4] = {0}", dl.d_drivedata[4]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[0] = {0}", dl.d_spare[0]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[1] = {0}", dl.d_spare[1]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[2] = {0}", dl.d_spare[2]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[3] = {0}", dl.d_spare[3]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_spare[4] = {0}", dl.d_spare[4]); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_magic2 = 0x{0:X8}", dl.d_magic2); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_checksum = 0x{0:X8}", dl.d_checksum); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_npartitions = {0}", dl.d_npartitions); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_bbsize = {0}", dl.d_bbsize); + AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_sbsize = {0}", dl.d_sbsize); ulong counter = 0; - bool addSectorOffset = false; + var addSectorOffset = false; - for(int i = 0; i < dl.d_npartitions && i < 22; i++) + for(var i = 0; i < dl.d_npartitions && i < 22; i++) { AaruConsole.DebugWriteLine(MODULE_NAME, "dl.d_partitions[i].p_offset = {0}", dl.d_partitions[i].p_offset); @@ -210,40 +208,71 @@ public sealed class BSD : IPartition return partitions.Count > 0; } +#endregion + internal static string FSTypeToString(fsType typ) { switch(typ) { - case fsType.Unused: return Localization.Unused_entry; - case fsType.Swap: return Localization.Swap_partition; - case fsType.V6: return Localization.UNIX_6th_Edition; - case fsType.V7: return Localization.UNIX_7th_Edition; - case fsType.SystemV: return Localization.UNIX_System_V; - case fsType.V7_1K: return Localization.UNIX_7th_Edition_with_1K_blocks; - case fsType.V8: return Localization.UNIX_8th_Edition_with_4K_blocks; - case fsType.BSDFFS: return Localization._4_2_BSD_Fast_File_System; - case fsType.BSDLFS: return Localization._4_4_LFS; - case fsType.HPFS: return Localization.HPFS; - case fsType.ISO9660: return Localization.ISO9660; + case fsType.Unused: + return Localization.Unused_entry; + case fsType.Swap: + return Localization.Swap_partition; + case fsType.V6: + return Localization.UNIX_6th_Edition; + case fsType.V7: + return Localization.UNIX_7th_Edition; + case fsType.SystemV: + return Localization.UNIX_System_V; + case fsType.V7_1K: + return Localization.UNIX_7th_Edition_with_1K_blocks; + case fsType.V8: + return Localization.UNIX_8th_Edition_with_4K_blocks; + case fsType.BSDFFS: + return Localization._4_2_BSD_Fast_File_System; + case fsType.BSDLFS: + return Localization._4_4_LFS; + case fsType.HPFS: + return Localization.HPFS; + case fsType.ISO9660: + return Localization.ISO9660; case fsType.Boot: - case fsType.SysVBoot: return Localization.Boot; - case fsType.AFFS: return Localization.Amiga_FFS; - case fsType.HFS: return Localization.Apple_HFS; - case fsType.ADVfs: return Localization.Digital_Advanced_File_System; - case fsType.LSMpublic: return Localization.Digital_LSM_Public_Region; - case fsType.LSMprivate: return Localization.Digital_LSM_Private_Region; - case fsType.LSMsimple: return Localization.Digital_LSM_Simple_Disk; - case fsType.CCD: return Localization.Concatenated_disk; - case fsType.JFS2: return Localization.IBM_JFS2; - case fsType.HAMMER: return Localization.Hammer; - case fsType.HAMMER2: return Localization.Hammer2; - case fsType.UDF: return Localization.UDF; - case fsType.EFS: return Localization.EFS; - case fsType.ZFS: return Localization.ZFS; - case fsType.NANDFS: return Localization.FreeBSD_nandfs; - case fsType.MSDOS: return Localization.FAT; - case fsType.Other: return Localization.Other_or_unknown; - default: return Localization.Unknown_partition_type; + case fsType.SysVBoot: + return Localization.Boot; + case fsType.AFFS: + return Localization.Amiga_FFS; + case fsType.HFS: + return Localization.Apple_HFS; + case fsType.ADVfs: + return Localization.Digital_Advanced_File_System; + case fsType.LSMpublic: + return Localization.Digital_LSM_Public_Region; + case fsType.LSMprivate: + return Localization.Digital_LSM_Private_Region; + case fsType.LSMsimple: + return Localization.Digital_LSM_Simple_Disk; + case fsType.CCD: + return Localization.Concatenated_disk; + case fsType.JFS2: + return Localization.IBM_JFS2; + case fsType.HAMMER: + return Localization.Hammer; + case fsType.HAMMER2: + return Localization.Hammer2; + case fsType.UDF: + return Localization.UDF; + case fsType.EFS: + return Localization.EFS; + case fsType.ZFS: + return Localization.ZFS; + case fsType.NANDFS: + return Localization.FreeBSD_nandfs; + case fsType.MSDOS: + return Localization.FAT; + case fsType.Other: + return Localization.Other_or_unknown; + default: + return Localization.Unknown_partition_type; } } @@ -251,18 +280,142 @@ public sealed class BSD : IPartition { dl = (DiskLabel)Marshal.SwapStructureMembersEndian(dl); - for(int i = 0; i < dl.d_drivedata.Length; i++) + for(var i = 0; i < dl.d_drivedata.Length; i++) dl.d_drivedata[i] = Swapping.Swap(dl.d_drivedata[i]); - for(int i = 0; i < dl.d_spare.Length; i++) + for(var i = 0; i < dl.d_spare.Length; i++) dl.d_spare[i] = Swapping.Swap(dl.d_spare[i]); - for(int i = 0; i < dl.d_partitions.Length; i++) + for(var i = 0; i < dl.d_partitions.Length; i++) dl.d_partitions[i] = (BSDPartition)Marshal.SwapStructureMembersEndian(dl.d_partitions[i]); return dl; } +#region Nested type: BSDPartition + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct BSDPartition + { + /// Sectors in partition + public readonly uint p_size; + /// Starting sector + public readonly uint p_offset; + /// Fragment size + public readonly uint p_fsize; + /// Filesystem type, + public readonly fsType p_fstype; + /// Fragment size + public readonly byte p_frag; + /// Cylinder per group + public readonly ushort p_cpg; + } + +#endregion + +#region Nested type: dFlags + + /// Drive flags + [SuppressMessage("ReSharper", "InconsistentNaming")] + [Flags] + enum dFlags : uint + { + /// Removable media + Removable = 0x01, + /// Drive supports ECC + ECC = 0x02, + /// Drive supports bad sector forwarding + BadSectorForward = 0x04, + /// Disk emulator + RAMDisk = 0x08, + /// Can do back to back transfer + Chain = 0x10, + /// Dynamic geometry device + DynamicGeometry = 0x20 + } + +#endregion + +#region Nested type: DiskLabel + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct DiskLabel + { + /// + /// + /// + public readonly uint d_magic; + /// + /// + /// + public readonly dType d_type; + /// Disk subtype + public readonly ushort d_subtype; + /// Type name + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public readonly byte[] d_typename; + /// Pack identifier + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public readonly byte[] d_packname; + /// Bytes per sector + public readonly uint d_secsize; + /// Sectors per track + public readonly uint d_nsectors; + /// Tracks per cylinder + public readonly uint d_ntracks; + /// Cylinders per unit + public readonly uint d_ncylinders; + /// Sectors per cylinder + public readonly uint d_secpercyl; + /// Sectors per unit + public readonly uint d_secperunit; + /// Spare sectors per track + public readonly ushort d_sparespertrack; + /// Spare sectors per cylinder + public readonly ushort d_sparespercyl; + /// Alternate cylinders + public readonly uint d_acylinders; + /// Rotational speed + public readonly ushort d_rpm; + /// Hardware sector interleave + public readonly ushort d_interleave; + /// Sector 0 skew per track + public readonly ushort d_trackskew; + /// Sector 0 sker per cylinder + public readonly ushort d_cylskeew; + /// Head switch time in microseconds + public readonly uint d_headswitch; + /// Track to track seek in microseconds + public readonly uint d_trkseek; + /// + /// + /// + public readonly dFlags d_flags; + /// Drive-specific information + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] + public readonly uint[] d_drivedata; + /// Reserved + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] + public readonly uint[] d_spare; + /// again + public readonly uint d_magic2; + /// XOR of data + public readonly ushort d_checksum; + /// How many partitions + public readonly ushort d_npartitions; + /// Size of boot area in bytes + public readonly uint d_bbsize; + /// Maximum size of superblock in bytes + public readonly uint d_sbsize; + /// Partitions + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)] + public readonly BSDPartition[] d_partitions; + } + +#endregion + +#region Nested type: dType + /// Drive type [SuppressMessage("ReSharper", "InconsistentNaming")] enum dType : ushort @@ -313,6 +466,10 @@ public sealed class BSD : IPartition MD = 22 } +#endregion + +#region Nested type: fsType + /// Filesystem type [SuppressMessage("ReSharper", "InconsistentNaming")] internal enum fsType : byte @@ -393,112 +550,5 @@ public sealed class BSD : IPartition NANDFS = 30 } - /// Drive flags - [SuppressMessage("ReSharper", "InconsistentNaming"), Flags] - enum dFlags : uint - { - /// Removable media - Removable = 0x01, - /// Drive supports ECC - ECC = 0x02, - /// Drive supports bad sector forwarding - BadSectorForward = 0x04, - /// Disk emulator - RAMDisk = 0x08, - /// Can do back to back transfer - Chain = 0x10, - /// Dynamic geometry device - DynamicGeometry = 0x20 - } - - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct DiskLabel - { - /// - /// - /// - public readonly uint d_magic; - /// - /// - /// - public readonly dType d_type; - /// Disk subtype - public readonly ushort d_subtype; - /// Type name - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public readonly byte[] d_typename; - /// Pack identifier - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public readonly byte[] d_packname; - /// Bytes per sector - public readonly uint d_secsize; - /// Sectors per track - public readonly uint d_nsectors; - /// Tracks per cylinder - public readonly uint d_ntracks; - /// Cylinders per unit - public readonly uint d_ncylinders; - /// Sectors per cylinder - public readonly uint d_secpercyl; - /// Sectors per unit - public readonly uint d_secperunit; - /// Spare sectors per track - public readonly ushort d_sparespertrack; - /// Spare sectors per cylinder - public readonly ushort d_sparespercyl; - /// Alternate cylinders - public readonly uint d_acylinders; - /// Rotational speed - public readonly ushort d_rpm; - /// Hardware sector interleave - public readonly ushort d_interleave; - /// Sector 0 skew per track - public readonly ushort d_trackskew; - /// Sector 0 sker per cylinder - public readonly ushort d_cylskeew; - /// Head switch time in microseconds - public readonly uint d_headswitch; - /// Track to track seek in microseconds - public readonly uint d_trkseek; - /// - /// - /// - public readonly dFlags d_flags; - /// Drive-specific information - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] - public readonly uint[] d_drivedata; - /// Reserved - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] - public readonly uint[] d_spare; - /// again - public readonly uint d_magic2; - /// XOR of data - public readonly ushort d_checksum; - /// How many partitions - public readonly ushort d_npartitions; - /// Size of boot area in bytes - public readonly uint d_bbsize; - /// Maximum size of superblock in bytes - public readonly uint d_sbsize; - /// Partitions - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)] - public readonly BSDPartition[] d_partitions; - } - - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct BSDPartition - { - /// Sectors in partition - public readonly uint p_size; - /// Starting sector - public readonly uint p_offset; - /// Fragment size - public readonly uint p_fsize; - /// Filesystem type, - public readonly fsType p_fstype; - /// Fragment size - public readonly byte p_frag; - /// Cylinder per group - public readonly ushort p_cpg; - } +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/DEC.cs b/Aaru.Partitions/DEC.cs index 35c79bfde..34b913246 100644 --- a/Aaru.Partitions/DEC.cs +++ b/Aaru.Partitions/DEC.cs @@ -47,10 +47,14 @@ public sealed class DEC : IPartition const int PT_MAGIC = 0x032957; const int PT_VALID = 1; +#region IPartition Members + /// public string Name => Localization.DEC_Name; + /// public Guid Id => new("58CEC3B7-3B93-4D47-86EE-D6DADE9D444F"); + /// public string Author => Authors.NataliaPortillo; @@ -93,6 +97,10 @@ public sealed class DEC : IPartition return true; } +#endregion + +#region Nested type: Label + [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct Label { @@ -104,10 +112,16 @@ public sealed class DEC : IPartition public readonly Partition[] pt_part; } +#endregion + +#region Nested type: Partition + [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct Partition { public readonly int pi_nblocks; public readonly uint pi_blkoff; } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/DragonFlyBSD.cs b/Aaru.Partitions/DragonFlyBSD.cs index 6e1a26016..2a435622a 100644 --- a/Aaru.Partitions/DragonFlyBSD.cs +++ b/Aaru.Partitions/DragonFlyBSD.cs @@ -48,10 +48,14 @@ public sealed class DragonFlyBSD : IPartition { const uint DISK_MAGIC64 = 0xC4464C59; +#region IPartition Members + /// public string Name => Localization.DragonFlyBSD_Name; + /// public Guid Id => new("D49E41A6-D952-4760-9D94-03DAE2450C5F"); + /// public string Author => Authors.NataliaPortillo; @@ -84,14 +88,15 @@ public sealed class DragonFlyBSD : IPartition { var part = new Partition { - Start = (entry.p_boffset / imagePlugin.Info.SectorSize) + sectorOffset, - Offset = entry.p_boffset + (sectorOffset * imagePlugin.Info.SectorSize), + Start = entry.p_boffset / imagePlugin.Info.SectorSize + sectorOffset, + Offset = entry.p_boffset + sectorOffset * imagePlugin.Info.SectorSize, Size = entry.p_bsize, Length = entry.p_bsize / imagePlugin.Info.SectorSize, Name = entry.p_stor_uuid.ToString(), Sequence = counter, Scheme = Name, - Type = (BSD.fsType)entry.p_fstype == BSD.fsType.Other ? entry.p_type_uuid.ToString() + Type = (BSD.fsType)entry.p_fstype == BSD.fsType.Other + ? entry.p_type_uuid.ToString() : BSD.FSTypeToString((BSD.fsType)entry.p_fstype) }; @@ -109,6 +114,10 @@ public sealed class DragonFlyBSD : IPartition return true; } +#endregion + +#region Nested type: Disklabel64 + [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct Disklabel64 { @@ -132,6 +141,10 @@ public sealed class DragonFlyBSD : IPartition public readonly Partition64[] d_partitions; } +#endregion + +#region Nested type: Partition64 + [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct Partition64 { @@ -147,4 +160,6 @@ public sealed class DragonFlyBSD : IPartition public readonly Guid p_type_uuid; public readonly Guid p_stor_uuid; } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/GPT.cs b/Aaru.Partitions/GPT.cs index cf35e23fc..8b0a991a6 100644 --- a/Aaru.Partitions/GPT.cs +++ b/Aaru.Partitions/GPT.cs @@ -52,10 +52,14 @@ public sealed class GuidPartitionTable : IPartition const uint GPT_REVISION1 = 0x00010000; const string MODULE_NAME = "GUID Partition Table (GPT) Plugin"; +#region IPartition Members + /// public string Name => Localization.GuidPartitionTable_Name; + /// public Guid Id => new("CBC9D281-C1D0-44E8-9038-4D66FD2678AB"); + /// public string Author => Authors.NataliaPortillo; @@ -74,12 +78,13 @@ public sealed class GuidPartitionTable : IPartition Header hdr; - ulong signature = BitConverter.ToUInt64(hdrBytes, 0); - bool misaligned = false; + var signature = BitConverter.ToUInt64(hdrBytes, 0); + var misaligned = false; AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.signature = 0x{0:X16}", signature); if(signature != GPT_MAGIC) + { if(imagePlugin.Info.MetadataMediaType == MetadataMediaType.OpticalDisc) { errno = imagePlugin.ReadSector(sectorOffset, out hdrBytes); @@ -93,7 +98,7 @@ public sealed class GuidPartitionTable : IPartition if(signature == GPT_MAGIC) { AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Found_unaligned_signature, signature); - byte[] real = new byte[512]; + var real = new byte[512]; Array.Copy(hdrBytes, 512, real, 0, 512); hdrBytes = real; misaligned = true; @@ -103,6 +108,7 @@ public sealed class GuidPartitionTable : IPartition } else return false; + } try { @@ -113,18 +119,18 @@ public sealed class GuidPartitionTable : IPartition return false; } - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.revision = 0x{0:X8}", hdr.revision); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.headerSize = {0}", hdr.headerSize); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.headerCrc = 0x{0:X8}", hdr.headerCrc); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.reserved = 0x{0:X8}", hdr.reserved); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.myLBA = {0}", hdr.myLBA); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.alternateLBA = {0}", hdr.alternateLBA); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.firstUsableLBA = {0}", hdr.firstUsableLBA); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.lastUsableLBA = {0}", hdr.lastUsableLBA); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.diskGuid = {0}", hdr.diskGuid); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entryLBA = {0}", hdr.entryLBA); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entries = {0}", hdr.entries); - AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entriesSize = {0}", hdr.entriesSize); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.revision = 0x{0:X8}", hdr.revision); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.headerSize = {0}", hdr.headerSize); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.headerCrc = 0x{0:X8}", hdr.headerCrc); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.reserved = 0x{0:X8}", hdr.reserved); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.myLBA = {0}", hdr.myLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.alternateLBA = {0}", hdr.alternateLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.firstUsableLBA = {0}", hdr.firstUsableLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.lastUsableLBA = {0}", hdr.lastUsableLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.diskGuid = {0}", hdr.diskGuid); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entryLBA = {0}", hdr.entryLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entries = {0}", hdr.entries); + AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entriesSize = {0}", hdr.entriesSize); AaruConsole.DebugWriteLine(MODULE_NAME, "hdr.entriesCrc = 0x{0:X8}", hdr.entriesCrc); if(hdr.signature != GPT_MAGIC) @@ -158,24 +164,24 @@ public sealed class GuidPartitionTable : IPartition if(errno != ErrorNumber.NoError) return false; - byte[] entriesBytes = new byte[temp.Length - (modulo * 512)]; + var entriesBytes = new byte[temp.Length - modulo * 512]; Array.Copy(temp, modulo * 512, entriesBytes, 0, entriesBytes.Length); List entries = new(); - for(int i = 0; i < hdr.entries; i++) + for(var i = 0; i < hdr.entries; i++) { try { - byte[] entryBytes = new byte[hdr.entriesSize]; + var entryBytes = new byte[hdr.entriesSize]; Array.Copy(entriesBytes, hdr.entriesSize * i, entryBytes, 0, hdr.entriesSize); entries.Add(Marshal.ByteArrayToStructureLittleEndian(entryBytes)); } - #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body + #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body catch { // ignored } - #pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body + #pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body } if(entries.Count == 0) @@ -186,12 +192,12 @@ public sealed class GuidPartitionTable : IPartition foreach(Entry entry in entries.Where(entry => entry.partitionType != Guid.Empty && entry.partitionId != Guid.Empty)) { - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.partitionType = {0}", entry.partitionType); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.partitionId = {0}", entry.partitionId); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.startLBA = {0}", entry.startLBA); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.endLBA = {0}", entry.endLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.partitionType = {0}", entry.partitionType); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.partitionId = {0}", entry.partitionId); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.startLBA = {0}", entry.startLBA); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.endLBA = {0}", entry.endLBA); AaruConsole.DebugWriteLine(MODULE_NAME, "entry.attributes = 0x{0:X16}", entry.attributes); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.name = {0}", entry.name); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.name = {0}", entry.name); if(entry.startLBA / divisor > imagePlugin.Info.Sectors || entry.endLBA / divisor > imagePlugin.Info.Sectors) @@ -217,115 +223,231 @@ public sealed class GuidPartitionTable : IPartition return true; } +#endregion + static string GetGuidTypeName(Guid type) { string strType = type.ToString().ToUpperInvariant(); switch(strType) { - case "024DEE41-33E7-11D3-9D69-0008C781F39F": return Localization.MBR_scheme; - case "C12A7328-F81F-11D2-BA4B-00A0C93EC93B": return Localization.EFI_System; - case "21686148-6449-6E6F-744E-656564454649": return Localization.BIOS_Boot; - case "D3BFE2DE-3DAF-11DF-BA40-E3A556D89593": return Localization.Intel_Fast_Flash_iFFS; - case "F4019732-066E-4E12-8273-346C5641494F": return Localization.Sony_boot; - case "BFBFAFE7-A34F-448A-9A5B-6213EB736C22": return Localization.Lenovo_boot; - case "E3C9E316-0B5C-4DB8-817D-F92DF00215AE": return Localization.Microsoft_Reserved_MSR; - case "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7": return Localization.Microsoft_Basic_data; - case "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3": return Localization.Logical_Disk_Manager_LDM_metadata; - case "AF9B60A0-1431-4F62-BC68-3311714A69AD": return Localization.Logical_Disk_Manager_data; - case "DE94BBA4-06D1-4D40-A16A-BFD50179D6AC": return Localization.Windows_Recovery_Environment; - case "37AFFC90-EF7D-4E96-91C3-2D7AE055B174": return Localization.IBM_General_Parallel_File_System_GPFS; - case "E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D": return Localization.Windows_Storage_Spaces; - case "75894C1E-3AEB-11D3-B7C1-7B03A0000000": return Localization.HP_UX_Data; - case "E2A1E728-32E3-11D6-A682-7B03A0000000": return Localization.HP_UX_Service; - case "0FC63DAF-8483-4772-8E79-3D69D8477DE4": return Localization.Linux_filesystem; - case "A19D880F-05FC-4D3B-A006-743F0F84911E": return Localization.Linux_RAID; - case "44479540-F297-41B2-9AF7-D131D5F0458A": return Localization.Linux_Root_x86; - case "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709": return Localization.Linux_Root_x86_64; - case "69DAD710-2CE4-4E3C-B16C-21A1D49ABED3": return Localization.Linux_Root_32_bit_ARM; - case "B921B045-1DF0-41C3-AF44-4C6F280D3FAE": return Localization.Linux_Root_AArch64; - case "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F": return Localization.Linux_swap; - case "E6D6D379-F507-44C2-A23C-238F2A3DF928": return Localization.Logical_Volume_Manager_LVM; - case "933AC7E1-2EB4-4F13-B844-0E14E2AEF915": return Localization.Linux_home; - case "3B8F8425-20E0-4F3B-907F-1A25A76F98E8": return Localization.Linux_srv; - case "7FFEC5C9-2D00-49B7-8941-3EA10A5586B7": return Localization.Plain_dm_crypt; - case "CA7D7CCB-63ED-4C53-861C-1742536059CC": return Localization.LUKS; - case "8DA63339-0007-60C0-C436-083AC8230908": return Localization.Linux_Reserved; - case "83BD6B9D-7F41-11DC-BE0B-001560B84F0F": return Localization.FreeBSD_Boot; - case "516E7CB4-6ECF-11D6-8FF8-00022D09712B": return Localization.FreeBSD_Data; - case "516E7CB5-6ECF-11D6-8FF8-00022D09712B": return Localization.FreeBSD_swap; - case "516E7CB6-6ECF-11D6-8FF8-00022D09712B": return Localization.FreeBSD_UFS; - case "516E7CB7-6ECF-11D6-8FF8-00022D09712B": return Localization.FreeBSD_UFS2; - case "516E7CB8-6ECF-11D6-8FF8-00022D09712B": return Localization.FreeBSD_Vinum; - case "516E7CBA-6ECF-11D6-8FF8-00022D09712B": return Localization.FreeBSD_ZFS; - case "74BA7DD9-A689-11E1-BD04-00E081286ACF": return Localization.FreeBSD_nandfs; - case "48465300-0000-11AA-AA11-00306543ECAC": return Localization.Apple_HFS; - case "55465300-0000-11AA-AA11-00306543ECAC": return Localization.Apple_UFS; - case "52414944-0000-11AA-AA11-00306543ECAC": return Localization.Apple_RAID; - case "52414944-5F4F-11AA-AA11-00306543ECAC": return Localization.Apple_RAID_offline; - case "426F6F74-0000-11AA-AA11-00306543ECAC": return Localization.Apple_Boot; - case "4C616265-6C00-11AA-AA11-00306543ECAC": return Localization.Apple_Label; - case "5265636F-7665-11AA-AA11-00306543ECAC": return Localization.Apple_TV_Recovery; - case "53746F72-6167-11AA-AA11-00306543ECAC": return Localization.Apple_Core_Storage; - case "6A82CB45-1DD2-11B2-99A6-080020736631": return Localization.Solaris_boot; - case "6A85CF4D-1DD2-11B2-99A6-080020736631": return Localization.Solaris_Root; - case "6A87C46F-1DD2-11B2-99A6-080020736631": return Localization.Solaris_Swap; - case "6A8B642B-1DD2-11B2-99A6-080020736631": return Localization.Solaris_Backup; - case "6A898CC3-1DD2-11B2-99A6-080020736631": return Localization.Solaris_usr_or_Apple_ZFS; - case "6A8EF2E9-1DD2-11B2-99A6-080020736631": return Localization.Solaris_var; - case "6A90BA39-1DD2-11B2-99A6-080020736631": return Localization.Solaris_home; - case "6A9283A5-1DD2-11B2-99A6-080020736631": return Localization.Solaris_Alternate_sector; + case "024DEE41-33E7-11D3-9D69-0008C781F39F": + return Localization.MBR_scheme; + case "C12A7328-F81F-11D2-BA4B-00A0C93EC93B": + return Localization.EFI_System; + case "21686148-6449-6E6F-744E-656564454649": + return Localization.BIOS_Boot; + case "D3BFE2DE-3DAF-11DF-BA40-E3A556D89593": + return Localization.Intel_Fast_Flash_iFFS; + case "F4019732-066E-4E12-8273-346C5641494F": + return Localization.Sony_boot; + case "BFBFAFE7-A34F-448A-9A5B-6213EB736C22": + return Localization.Lenovo_boot; + case "E3C9E316-0B5C-4DB8-817D-F92DF00215AE": + return Localization.Microsoft_Reserved_MSR; + case "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7": + return Localization.Microsoft_Basic_data; + case "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3": + return Localization.Logical_Disk_Manager_LDM_metadata; + case "AF9B60A0-1431-4F62-BC68-3311714A69AD": + return Localization.Logical_Disk_Manager_data; + case "DE94BBA4-06D1-4D40-A16A-BFD50179D6AC": + return Localization.Windows_Recovery_Environment; + case "37AFFC90-EF7D-4E96-91C3-2D7AE055B174": + return Localization.IBM_General_Parallel_File_System_GPFS; + case "E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D": + return Localization.Windows_Storage_Spaces; + case "75894C1E-3AEB-11D3-B7C1-7B03A0000000": + return Localization.HP_UX_Data; + case "E2A1E728-32E3-11D6-A682-7B03A0000000": + return Localization.HP_UX_Service; + case "0FC63DAF-8483-4772-8E79-3D69D8477DE4": + return Localization.Linux_filesystem; + case "A19D880F-05FC-4D3B-A006-743F0F84911E": + return Localization.Linux_RAID; + case "44479540-F297-41B2-9AF7-D131D5F0458A": + return Localization.Linux_Root_x86; + case "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709": + return Localization.Linux_Root_x86_64; + case "69DAD710-2CE4-4E3C-B16C-21A1D49ABED3": + return Localization.Linux_Root_32_bit_ARM; + case "B921B045-1DF0-41C3-AF44-4C6F280D3FAE": + return Localization.Linux_Root_AArch64; + case "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F": + return Localization.Linux_swap; + case "E6D6D379-F507-44C2-A23C-238F2A3DF928": + return Localization.Logical_Volume_Manager_LVM; + case "933AC7E1-2EB4-4F13-B844-0E14E2AEF915": + return Localization.Linux_home; + case "3B8F8425-20E0-4F3B-907F-1A25A76F98E8": + return Localization.Linux_srv; + case "7FFEC5C9-2D00-49B7-8941-3EA10A5586B7": + return Localization.Plain_dm_crypt; + case "CA7D7CCB-63ED-4C53-861C-1742536059CC": + return Localization.LUKS; + case "8DA63339-0007-60C0-C436-083AC8230908": + return Localization.Linux_Reserved; + case "83BD6B9D-7F41-11DC-BE0B-001560B84F0F": + return Localization.FreeBSD_Boot; + case "516E7CB4-6ECF-11D6-8FF8-00022D09712B": + return Localization.FreeBSD_Data; + case "516E7CB5-6ECF-11D6-8FF8-00022D09712B": + return Localization.FreeBSD_swap; + case "516E7CB6-6ECF-11D6-8FF8-00022D09712B": + return Localization.FreeBSD_UFS; + case "516E7CB7-6ECF-11D6-8FF8-00022D09712B": + return Localization.FreeBSD_UFS2; + case "516E7CB8-6ECF-11D6-8FF8-00022D09712B": + return Localization.FreeBSD_Vinum; + case "516E7CBA-6ECF-11D6-8FF8-00022D09712B": + return Localization.FreeBSD_ZFS; + case "74BA7DD9-A689-11E1-BD04-00E081286ACF": + return Localization.FreeBSD_nandfs; + case "48465300-0000-11AA-AA11-00306543ECAC": + return Localization.Apple_HFS; + case "55465300-0000-11AA-AA11-00306543ECAC": + return Localization.Apple_UFS; + case "52414944-0000-11AA-AA11-00306543ECAC": + return Localization.Apple_RAID; + case "52414944-5F4F-11AA-AA11-00306543ECAC": + return Localization.Apple_RAID_offline; + case "426F6F74-0000-11AA-AA11-00306543ECAC": + return Localization.Apple_Boot; + case "4C616265-6C00-11AA-AA11-00306543ECAC": + return Localization.Apple_Label; + case "5265636F-7665-11AA-AA11-00306543ECAC": + return Localization.Apple_TV_Recovery; + case "53746F72-6167-11AA-AA11-00306543ECAC": + return Localization.Apple_Core_Storage; + case "6A82CB45-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_boot; + case "6A85CF4D-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_Root; + case "6A87C46F-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_Swap; + case "6A8B642B-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_Backup; + case "6A898CC3-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_usr_or_Apple_ZFS; + case "6A8EF2E9-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_var; + case "6A90BA39-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_home; + case "6A9283A5-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_Alternate_sector; case "6A945A3B-1DD2-11B2-99A6-080020736631": case "6A9630D1-1DD2-11B2-99A6-080020736631": case "6A980767-1DD2-11B2-99A6-080020736631": case "6A96237F-1DD2-11B2-99A6-080020736631": - case "6A8D2AC7-1DD2-11B2-99A6-080020736631": return Localization.Solaris_Reserved; - case "49F48D32-B10E-11DC-B99B-0019D1879648": return Localization.NetBSD_Swap; - case "49F48D5A-B10E-11DC-B99B-0019D1879648": return Localization.NetBSD_FFS; - case "49F48D82-B10E-11DC-B99B-0019D1879648": return Localization.NetBSD_LFS; - case "49F48DAA-B10E-11DC-B99B-0019D1879648": return Localization.NetBSD_RAID; - case "2DB519C4-B10F-11DC-B99B-0019D1879648": return Localization.NetBSD_Concatenated; - case "2DB519EC-B10F-11DC-B99B-0019D1879648": return Localization.NetBSD_Encrypted; - case "FE3A2A5D-4F32-41A7-B725-ACCC3285A309": return Localization.ChromeOS_kernel; - case "3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC": return Localization.ChromeOS_rootfs; - case "2E0A753D-9E48-43B0-8337-B15192CB1B5E": return Localization.ChromeOS_future_use; - case "42465331-3BA3-10F1-802A-4861696B7521": return Localization.Haiku_BFS; - case "85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7": return Localization.MidnightBSD_Boot; - case "85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7": return Localization.MidnightBSD_Data; - case "85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7": return Localization.MidnightBSD_Swap; - case "0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7": return Localization.MidnightBSD_UFS; - case "85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7": return Localization.MidnightBSD_Vinum; - case "85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7": return Localization.MidnightBSD_ZFS; - case "45B0969E-9B03-4F30-B4C6-B4B80CEFF106": return Localization.Ceph_Journal; - case "45B0969E-9B03-4F30-B4C6-5EC00CEFF106": return Localization.Ceph_dm_crypt_Encrypted_Journal; - case "4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D": return Localization.Ceph_OSD; - case "4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D": return Localization.Ceph_dm_crypt_OSD; - case "89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE": return Localization.Ceph_disk_in_creation; - case "89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE": return Localization.Ceph_dm_crypt_disk_in_creation; - case "824CC7A0-36A8-11E3-890A-952519AD3F61": return Localization.OpenBSD_Data; - case "CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1": return Localization.QNX_Power_safe_QNX6; - case "C91818F9-8025-47AF-89D2-F030D7000C2C": return Localization.Plan_9; - case "9D275380-40AD-11DB-BF97-000C2911D1B8": return Localization.VMware_vmkcore_coredump; - case "AA31E02A-400F-11DB-9590-000C2911D1B8": return Localization.VMware_VMFS; - case "9198EFFC-31C0-11DB-8F78-000C2911D1B8": return Localization.VMware_Reserved; - case "7412F7D5-A156-4B13-81DC-867174929325": return Localization.ONIE_boot; - case "D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149": return Localization.ONIE_config; - case "9E1A2D38-C612-4316-AA26-8B49521E5A8B": return Localization.PowerPC_PReP_boot; - case "0311FC50-01CA-4725-AD77-9ADBB20ACE98": return Localization.Acronis_Secure_Zone; - case "7C3457EF-0000-11AA-AA11-00306543ECAC": return Localization.Apple_File_System; - case "9D087404-1CA5-11DC-8817-01301BB8A9F5": return Localization.DragonflyBSD_Label; - case "9D58FDBD-1CA5-11DC-8817-01301BB8A9F5": return Localization.DragonflyBSD_Swap; - case "9D94CE7C-1CA5-11DC-8817-01301BB8A9F5": return Localization.DragonflyBSD_UFS; - case "9DD4478F-1CA5-11DC-8817-01301BB8A9F5": return Localization.DragonflyBSD_Vinum; - case "DBD5211B-1CA5-11DC-8817-01301BB8A9F5": return Localization.DragonflyBSD_CCD; - case "3D48CE54-1D16-11DC-8817-01301BB8A9F5": return Localization.DragonflyBSD_Label; - case "BD215AB2-1D16-11DC-8696-01301BB8A9F5": return Localization.DragonflyBSD_Legacy; - case "61DC63AC-6E38-11DC-8513-01301BB8A9F5": return Localization.DragonflyBSD_Hammer; - case "5CBB9AD1-862D-11DC-A94D-01301BB8A9F5": return Localization.DragonflyBSD_Hammer2; - default: return ""; + case "6A8D2AC7-1DD2-11B2-99A6-080020736631": + return Localization.Solaris_Reserved; + case "49F48D32-B10E-11DC-B99B-0019D1879648": + return Localization.NetBSD_Swap; + case "49F48D5A-B10E-11DC-B99B-0019D1879648": + return Localization.NetBSD_FFS; + case "49F48D82-B10E-11DC-B99B-0019D1879648": + return Localization.NetBSD_LFS; + case "49F48DAA-B10E-11DC-B99B-0019D1879648": + return Localization.NetBSD_RAID; + case "2DB519C4-B10F-11DC-B99B-0019D1879648": + return Localization.NetBSD_Concatenated; + case "2DB519EC-B10F-11DC-B99B-0019D1879648": + return Localization.NetBSD_Encrypted; + case "FE3A2A5D-4F32-41A7-B725-ACCC3285A309": + return Localization.ChromeOS_kernel; + case "3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC": + return Localization.ChromeOS_rootfs; + case "2E0A753D-9E48-43B0-8337-B15192CB1B5E": + return Localization.ChromeOS_future_use; + case "42465331-3BA3-10F1-802A-4861696B7521": + return Localization.Haiku_BFS; + case "85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7": + return Localization.MidnightBSD_Boot; + case "85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7": + return Localization.MidnightBSD_Data; + case "85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7": + return Localization.MidnightBSD_Swap; + case "0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7": + return Localization.MidnightBSD_UFS; + case "85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7": + return Localization.MidnightBSD_Vinum; + case "85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7": + return Localization.MidnightBSD_ZFS; + case "45B0969E-9B03-4F30-B4C6-B4B80CEFF106": + return Localization.Ceph_Journal; + case "45B0969E-9B03-4F30-B4C6-5EC00CEFF106": + return Localization.Ceph_dm_crypt_Encrypted_Journal; + case "4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D": + return Localization.Ceph_OSD; + case "4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D": + return Localization.Ceph_dm_crypt_OSD; + case "89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE": + return Localization.Ceph_disk_in_creation; + case "89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE": + return Localization.Ceph_dm_crypt_disk_in_creation; + case "824CC7A0-36A8-11E3-890A-952519AD3F61": + return Localization.OpenBSD_Data; + case "CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1": + return Localization.QNX_Power_safe_QNX6; + case "C91818F9-8025-47AF-89D2-F030D7000C2C": + return Localization.Plan_9; + case "9D275380-40AD-11DB-BF97-000C2911D1B8": + return Localization.VMware_vmkcore_coredump; + case "AA31E02A-400F-11DB-9590-000C2911D1B8": + return Localization.VMware_VMFS; + case "9198EFFC-31C0-11DB-8F78-000C2911D1B8": + return Localization.VMware_Reserved; + case "7412F7D5-A156-4B13-81DC-867174929325": + return Localization.ONIE_boot; + case "D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149": + return Localization.ONIE_config; + case "9E1A2D38-C612-4316-AA26-8B49521E5A8B": + return Localization.PowerPC_PReP_boot; + case "0311FC50-01CA-4725-AD77-9ADBB20ACE98": + return Localization.Acronis_Secure_Zone; + case "7C3457EF-0000-11AA-AA11-00306543ECAC": + return Localization.Apple_File_System; + case "9D087404-1CA5-11DC-8817-01301BB8A9F5": + return Localization.DragonflyBSD_Label; + case "9D58FDBD-1CA5-11DC-8817-01301BB8A9F5": + return Localization.DragonflyBSD_Swap; + case "9D94CE7C-1CA5-11DC-8817-01301BB8A9F5": + return Localization.DragonflyBSD_UFS; + case "9DD4478F-1CA5-11DC-8817-01301BB8A9F5": + return Localization.DragonflyBSD_Vinum; + case "DBD5211B-1CA5-11DC-8817-01301BB8A9F5": + return Localization.DragonflyBSD_CCD; + case "3D48CE54-1D16-11DC-8817-01301BB8A9F5": + return Localization.DragonflyBSD_Label; + case "BD215AB2-1D16-11DC-8696-01301BB8A9F5": + return Localization.DragonflyBSD_Legacy; + case "61DC63AC-6E38-11DC-8513-01301BB8A9F5": + return Localization.DragonflyBSD_Hammer; + case "5CBB9AD1-862D-11DC-A94D-01301BB8A9F5": + return Localization.DragonflyBSD_Hammer2; + default: + return ""; } } +#region Nested type: Entry + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + struct Entry + { + public readonly Guid partitionType; + public readonly Guid partitionId; + public readonly ulong startLBA; + public readonly ulong endLBA; + public readonly ulong attributes; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)] + public readonly string name; + } + +#endregion + +#region Nested type: Header + [StructLayout(LayoutKind.Sequential)] struct Header { @@ -345,15 +467,5 @@ public sealed class GuidPartitionTable : IPartition public readonly uint entriesCrc; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - struct Entry - { - public readonly Guid partitionType; - public readonly Guid partitionId; - public readonly ulong startLBA; - public readonly ulong endLBA; - public readonly ulong attributes; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)] - public readonly string name; - } +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/Human68k.cs b/Aaru.Partitions/Human68k.cs index 7d356cb3e..cc37131e3 100644 --- a/Aaru.Partitions/Human68k.cs +++ b/Aaru.Partitions/Human68k.cs @@ -51,10 +51,14 @@ public sealed class Human68K : IPartition const uint X68K_MAGIC = 0x5836384B; const string MODULE_NAME = "Human68k partitions plugin"; +#region IPartition Members + /// public string Name => Localization.Human68K_Name; + /// public Guid Id => new("246A6D93-4F1A-1F8A-344D-50187A5513A9"); + /// public string Author => Authors.NataliaPortillo; @@ -89,7 +93,8 @@ public sealed class Human68K : IPartition sectsPerUnit = 1; break; - default: return false; + default: + return false; } if(errno != ErrorNumber.NoError) @@ -102,11 +107,11 @@ public sealed class Human68K : IPartition if(table.magic != X68K_MAGIC) return false; - for(int i = 0; i < table.entries.Length; i++) + for(var i = 0; i < table.entries.Length; i++) table.entries[i] = (Entry)Marshal.SwapStructureMembersEndian(table.entries[i]); - AaruConsole.DebugWriteLine(MODULE_NAME, "table.size = {0:X4}", table.size); - AaruConsole.DebugWriteLine(MODULE_NAME, "table.size2 = {0:X4}", table.size2); + AaruConsole.DebugWriteLine(MODULE_NAME, "table.size = {0:X4}", table.size); + AaruConsole.DebugWriteLine(MODULE_NAME, "table.size2 = {0:X4}", table.size2); AaruConsole.DebugWriteLine(MODULE_NAME, "table.unknown = {0:X4}", table.unknown); ulong counter = 0; @@ -117,7 +122,7 @@ public sealed class Human68K : IPartition StringHandlers.CToString(entry.name, Encoding.GetEncoding(932))); AaruConsole.DebugWriteLine(MODULE_NAME, "entry.stateStart = {0}", entry.stateStart); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.length = {0}", entry.length); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.length = {0}", entry.length); AaruConsole.DebugWriteLine(MODULE_NAME, "sectsPerUnit = {0} {1}", sectsPerUnit, imagePlugin.Info.SectorSize); @@ -144,6 +149,23 @@ public sealed class Human68K : IPartition return true; } +#endregion + +#region Nested type: Entry + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + readonly struct Entry + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public readonly byte[] name; + public readonly uint stateStart; + public readonly uint length; + } + +#endregion + +#region Nested type: Table + [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct Table { @@ -155,12 +177,5 @@ public sealed class Human68K : IPartition public readonly Entry[] entries; } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct Entry - { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] - public readonly byte[] name; - public readonly uint stateStart; - public readonly uint length; - } +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/Localization/Localization.es.resx b/Aaru.Partitions/Localization/Localization.es.resx index ae666a63a..7f7b317f8 100644 --- a/Aaru.Partitions/Localization/Localization.es.resx +++ b/Aaru.Partitions/Localization/Localization.es.resx @@ -1,1411 +1,1411 @@ - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Particiones de Acorn FileCore - + Zona Segura de Acronis - + Arranque de AIX, OS/2 o Commodore DOS - + Datos de AIX, Coherent o QNX - + Sistema de ficheros ligero ALFS/THIN para DOS - + (mapeo alternativo de sectores) - + Espacio alternativo de sectores - + Sector alternativo de pista - + Espacio alternativo de pista - + Bloque de Disco Rígido (RDB) de Amiga - + Sistema de Ficheros Rápido de Amiga - + Sistema de Ficheros Rápido de Amiga con caché de directorio - + Sistema de Ficheros Rápido de Amiga con caché de directorio y parches multi-usuario - + Sistema de Ficheros Rápido de Amiga con caracteres internacionales - + Sistema de Ficheros Rápido de Amiga con caracteres internacionales y parches multi-usuario - + Sistema de Ficheros Rápido de Amiga con nombres de fichero largos - + Sistema de Ficheros Rápido de Amiga con parches multi-usuario - + Amiga FFS - + Sistema de Ficheros Original de Amiga - + Sistema de Ficheros Original de Amiga con caché de directorio - + Sistema de Ficheros Original de Amiga con caché de directorio y parches multi-usuario - + Sistema de Ficheros Original de Amiga con caracteres internacionales - + Sistema de Ficheros Original de Amiga con caracteres internacionales y parches multi-usuario - + Sistema de Ficheros Original de Amiga con parches multi-usuario - + Sistema de Ficheros Original de Amiga con nombres de fichero largos - + Sistema de ficheros de arranque de Amiga UNIX - + Sistema de ficheros BSD de Amiga UNIX - + Partición reservada (intercambio) de Amiga UNIX - + Sistema de ficheros System V de Amiga UNIX - + Bloques dañados de Amoeba - + Amoeba u oculta de Linux - + Mapa de Particiones de Apple (APM) - + Arranque de Apple - + Apple Core Storage - + Sistema de ficheros Apple (APFS) - + Apple HFS - + Etiqueta Apple - + RAID de Apple - + RAID de Apple, fuera de línea - + Recuperación de Apple TV - + Apple UFS - + Apricto F1 ROM BIOS - + Particiones de ACT Apricot - + Apricot Portable ROM BIOS - + Apricot & XI RAM BIOS - + Apricot & XI ROM BIOS - + Intercambio de AST-Windows - + Particiones de Atari - + Partición de Atari GEMDOS - + Partición de Atari GEMDOS de más de 32 MiB - + Partición de Atari UNIX - + dañado - + Bloque dañado en {0} reemplazado por bloque correcto en {1} - + fichero de sectores dañados - + BeOS - + Arranque de BIOS - + Arranque - + EMBRM de BootIt - + BootStar - + Checksum del código de arranque: 0x{0:X8} - + SHA1 del código de arranque: {0} - + Punto de entrada del arranque: 0x{0:X8} - + El arranque ocupa {0} bytes. - + Dirección de carga del arranque: 0x{0:X8} - + BSDi - + BSD 4.2 FFS - + BSD 4.4 LFS - + Añadiéndola... - + dl.magic en el sector {0} posición {1} = 0x{2:X8} (se esperaba 0x{3:X8}) - + Etiqueta de disco de BSD - + BSD/OS - + Intercambio de BSD - + Sin usar de BSD - + Caché - + No se pudo encontrar la VTOC. - + Disco Ceph en creación - + Disco dm-crypt de Ceph en creación - + Registro Encriptado dm-crypt de Ceph - + OSD dm-crypt de Ceph - + Registro de Ceph - + OSD de Ceph - + Para uso futuro de ChromeOS - + Núclero de ChromeOS - + Raíz de ChromeOS - + Intercambio de Coheren, OPUS o Gestor de Arranque de OS/2 - + Diagnósticos de Compaq, partición de recuperación - + Disco concatenado - + Volumen de contenido - + CP/M - + CP/M, CCP/M o CTOS - + CP/M o Microport UNIX - + creado el {0} - + Recordando el final de la última partición ({0}) al tamaño del medio ({1}) - + Volumen de panel - + datos - + Volumen de datos - + Etiqueta de disco de DEC - + Partición de Dell - + Sistema de ficheros avanzado (AFS) de Digital - + Región privada de LSM de Digital - + Región pública de LSM de Digital - + Disco simple de LSM de Digital - + Multi-arranque de DiskSecure - + Secundaria de DOS 3.3 o Unisys DOS - + Sólo lectura de DOS - + DragonFly BSD CCD - + DragonFly BSD Hammer - + DragonFly BSD Hammer2 - + Etiqueta de DragonFly BSD - + Antigua de DragonFly BSD - + Etiqueta de 64-bits de DragonFly BSD - + Intercambio de DragonFly BSD - + DragonFly BSD UFS - + DragonFly BSD Vinum - + Reservada de DR-DOS - + Extendida segura (LBA) de DR-DOS - + FAT12 segura de DR-DOS - + FAT16 segura de DR-DOS - + FAT16 menor de 32 MiB segura de DR-DOS - + FAT16 (LBA) segura de DR-DOS - + FAT32 segura de DR-DOS - + FAT32 (LBA) segura de DR-DOS - + volcado - + dvh.magic = 0x{0:X8} (debería ser 0x{1:X8}) - + Sistema EFI - + Partición de sistema EFI - + EFS - + Vacía - + registro de errores - + registro de errores - + EUMEL/Elan - + Par - + Extendida - + Extendida (LBA) - + EZ-Drive - + FAT - + FAT12 - + FAT16 - + FAT16 menor de 32 MiB - + FAT16 (LBA) - + FAT32 - + FAT32 (LBA) - + FAT, establecida por CrossDOS - + FileCore - + Datos sin sistema de ficheros - + El sistema de ficheros debería montarse automáticamente - + El sistema de ficheros debería formatearse al inicio - + Primer sector de arranque: {0} - + Se encontró entrada alineada. - + Encontrado bloque BadBlock - + Encontrado bloque FileSystemHeader - + Encontrado bloque LoadSegment - + Se encontró entrada no alineada. - + Encontrado bloque PartitionEntry - + Encontrado mágica de RDB en el bloque {0} - + Encontrada firma no alineada - + FreeBSD - + Arranque de FreeBSD - + Datos de FreeBSD - + FreeBSD nandfs - + Intercambio de FreeBSD - + FreeBSD UFS - + FreeBSD UFS2 - + FreeBSD Vinum - + FreeBSD ZFS - + Caché de juegos - + ROM BIOS genérica - + GNU Hurd, System V o 386/ix - + Yendo al bloque {0} en búsqueda del bloque BadBlock - + Yendo al bloque {0} en búsqueda del bloque FileSystemHeader - + Yendo al bloque {0} en búsqueda del bloque LoadSegment - + Yendo al bloque {0} en búsqueda del bloque PartitionEntry - + Yendo a leer {0} sectores desde el {1}, obteniendo VTOC del byte {2} - + Yendo a leer más allá del tamaño del dispositivo, abortando... - + Golden Bow VFeature - + Tabla de particiones GUID (GPT) - + Tabla de particiones GUID (GPT) - + BFS de Haiku - + Hammer - + Hammer2 - + HFS, establecida por CrossMac - + Hibernación - + Oculta de OS/2 o hibernación de APM - + FAT12 oculta - + FAT16 oculta - + FAT16 menor de 32 MiB oculta o AST-DOS - + FAT16 (LBA) oculta - + FAT32 oculta - + FAT32 (LBA) oculta - + IFS (HPFS/NTFS) oculto - + Oculta de NetWare - + NTFS oculta - + HPFS - + Datos de HP-UX - + Servicio de HP-US - + Expansión de volumen HP - + Particiones de Human 68k - + Sistema de ficheros general paralelo (GPFS) de IBM - + IBM JFS2 - + IBM PC/IX - + IFS (HPFS/NFS) - + Intel Fast Flash (iFFS) - + Inválido - + ISO9660 - + JXFS - + Arranque de Lenovo - + Linux - + Arranque de Linux - + Extendida de Linux - + Sistema de ficheros de Linux - + Partición de sistema de ficheros de Linux - + /home de Linux - + LVM de Linux - + Partición de Linux - + Texto de Linux - + RAID de Linux - + RAID de Linux o FreeBSD - + Reservada de Linux - + Raíz de Linux para ARM de 32-bits - + Raíz de Linux para ARM de 64-bits (AArch64) - + Raíz de Linux para x86 - + Raíz de Linux para x86-64 - + /srv de Linux - + Intercambio de Linux - + Partición de intercambio de Linux - + Intercambio de Linux o Solaris - + SHA1 de los datos de LoadSegment: {0} - + Datos del Gestor de Discos Lógicos (LDM) - + Metadatos del Gestor de Discos Lógicos (LDM) - + Volumen lógico - + Gestor de Volúmenes Lógicos (LVM) - + LUKS - + LVM - + Partición de Macintosh - + mantenimiento - + area de mantenimiento - + Marca - + Registro Maestro de Arranque (MBR) - + Esquema MBR - + MF1DD de 70 pistas - + Datos básicos de Microsoft - + Reservada de Microsoft - + Arranque de MidnightBSD - + Datos de MidnightBSD - + Intercambio de MidnightBSD - + MidnightBSD UFS - + MidnightBSD Vinum - + MidnightBSD ZFS - + MINIX - + MINIX, antigua de Linux - + Partición de MINUX - + Extendida segura de Multiuser DOS - + FAT12 segura de Multiuser DOS - + FAT16 segura de Multiuser DOS - + FAT16 menor de 32 MiB segura de Multiuser DOS - + Mylex EISA SCSI - + N88-BASIC(86) - + NEC-DOS - + NetBSD - + Partición raíz 4.2 FFS de NetBSD - + Partición de usuario 4.2 FFS de NetBSD - + Partición raíz 4.4 LFS de NetBSD - + Partición de usuario 4.4 LFS de NetBSD - + Concatenada de NetBSD - + Encriptada de NetBSD - + NetBSD FFS - + NetBSD LFS - + Partición de NetBSD - + RAID de NetBSD - + Intercambio de NetBSD - + Partición de intercambio de NetBSD - + Partición raíz sin usar de NetBSD - + Partición de usuario sin usar de NetBSD - + NetWare - + NetWare 286 - + NetWare 386 - + NetWare NSS - + VTOC nueva encontrada. - + VTOC nueva encontrada en {0} - + Etiqueta de disco de NeXT - + NeXTStep - + Ninguna - + No arrancable - + no es UNIX - + No se añadirá la partición porque comienza ({0}) más allá del tamaño del medio ({1}) - + Novell DOS o segura de DR-DOS - + NT Stripe Set - + Impar - + Antigua de MINIX - + VTOC antigua encontrada en {0} - + FAT12 de Olivetti DOS - + Arranque de ONIE - + Configuración de ONIE - + Ontrack DM 6 - + Ontrack DM, R/O, FAT - + Ontrack DM, R/W, FAT - + (abierta) - + OpenBSD - + Datos de OpenBSD - + OPUS - + Otra o desconocida - + Extendida de Oxygen - + Oxygen FSo2 - + Paralelo - + La partición es más grande que el dispositivo, reduciendo... - + El código de arranque de la partición es independiente de su posición. - + La entrada de partición está asignada. - + Banderas de la partición: - + La partición es arrancable. - + La partición está en uso. - + La partición es legible. - + La partición es válida. - + La partición es escribile - + Partition Magic - + Partición fechada el {0} - + Tabla de particiones de NEC PC-9800 - + PC-UX - + dm-crypt plano - + Tabla de particiones de Plan9 - + Plan 9 - + Posible mágica 0x{1:X8} en el bloque {0} - + Arranque PReP de PowerPC - + Arranque PReP - + Priam EDISK - + Priam o EUMEL/Elan - + Procesador: {0} - + Sistema de ficheros profesional (PFS) - + Prólogo - + PTS BootWizard - + PTS-DOS - + QNX 4 - + QNX 4 u Oberon - + QNX Power-safe (QNX6) - + Partición RaidFrame - + Datos crudos (intercambio) - + Volumen lógico sin procesar - + Partición RAW - + Sólo lectura - + Sectores de reemplazo - + Reservada - + Reservada para SMI - + Sistema de particiones de Rio Karma - + Rio Karma - + la sanidad en {0} es 0x{1:X8} (debería ser 0x{2:X8} ó 0x{3:X8}) - + Buscando VTOC en el byte relativo {0} - + Reemplazos de sector - + Sistema de Ficheros Seguro - + Sectores de seguridad - + Número de serie - + Cabecera de Volumen del Disco (DVH) de SGI - + SGI XMV - + Sistema de Ficheros Inteligente (SFS) v1 - + Sistema de Ficheros Inteligente (SFS) v2 - + Solaris - + Sector alternative de Solaris - + Respaldo de Solaris - + Arranque de Solaris - + /home de Solaris - + Reservada de Solaris - + Raíz de Solaris - + Intercambio de Solaris - + /usr de Solaris o Apple ZFS - + /var de Solaris - + Arranque de Sony - + Optimizada para espacio - + Espacio - + SpeedStor - + SpeedStor, LANStep o PS/2 IML - + Reservada de SpeedStor - + Spryt*x - + Etiqueta de disco de Sun - + Partición de SunOS - + Arranque de Sun - + cachefs de Sun - + /home de Sun - + Raíz de Sun - + /stand de Sun - + Intercambio de Sun - + /usr de Sun - + /var de Sun - + intercambio - + Girando dk_label - + Girando dk_label16 - + Girando dk_label8 - + Partición de intercambio - + Syrinx - + Caché del sistema - + Volumen del sistema - + Volumen 2 del sistem - + Tandy DOS - + Theos - + Optimizada al tiempo - + Reemplazos de pista - + UDF - + UNIX 6ª Edición - + UNIX 7ª Edición - + UNIX 7ª Edición con bloques de 1K - + UNIX 7ª Edición con bloques de 4K - + UNIX (forzada) - + UNIX System V - + Tipo de sistema de ficheros {0} de Amiga DOS desconocido - + Tipo de sistema de ficheros {0} multi-usuario de Amiga DOS desconocido - + Tipo de sistema de ficheros {0} de Amiga UNIX desconocido - + Desconocido - + Tipo de sistema de ficheros {0} de BSD desconocido - + Tipo de sistema de ficheros {0} de Linux desconocido - + Tipo de sistema de ficheros {0} raíz de NetBSD desconocido - + Tipo de sistema de ficheros {0} de intercambio de NetBSD desconocido - + Tipo de sistema de ficheros {0} de usuario de NetBSD desconocido - + Tipo de sistema de ficheros profesional {0} desconocido - + Tipo de sistema de ficheros inteligente {0} desconocido - + Desconocido - + Desconocido - + Optimización {0:X2} desconocida - + Desconocida - + Tipo de partición desconocido - + Tipo de partición {0} desconocido - + Desconocido - + Etiqueta desconocida: 0x{0:X4} - + No montable - + Sin usar - + Entrada sin usar - + usuario - + (válida) - + VENIX 80286 - + Privada de Veritas - + Pública de Veritas - + Vinum - + Reservada de VMware - + VMFS de VMware - + VMKCORE de VMware - + VMKCORE de VMware - + Cabecera de volumen - + partición privada de gestión de volumen - + partición pública de gestión de volumen - + UNIX VTOC - + ATENCIÓN: El final de la partición está más allá del tamaño del dispositivo - + Dispositivo completo - + DIsco completo - + Sistema de ficheros Overture de Willowsoft - + Willowtech Photon coS - + Entorno de recuperación de Windows - + Espacios de almacenamiento de Windows (WSS) - + Conjunto de volúmenes de Windows - + Compatibilidad anterior de Xbox - + Sistema de particiones de Xbox - + Bloques dañados de XENIX - + XENIX - + Raíz de XENIX - + /usr de XENIX - + XFS - + Dispositivo registro de XFS - + Volumen XLV - + ZFS - + {0} bytes por bloque - + {0} bytes por fragmento - + {0} bytes por nodo-i - + {0} cilindros por grupo - + Al menos el {0}% del espacio debe estar libre - + Sistema de ficheros rápido de 4.2BSD - + 4.2UFS, para BFFS - + 4.4LFS - + (sólo lectura) - + (no montable) \ No newline at end of file diff --git a/Aaru.Partitions/Localization/Localization.resx b/Aaru.Partitions/Localization/Localization.resx index 9db2fb5e2..21f92dbff 100644 --- a/Aaru.Partitions/Localization/Localization.resx +++ b/Aaru.Partitions/Localization/Localization.resx @@ -1,1416 +1,1418 @@ - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Acorn FileCore partitions - + Apple Partition Map - + Found misaligned entry. - + Found aligned entry. - + Partition flags: - + Partition is valid. - + Partition entry is allocated. - + Partition is in use. - + Partition is bootable. - + Partition is readable. - + Partition is writable. - + First boot sector: {0} - + Boot is {0} bytes. - + Boot load address: 0x{0:X8} - + Boot entry point: 0x{0:X8} - + Boot code checksum: 0x{0:X8} - + Processor: {0} - + Partition's boot code is position independent. - + Cutting last partition end ({0}) to media size ({1}) - + Not adding partition because start ({0}) is outside media size ({1}) - + ACT Apricot partitions - + Non-bootable - + Apricot & XI RAM BIOS - + Generic ROM BIOS - + Apricot & XI ROM BIOS - + Apricot Portable ROM BIOS - + Apricot F1 ROM BIOS - + MF1DD 70-track - + Invalid - + None - + Odd - + Even - + Mark - + Space - + Parallel - + Serial - + Unknown - + Unknown - + Unknown - + Unknown - + Unknown - + Atari partitions - + Boot code SHA1: {0} - + WARNING: End of partition goes beyond device size - + Atari GEMDOS partition - + Atari GEMDOS partition bigger than 32 MiB - + Linux partition - + Swap partition - + RAW partition - + NetBSD partition - + NetBSD swap partition - + Atari UNIX partition - + Macintosh partition - + MINIX partition - + Unknown partition type - + BSD disklabel - + dl.magic on sector {0} at offset {1} = 0x{2:X8} (expected 0x{3:X8}) - + Adding it... - + Unused entry - + UNIX 6th Edition - + UNIX 7th Edition - + UNIX System V - + UNIX 7th Edition with 1K blocks - + UNIX 8th Edition with 4K blocks - + 4.2BSD Fast File System - + 4.4LFS - + HPFS - + ISO9660 - + Boot - + Amiga FFS - + Apple HFS - + Digital Advanced File System - + Digital LSM Public Region - + Digital LSM Private Region - + Digital LSM Simple Disk - + Concatenated disk - + IBM JFS2 - + Hammer - + Hammer2 - + UDF - + EFS - + ZFS - + FreeBSD nandfs - + FAT - + Other or unknown - + DEC disklabel - + DragonFly BSD 64-bit disklabel - + GUID Partition Table - + Found unaligned signature - + MBR scheme - + EFI System - + BIOS Boot - + Intel Fast Flash (iFFS) - + Sony boot - + Lenovo boot - + Microsoft Reserved (MSR) - + Microsoft Basic data - + Logical Disk Manager (LDM) metadata - + Logical Disk Manager data - + Windows Recovery Environment - + IBM General Parallel File System (GPFS) - + Windows Storage Spaces - + HP-UX Data - + HP-UX Service - + Linux filesystem - + Linux RAID - + Linux Root (x86) - + Linux Root (x86-64) - + Linux Root (32-bit ARM) - + Linux Root (64-bit ARM/AArch64) - + Logical Volume Manager (LVM) - + Linux /home - + Linux /srv - + Plain dm-crypt - + LUKS - + Linux Reserved - + FreeBSD Boot - + FreeBSD Data - + FreeBSD UFS - + FreeBSD UFS2 - + FreeBSD Vinum - + FreeBSD ZFS - + Apple UFS - + Apple RAID - + Apple RAID, offline - + Apple Boot - + Apple Label - + Apple TV Recovery - + Apple Core Storage - + Solaris Root - + Solaris Swap - + Solaris Backup - + Solaris /usr or Apple ZFS - + Solaris /var - + Solaris /home - + Solaris Alternate sector - + Solaris Reserved - + NetBSD Swap - + NetBSD FFS - + NetBSD LFS - + NetBSD RAID - + NetBSD Concatenated - + NetBSD Encrypted - + ChromeOS kernel - + ChromeOS rootfs - + ChromeOS future use - + Haiku BFS - + MidnightBSD Boot - + MidnightBSD Data - + MidnightBSD Swap - + MidnightBSD UFS - + MidnightBSD Vinum - + MidnightBSD ZFS - + Ceph Journal - + Ceph dm-crypt Encrypted Journal - + Ceph OSD - + Ceph dm-crypt OSD - + Ceph disk in creation - + Ceph dm-crypt disk in creation - + OpenBSD Data - + QNX Power-safe (QNX6) - + Plan 9 - + VMware vmkcore (coredump) - + VMware VMFS - + VMware Reserved - + ONIE boot - + ONIE config - + PowerPC PReP boot - + Acronis Secure Zone - + Apple File System - + DragonFly BSD Label - + DragonFly BSD Swap - + DragonFly BSD UFS - + DragonFly BSD Vinum - + DragonFly BSD CCD - + DragonFly BSD Legacy - + DragonFly BSD Hammer - + DragonFly BSD Hammer2 - + Human 68k partitions - + Empty - + FAT12 - + XENIX root - + XENIX /usr - + FAT16 < 32 MiB - + Extended - + FAT16 - + IFS (HPFS/NTFS) - + AIX boot, OS/2, Commodore DOS - + AIX data, Coherent, QNX - + Coherent swap, OPUS, OS/2 Boot Manager - + FAT32 - + FAT32 (LBA) - + FAT16 (LBA) - + Extended (LBA) - + OPUS - + Hidden FAT12 - + Compaq diagnostics, recovery partition - + Hidden FAT16 < 32 MiB, AST-DOS - + Hidden FAT16 - + Hidden IFS (HPFS/NTFS) - + AST-Windows swap - + Willowtech Photon coS - + Hidden FAT32 - + Hidden FAT32 (LBA) - + Hidden FAT16 (LBA) - + Willowsoft Overture File System - + Oxygen FSo2 - + Oxygen Extended - + SpeedStor reserved - + NEC-DOS - + Hidden NTFS - + Theos - + Partition Magic - + Hidden NetWare - + VENIX 80286 - + PReP Boot - + Secure File System - + PTS-DOS - + Priam, EUMEL/Elan - + EUMEL/Elan - + ALFS/THIN lightweight filesystem for DOS - + QNX 4 - + QNX 4, Oberon - + Ontrack DM, R/O, FAT - + Ontrack DM, R/W, FAT - + CP/M, Microport UNIX - + Ontrack DM 6 - + EZ-Drive - + Golden Bow VFeature - + Priam EDISK - + SpeedStor - + GNU Hurd, System V, 386/ix - + NetWare 286 - + NetWare - + NetWare 386 - + NetWare NSS - + DiskSecure Multi-Boot - + IBM PC/IX - + Old MINIX - + MINIX, Old Linux - + Linux swap, Solaris - + Linux - + Hidden by OS/2, APM hibernation - + Linux extended - + NT Stripe Set - + Linux Plaintext - + Linux LVM - + Amoeba, Hidden Linux - + Amoeba bad blocks - + Mylex EISA SCSI - + BSD/OS - + Hibernation - + HP Volume Expansion - + FreeBSD - + OpenBSD - + NeXTStep - + NetBSD - + Olivetti DOS FAT12 - + BootStar - + BSDi - + PTS BootWizard - + Solaris boot - + Solaris - + Novell DOS, DR-DOS secured - + DR-DOS secured FAT12 - + DR-DOS reserved - + DR-DOS secured FAT16 < 32 MiB - + DR-DOS secured FAT16 - + Syrinx - + DR-DOS secured FAT32 (LBA) - + DR-DOS secured FAT16 (LBA) - + DR-DOS secured FAT32 - + DR-DOS secured extended (LBA) - + Multiuser DOS secured FAT12 - + Multiuser DOS secured FAT16 < 32 MiB - + Multiuser DOS secured extended - + Multiuser DOS secured FAT16 - + CP/M - + Filesystem-less data - + CP/M, CCP/M, CTOS - + Dell partition - + BootIt EMBRM - + DOS read/only - + Tandy DOS - + BeOS - + Spryt*x - + Guid Partition Table - + EFI system partition - + Linux boot - + DOS 3.3 secondary, Unisys DOS - + Prologue - + VMware VMKCORE - + Linux RAID, FreeDOS - + SpeedStor, LANStep, PS/2 IML - + XENIX bad block - + Master Boot Record - + MINIX - + NeXT Disklabel - + Partition bigger than device, reducing... - + {0} bytes per block - + {0} bytes per fragment - + Space optimized - + Time optimized - + Unknown optimization {0:X2} - + {0} cylinders per group - + {0} bytes per inode - + {0}% of space must be free at minimum - + Filesystem should be formatted at start - + Filesystem should be automatically mounted - + NEC PC-9800 partition table - + PC-UX - + N88-BASIC(86) - + Windows Volume Set - + Plan9 partition table - + Amiga Rigid Disk Block - + Possible magic at block {0} is 0x{1:X8} - + Found RDB magic at block {0} - + Going to block {0} in search of a BadBlock block - + Found BadBlock block - + Bad block at {0} replaced with good block at {1} - + Going to block {0} in search of a PartitionEntry block - + Found PartitionEntry block - + Going to block {0} in search of a FileSystemHeader block - + Found FileSystemHeader block - + Going to block {0} in search of a LoadSegment block - + Found LoadSegment block - + LoadSegment data SHA1: {0} - + Amiga Original File System - + Amiga Fast File System - + Amiga Original File System with international characters - + Amiga Fast File System with international characters - + Amiga Original File System with directory cache - + Amiga Fast File System with directory cache - + Amiga Original File System with long filenames - + Amiga Fast File System with long filenames - + Amiga UNIX System V filesystem - + Amiga UNIX boot filesystem - + Amiga UNIX BSD filesystem - + Amiga UNIX Reserved partition (swap) - + ProfessionalFileSystem - + SmartFileSystem v1 - + SmartFileSystem v2 - + JXFS - + FAT, as set by CrossDOS - + HFS, as set by CrossMac - + 4.2UFS, for BFFS - + Amiga Original File System with multi-user patches - + Amiga Fast File System with multi-user patches - + Amiga Original File System with international characters and multi-user patches - + Amiga Fast File System with international characters and multi-user patches - + Amiga Original File System with directory cache and multi-user patches - + Amiga Fast File System with directory cache and multi-user patches - + BSD unused - + BSD swap - + BSD 4.2 FFS - + BSD 4.4 LFS - + NetBSD unused root partition - + NetBSD 4.2 FFS root partition - + NetBSD 4.4 LFS root partition - + NetBSD unused user partition - + NetBSD 4.2 FFS user partition - + NetBSD 4.4 LFS user partition - + Linux filesystem partition - + Linux swap partition - + RaidFrame partition - + Unknown Amiga DOS filesystem type {0} - + Unknown Amiga UNIX filesystem type {0} - + Unknown ProfessionalFileSystem type {0} - + Unknown SmartFileSystem type {0} - + Unknown Amiga DOS multi-user filesystem type {0} - + Unknown BSD filesystem type {0} - + Unknown NetBSD root filesystem type {0} - + Unknown NetBSD user filesystem type {0} - + Unknown NetBSD swap filesystem type {0} - + Unknown Linux filesystem type {0} - + Unknown partition type {0} - + Rio Karma partitioning - + Rio Karma - + SGI Disk Volume Header - + dvh.magic = 0x{0:X8} (should be 0x{1:X8}) - + Volume header - + Track replacements - + Sector replacements - + Raw data (swap) - + Whole device - + Logical volume - + Raw logical volume - + XFS - + XFS log device - + XLV volume - + SGI XVM - + Linux swap - + Sun Disklabel - + SunOS partition - + Partition timestamped on {0} - + Swapping dk_label - + Swapping dk_label8 - + Swapping dk_label16 - + Unmountable - + Read-only - + LVM - + Sun boot - + Sun /home - + Sun / - + Sun /stand - + Sun swap - + Sun /usr - + Sun /var - + Whole disk - + Replacement sectors - + Sun cachefs - + Reserved for SMI - + Veritas public - + Veritas private - + FreeBSD swap - + Vinum - + data - + error log - + errorlog - + swap - + user - + maintenance area - + maintenance - + bad sector file - + bad - + UNIX hardwired - + UNIX VTOC - + sanity at {0} is 0x{1:X8} (should be 0x{2:X8} or 0x{3:X8}) - + New VTOC found at {0} - + Old VTOC found at {0} - + Searching for VTOC on relative byte {0} - + Going to read {0} sectors from sector {1}, getting VTOC from byte {2} - + Going to read past device size, aborting... - + New VTOC found. - + Cannot find VTOC. - + (valid) - + (unmountable) - + (open) - + (alternate sector mapping) - + (read-only) - + created on {0} - + Unused - + Alternate sector space - + non UNIX - + Alternate track space - + Alternate sector track - + Cache - + Reserved - + dump - + volume mgt public partition - + volume mgt private partition - + Unknown TAG: 0x{0:X4} - + Xbox partitioning - + Content volume - + Dashboard volume - + System cache - + Data volume - + Security sectors - + Game cache - + System volume - + System volume 2 - + Xbox backwards compatibility - + XENIX - + FileCore \ No newline at end of file diff --git a/Aaru.Partitions/MBR.cs b/Aaru.Partitions/MBR.cs index 5518cc98b..14267dc71 100644 --- a/Aaru.Partitions/MBR.cs +++ b/Aaru.Partitions/MBR.cs @@ -303,10 +303,14 @@ public sealed class MBR : IPartition Localization.Xenix_bad_block }; +#region IPartition Members + /// public string Name => Localization.MBR_Name; + /// public Guid Id => new("5E8A34E8-4F1A-59E6-4BF7-7EA647063A76"); + /// public string Author => Authors.NataliaPortillo; @@ -349,7 +353,7 @@ public sealed class MBR : IPartition DiskManagerMasterBootRecord mbrOntrack = Marshal.ByteArrayToStructureLittleEndian(sector); - AaruConsole.DebugWriteLine(MODULE_NAME, "xmlmedia = {0}", imagePlugin.Info.MetadataMediaType); + AaruConsole.DebugWriteLine(MODULE_NAME, "xmlmedia = {0}", imagePlugin.Info.MetadataMediaType); AaruConsole.DebugWriteLine(MODULE_NAME, "mbr.magic = {0:X4}", mbr.magic); if(mbr.magic != MBR_MAGIC) @@ -360,7 +364,7 @@ public sealed class MBR : IPartition if(errno != ErrorNumber.NoError) return false; - ulong signature = BitConverter.ToUInt64(hdrBytes, 0); + var signature = BitConverter.ToUInt64(hdrBytes, 0); AaruConsole.DebugWriteLine(MODULE_NAME, "gpt.signature = 0x{0:X16}", signature); @@ -392,18 +396,18 @@ public sealed class MBR : IPartition foreach(PartitionEntry entry in entries) { - byte startSector = (byte)(entry.start_sector & 0x3F); - ushort startCylinder = (ushort)(((entry.start_sector & 0xC0) << 2) | entry.start_cylinder); - byte endSector = (byte)(entry.end_sector & 0x3F); - ushort endCylinder = (ushort)(((entry.end_sector & 0xC0) << 2) | entry.end_cylinder); - ulong lbaStart = entry.lba_start; - ulong lbaSectors = entry.lba_sectors; + var startSector = (byte)(entry.start_sector & 0x3F); + var startCylinder = (ushort)((entry.start_sector & 0xC0) << 2 | entry.start_cylinder); + var endSector = (byte)(entry.end_sector & 0x3F); + var endCylinder = (ushort)((entry.end_sector & 0xC0) << 2 | entry.end_cylinder); + ulong lbaStart = entry.lba_start; + ulong lbaSectors = entry.lba_sectors; // Let's start the fun... - bool valid = true; - bool extended = false; - bool minix = false; + var valid = true; + var extended = false; + var minix = false; if(entry.status != 0x00 && entry.status != 0x80) @@ -449,27 +453,29 @@ public sealed class MBR : IPartition if(lbaStart + lbaSectors > imagePlugin.Info.Sectors) lbaSectors = imagePlugin.Info.Sectors - lbaStart; - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.status {0}", entry.status); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.type {0}", entry.type); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.lba_start {0}", entry.lba_start); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.lba_sectors {0}", entry.lba_sectors); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.status {0}", entry.status); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.type {0}", entry.type); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.lba_start {0}", entry.lba_start); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.lba_sectors {0}", entry.lba_sectors); AaruConsole.DebugWriteLine(MODULE_NAME, "entry.start_cylinder {0}", startCylinder); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.start_head {0}", entry.start_head); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.start_sector {0}", startSector); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.end_cylinder {0}", endCylinder); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.end_head {0}", entry.end_head); - AaruConsole.DebugWriteLine(MODULE_NAME, "entry.end_sector {0}", endSector); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.start_head {0}", entry.start_head); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.start_sector {0}", startSector); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.end_cylinder {0}", endCylinder); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.end_head {0}", entry.end_head); + AaruConsole.DebugWriteLine(MODULE_NAME, "entry.end_sector {0}", endSector); AaruConsole.DebugWriteLine(MODULE_NAME, "entry.minix = {0}", minix); - AaruConsole.DebugWriteLine(MODULE_NAME, "lba_start {0}", lbaStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "lba_start {0}", lbaStart); AaruConsole.DebugWriteLine(MODULE_NAME, "lba_sectors {0}", lbaSectors); if(valid && minix) // Let's mix the fun + { if(GetMinix(imagePlugin, lbaStart, divider, sectorOffset, sectorSize, out List mnxParts)) partitions.AddRange(mnxParts); else minix = false; + } if(valid && !minix) { @@ -505,7 +511,7 @@ public sealed class MBR : IPartition if(!extended) continue; - bool processingExtended = true; + var processingExtended = true; ulong chainStart = lbaStart; while(processingExtended) @@ -526,25 +532,25 @@ public sealed class MBR : IPartition foreach(PartitionEntry ebrEntry in ebr.entries) { - bool extValid = true; + var extValid = true; startSector = (byte)(ebrEntry.start_sector & 0x3F); - startCylinder = (ushort)(((ebrEntry.start_sector & 0xC0) << 2) | ebrEntry.start_cylinder); + startCylinder = (ushort)((ebrEntry.start_sector & 0xC0) << 2 | ebrEntry.start_cylinder); endSector = (byte)(ebrEntry.end_sector & 0x3F); - endCylinder = (ushort)(((ebrEntry.end_sector & 0xC0) << 2) | ebrEntry.end_cylinder); + endCylinder = (ushort)((ebrEntry.end_sector & 0xC0) << 2 | ebrEntry.end_cylinder); ulong extStart = ebrEntry.lba_start; ulong extSectors = ebrEntry.lba_sectors; - bool extMinix = false; + var extMinix = false; - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.status {0}", ebrEntry.status); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.type {0}", ebrEntry.type); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.lba_start {0}", ebrEntry.lba_start); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.lba_sectors {0}", ebrEntry.lba_sectors); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.status {0}", ebrEntry.status); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.type {0}", ebrEntry.type); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.lba_start {0}", ebrEntry.lba_start); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.lba_sectors {0}", ebrEntry.lba_sectors); AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.start_cylinder {0}", startCylinder); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.start_head {0}", ebrEntry.start_head); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.start_sector {0}", startSector); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.end_cylinder {0}", endCylinder); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.end_head {0}", ebrEntry.end_head); - AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.end_sector {0}", endSector); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.start_head {0}", ebrEntry.start_head); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.start_sector {0}", startSector); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.end_cylinder {0}", endCylinder); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.end_head {0}", ebrEntry.end_head); + AaruConsole.DebugWriteLine(MODULE_NAME, "ebr_entry.end_sector {0}", endSector); // Let's start the fun... extValid &= ebrEntry.status is 0x00 or 0x80; @@ -569,7 +575,7 @@ public sealed class MBR : IPartition extStart /= divider; extSectors /= divider; - AaruConsole.DebugWriteLine(MODULE_NAME, "ext_start {0}", extStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "ext_start {0}", extStart); AaruConsole.DebugWriteLine(MODULE_NAME, "ext_sectors {0}", extSectors); if(ebrEntry.type is 0x05 or 0x0F or 0x15 or 0x1F or 0x85 or 0x91 or 0x9B or 0xC5 or 0xCF or 0xD5) @@ -586,11 +592,13 @@ public sealed class MBR : IPartition extSectors = imagePlugin.Info.Sectors - extStart; if(extValid && extMinix) // Let's mix the fun + { if(GetMinix(imagePlugin, lbaStart, divider, sectorOffset, sectorSize, out List mnxParts)) partitions.AddRange(mnxParts); else extMinix = false; + } if(!extValid || extMinix) continue; @@ -632,6 +640,8 @@ public sealed class MBR : IPartition return partitions.Count != 0; } +#endregion + static bool GetMinix(IMediaImage imagePlugin, ulong start, ulong divider, ulong sectorOffset, uint sectorSize, out List partitions) { @@ -649,28 +659,28 @@ public sealed class MBR : IPartition if(mnx.magic != MBR_MAGIC) return false; - bool anyMnx = false; + var anyMnx = false; foreach(PartitionEntry mnxEntry in mnx.entries) { - bool mnxValid = true; - byte startSector = (byte)(mnxEntry.start_sector & 0x3F); - ushort startCylinder = (ushort)(((mnxEntry.start_sector & 0xC0) << 2) | mnxEntry.start_cylinder); - byte endSector = (byte)(mnxEntry.end_sector & 0x3F); - ushort endCylinder = (ushort)(((mnxEntry.end_sector & 0xC0) << 2) | mnxEntry.end_cylinder); - ulong mnxStart = mnxEntry.lba_start; - ulong mnxSectors = mnxEntry.lba_sectors; + var mnxValid = true; + var startSector = (byte)(mnxEntry.start_sector & 0x3F); + var startCylinder = (ushort)((mnxEntry.start_sector & 0xC0) << 2 | mnxEntry.start_cylinder); + var endSector = (byte)(mnxEntry.end_sector & 0x3F); + var endCylinder = (ushort)((mnxEntry.end_sector & 0xC0) << 2 | mnxEntry.end_cylinder); + ulong mnxStart = mnxEntry.lba_start; + ulong mnxSectors = mnxEntry.lba_sectors; - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.status {0}", mnxEntry.status); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.type {0}", mnxEntry.type); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.lba_start {0}", mnxEntry.lba_start); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.lba_sectors {0}", mnxEntry.lba_sectors); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.status {0}", mnxEntry.status); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.type {0}", mnxEntry.type); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.lba_start {0}", mnxEntry.lba_start); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.lba_sectors {0}", mnxEntry.lba_sectors); AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.start_cylinder {0}", startCylinder); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.start_head {0}", mnxEntry.start_head); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.start_sector {0}", startSector); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.end_cylinder {0}", endCylinder); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.end_head {0}", mnxEntry.end_head); - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.end_sector {0}", endSector); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.start_head {0}", mnxEntry.start_head); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.start_sector {0}", startSector); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.end_cylinder {0}", endCylinder); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.end_head {0}", mnxEntry.end_head); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_entry.end_sector {0}", endSector); mnxValid &= mnxEntry.status is 0x00 or 0x80; mnxValid &= mnxEntry.type is 0x81 or 0x80; @@ -692,7 +702,7 @@ public sealed class MBR : IPartition mnxStart /= divider; mnxSectors /= divider; - AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_start {0}", mnxStart); + AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_start {0}", mnxStart); AaruConsole.DebugWriteLine(MODULE_NAME, "mnx_sectors {0}", mnxSectors); if(!mnxValid) @@ -728,14 +738,20 @@ public sealed class MBR : IPartition static string DecodeMbrType(byte type) => _mbrTypes[type]; +#region Nested type: DiskManagerMasterBootRecord + [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct MasterBootRecord + readonly struct DiskManagerMasterBootRecord { /// Boot code - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 446)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 252)] public readonly byte[] boot_code; + /// + /// + /// + public readonly ushort dm_magic; /// Partitions - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public readonly PartitionEntry[] entries; /// /// @@ -743,6 +759,10 @@ public sealed class MBR : IPartition public readonly ushort magic; } +#endregion + +#region Nested type: ExtendedBootRecord + // TODO: IBM Boot Manager [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct ExtendedBootRecord @@ -759,25 +779,16 @@ public sealed class MBR : IPartition public readonly ushort magic; } +#endregion + +#region Nested type: MasterBootRecord + [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct TimedMasterBootRecord + readonly struct MasterBootRecord { /// Boot code - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 218)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 446)] public readonly byte[] boot_code; - /// Set to 0 - public readonly ushort zero; - /// Original physical drive - public readonly byte drive; - /// Disk timestamp, seconds - public readonly byte seconds; - /// Disk timestamp, minutes - public readonly byte minutes; - /// Disk timestamp, hours - public readonly byte hours; - /// Boot code, continuation - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 222)] - public readonly byte[] boot_code2; /// Partitions [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public readonly PartitionEntry[] entries; @@ -787,24 +798,9 @@ public sealed class MBR : IPartition public readonly ushort magic; } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct SerializedMasterBootRecord - { - /// Boot code - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 440)] - public readonly byte[] boot_code; - /// Disk serial number - public readonly uint serial; - /// Set to 0 - public readonly ushort zero; - /// Partitions - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public readonly PartitionEntry[] entries; - /// - /// - /// - public readonly ushort magic; - } +#endregion + +#region Nested type: ModernMasterBootRecord [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct ModernMasterBootRecord @@ -838,6 +834,10 @@ public sealed class MBR : IPartition public readonly ushort magic; } +#endregion + +#region Nested type: NecMasterBootRecord + [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct NecMasterBootRecord { @@ -857,24 +857,9 @@ public sealed class MBR : IPartition public readonly ushort magic; } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - readonly struct DiskManagerMasterBootRecord - { - /// Boot code - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 252)] - public readonly byte[] boot_code; - /// - /// - /// - public readonly ushort dm_magic; - /// Partitions - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public readonly PartitionEntry[] entries; - /// - /// - /// - public readonly ushort magic; - } +#endregion + +#region Nested type: PartitionEntry [StructLayout(LayoutKind.Sequential, Pack = 1)] readonly struct PartitionEntry @@ -900,4 +885,61 @@ public sealed class MBR : IPartition /// Total sectors public readonly uint lba_sectors; } + +#endregion + +#region Nested type: SerializedMasterBootRecord + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + readonly struct SerializedMasterBootRecord + { + /// Boot code + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 440)] + public readonly byte[] boot_code; + /// Disk serial number + public readonly uint serial; + /// Set to 0 + public readonly ushort zero; + /// Partitions + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + public readonly PartitionEntry[] entries; + /// + /// + /// + public readonly ushort magic; + } + +#endregion + +#region Nested type: TimedMasterBootRecord + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + readonly struct TimedMasterBootRecord + { + /// Boot code + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 218)] + public readonly byte[] boot_code; + /// Set to 0 + public readonly ushort zero; + /// Original physical drive + public readonly byte drive; + /// Disk timestamp, seconds + public readonly byte seconds; + /// Disk timestamp, minutes + public readonly byte minutes; + /// Disk timestamp, hours + public readonly byte hours; + /// Boot code, continuation + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 222)] + public readonly byte[] boot_code2; + /// Partitions + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + public readonly PartitionEntry[] entries; + /// + /// + /// + public readonly ushort magic; + } + +#endregion } \ No newline at end of file diff --git a/Aaru.Partitions/NeXT.cs b/Aaru.Partitions/NeXT.cs index deb901cd2..1deee341e 100644 --- a/Aaru.Partitions/NeXT.cs +++ b/Aaru.Partitions/NeXT.cs @@ -49,7 +49,8 @@ namespace Aaru.Partitions; /// /// Implements decoding of NeXT disklabels -[SuppressMessage("ReSharper", "UnusedMember.Local"), SuppressMessage("ReSharper", "UnusedType.Local")] +[SuppressMessage("ReSharper", "UnusedMember.Local")] +[SuppressMessage("ReSharper", "UnusedType.Local")] public sealed class NeXTDisklabel : IPartition { /// "NeXT" @@ -64,17 +65,21 @@ public sealed class NeXTDisklabel : IPartition const ushort DISKTAB_ENTRY_SIZE = 0x2C; const string MODULE_NAME = "NeXT disklabel plugin"; +#region IPartition Members + /// public string Name => Localization.NeXTDisklabel_Name; + /// public Guid Id => new("246A6D93-4F1A-1F8A-344D-50187A5513A9"); + /// public string Author => Authors.NataliaPortillo; /// public bool GetInformation(IMediaImage imagePlugin, out List partitions, ulong sectorOffset) { - bool magicFound = false; + var magicFound = false; byte[] labelSector; uint sectorSize = imagePlugin.Info.SectorSize is 2352 or 2448 ? 2048 : imagePlugin.Info.SectorSize; @@ -84,17 +89,14 @@ public sealed class NeXTDisklabel : IPartition ulong labelPosition = 0; ErrorNumber errno; - foreach(ulong i in new ulong[] - { - 0, 4, 15, 16 - }.TakeWhile(i => i + sectorOffset < imagePlugin.Info.Sectors)) + foreach(ulong i in new ulong[] { 0, 4, 15, 16 }.TakeWhile(i => i + sectorOffset < imagePlugin.Info.Sectors)) { errno = imagePlugin.ReadSector(i + sectorOffset, out labelSector); if(errno != ErrorNumber.NoError) continue; - uint magic = BigEndianBitConverter.ToUInt32(labelSector, 0x00); + var magic = BigEndianBitConverter.ToUInt32(labelSector, 0x00); if(magic != NEXT_MAGIC1 && magic != NEXT_MAGIC2 && @@ -120,19 +122,19 @@ public sealed class NeXTDisklabel : IPartition if(errno != ErrorNumber.NoError) return false; - Label label = Marshal.ByteArrayToStructureBigEndian