diff --git a/DiscImageChef.CommonTypes/Partition.cs b/DiscImageChef.CommonTypes/Partition.cs index ec42e078..ad86bf2d 100644 --- a/DiscImageChef.CommonTypes/Partition.cs +++ b/DiscImageChef.CommonTypes/Partition.cs @@ -53,6 +53,8 @@ namespace DiscImageChef.CommonTypes public ulong PartitionSectors; /// Information that does not find space in this struct public string PartitionDescription; + /// LBA of last partition sector + public ulong PartitionEndSector { get { return PartitionStartSector + PartitionSectors - 1; }} } } diff --git a/DiscImageChef.Core/Devices/Dumping/ATA.cs b/DiscImageChef.Core/Devices/Dumping/ATA.cs index 938ac483..5d5e8fa0 100644 --- a/DiscImageChef.Core/Devices/Dumping/ATA.cs +++ b/DiscImageChef.Core/Devices/Dumping/ATA.cs @@ -484,9 +484,9 @@ namespace DiscImageChef.Core.Devices.Dumping { try { - if(_plugin.Identify(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1)) + if(_plugin.Identify(_imageFormat, partitions[i])) { - _plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out string foo); + _plugin.GetInformation(_imageFormat, partitions[i], out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); } @@ -513,13 +513,20 @@ namespace DiscImageChef.Core.Devices.Dumping }; List lstFs = new List(); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = blocks, + PartitionLength = blocks * blockSize + }; + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { - if(_plugin.Identify(_imageFormat, (blocks - 1), 0)) + if(_plugin.Identify(_imageFormat, wholePart)) { - _plugin.GetInformation(_imageFormat, (blocks - 1), 0, out string foo); + _plugin.GetInformation(_imageFormat, wholePart, out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); } diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index 9357849d..2cf435a3 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -636,9 +636,9 @@ namespace DiscImageChef.Core.Devices.Dumping { try { - if(_plugin.Identify(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1)) + if(_plugin.Identify(_imageFormat, partitions[i])) { - _plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out string foo); + _plugin.GetInformation(_imageFormat, partitions[i], out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); @@ -674,13 +674,20 @@ namespace DiscImageChef.Core.Devices.Dumping }; List lstFs = new List(); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = blocks, + PartitionLength = blocks * blockSize + }; + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { - if(_plugin.Identify(_imageFormat, (blocks - 1), 0)) + if(_plugin.Identify(_imageFormat, wholePart)) { - _plugin.GetInformation(_imageFormat, (blocks - 1), 0, out string foo); + _plugin.GetInformation(_imageFormat, wholePart, out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); diff --git a/DiscImageChef.Core/Devices/Dumping/XGD.cs b/DiscImageChef.Core/Devices/Dumping/XGD.cs index 9acdaabc..8a7c0cdc 100644 --- a/DiscImageChef.Core/Devices/Dumping/XGD.cs +++ b/DiscImageChef.Core/Devices/Dumping/XGD.cs @@ -792,9 +792,9 @@ namespace DiscImageChef.Core.Devices.Dumping { try { - if(_plugin.Identify(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1)) + if(_plugin.Identify(_imageFormat, partitions[i])) { - _plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out string foo); + _plugin.GetInformation(_imageFormat, partitions[i], out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); @@ -830,13 +830,20 @@ namespace DiscImageChef.Core.Devices.Dumping }; List lstFs = new List(); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = blocks, + PartitionLength = blocks * blockSize + }; + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { - if(_plugin.Identify(_imageFormat, (blocks - 1), 0)) + if(_plugin.Identify(_imageFormat, wholePart)) { - _plugin.GetInformation(_imageFormat, (blocks - 1), 0, out string foo); + _plugin.GetInformation(_imageFormat, wholePart, out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); diff --git a/DiscImageChef.Core/Filesystems.cs b/DiscImageChef.Core/Filesystems.cs index 7b38c9c5..65073fd2 100644 --- a/DiscImageChef.Core/Filesystems.cs +++ b/DiscImageChef.Core/Filesystems.cs @@ -35,8 +35,8 @@ // Copyright (C) 2011-2015 Claunia.com // ****************************************************************************/ // //$Id$ -using System; using System.Collections.Generic; +using DiscImageChef.CommonTypes; using DiscImageChef.Filesystems; using DiscImageChef.ImagePlugins; @@ -44,7 +44,7 @@ namespace DiscImageChef.Core { public static class Filesystems { - public static void Identify(ImagePlugin imagePlugin, out List id_plugins, ulong partitionStart, ulong partitionEnd) + public static void Identify(ImagePlugin imagePlugin, out List id_plugins, Partition partition) { id_plugins = new List(); PluginBase plugins = new PluginBase(); @@ -52,7 +52,7 @@ namespace DiscImageChef.Core foreach(Filesystem _plugin in plugins.PluginsList.Values) { - if(_plugin.Identify(imagePlugin, partitionStart, partitionEnd)) + if(_plugin.Identify(imagePlugin, partition)) id_plugins.Add(_plugin.Name.ToLower()); } } diff --git a/DiscImageChef.Core/Sidecar.cs b/DiscImageChef.Core/Sidecar.cs index 685ba3c5..5a76d122 100644 --- a/DiscImageChef.Core/Sidecar.cs +++ b/DiscImageChef.Core/Sidecar.cs @@ -38,7 +38,6 @@ using System.Collections.Generic; using System.IO; using DiscImageChef.CommonTypes; -using DiscImageChef.Console; using DiscImageChef.Decoders.PCMCIA; using DiscImageChef.Filesystems; using DiscImageChef.ImagePlugins; @@ -556,7 +555,7 @@ namespace DiscImageChef.Core { xmlTrk.FileSystemInformation[i] = new PartitionType(); xmlTrk.FileSystemInformation[i].Description = partitions[i].PartitionDescription; - xmlTrk.FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1); + xmlTrk.FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionEndSector); xmlTrk.FileSystemInformation[i].Name = partitions[i].PartitionName; xmlTrk.FileSystemInformation[i].Sequence = (int)partitions[i].PartitionSequence; xmlTrk.FileSystemInformation[i].StartSector = (int)partitions[i].PartitionStartSector; @@ -568,10 +567,9 @@ namespace DiscImageChef.Core { try { - if(_plugin.Identify(image, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1)) + if(_plugin.Identify(image, partitions[i])) { - string foo; - _plugin.GetInformation(image, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out foo); + _plugin.GetInformation(image, partitions[i], out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); @@ -605,14 +603,21 @@ namespace DiscImageChef.Core List lstFs = new List(); + Partition xmlPart = new Partition + { + PartitionStartSector = (ulong)xmlTrk.StartSector, + PartitionSectors = (ulong)((xmlTrk.EndSector - xmlTrk.StartSector) + 1), + PartitionType = xmlTrk.TrackType1.ToString(), + PartitionLength = (ulong)xmlTrk.Size, + PartitionSequence = (ulong)xmlTrk.Sequence.TrackNumber + }; foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { - if(_plugin.Identify(image, (ulong)xmlTrk.StartSector, (ulong)xmlTrk.EndSector)) + if(_plugin.Identify(image, xmlPart)) { - string foo; - _plugin.GetInformation(image, (ulong)xmlTrk.StartSector, (ulong)xmlTrk.EndSector, out foo); + _plugin.GetInformation(image, xmlPart, out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); @@ -869,7 +874,7 @@ namespace DiscImageChef.Core { sidecar.BlockMedia[0].FileSystemInformation[i] = new PartitionType(); sidecar.BlockMedia[0].FileSystemInformation[i].Description = partitions[i].PartitionDescription; - sidecar.BlockMedia[0].FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1); + sidecar.BlockMedia[0].FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionEndSector); sidecar.BlockMedia[0].FileSystemInformation[i].Name = partitions[i].PartitionName; sidecar.BlockMedia[0].FileSystemInformation[i].Sequence = (int)partitions[i].PartitionSequence; sidecar.BlockMedia[0].FileSystemInformation[i].StartSector = (int)partitions[i].PartitionStartSector; @@ -881,10 +886,10 @@ namespace DiscImageChef.Core { try { - if(_plugin.Identify(image, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1)) + if(_plugin.Identify(image, partitions[i])) { string foo; - _plugin.GetInformation(image, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out foo); + _plugin.GetInformation(image, partitions[i], out foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); } @@ -907,16 +912,22 @@ namespace DiscImageChef.Core sidecar.BlockMedia[0].FileSystemInformation[0].StartSector = 0; sidecar.BlockMedia[0].FileSystemInformation[0].EndSector = (int)(image.GetSectors() - 1); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.GetSectors(), + PartitionLength = image.GetSectors() * image.GetSectorSize() + }; + List lstFs = new List(); foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { - if(_plugin.Identify(image, 0, image.GetSectors() - 1)) + if(_plugin.Identify(image, wholePart)) { - string foo; - _plugin.GetInformation(image, 0, image.GetSectors() - 1, out foo); + _plugin.GetInformation(image, wholePart, out string foo); lstFs.Add(_plugin.XmlFSType); Statistics.AddFilesystem(_plugin.XmlFSType.Type); } diff --git a/DiscImageChef.Filesystems/APFS.cs b/DiscImageChef.Filesystems/APFS.cs index 93363ff0..28b21e9a 100644 --- a/DiscImageChef.Filesystems/APFS.cs +++ b/DiscImageChef.Filesystems/APFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,9 +31,10 @@ // ****************************************************************************/ using System; +using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; -using System.Collections.Generic; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -49,7 +50,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public APFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public APFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Apple File System"; PluginUUID = new Guid("A4060F9D-2909-42E2-9D95-DB31FA7EA797"); @@ -69,12 +70,12 @@ namespace DiscImageChef.Filesystems public ulong containerBlocks; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); ApfsContainerSuperBlock nxSb; try @@ -94,16 +95,16 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); xmlFSType = new Schemas.FileSystemType(); information = ""; - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return; - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); ApfsContainerSuperBlock nxSb; try diff --git a/DiscImageChef.Filesystems/Acorn.cs b/DiscImageChef.Filesystems/Acorn.cs index afd27621..d95a7fdc 100644 --- a/DiscImageChef.Filesystems/Acorn.cs +++ b/DiscImageChef.Filesystems/Acorn.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,8 +34,8 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; -using System.Security.Policy; namespace DiscImageChef.Filesystems { @@ -73,7 +73,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public AcornADFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public AcornADFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Acorn Advanced Disc Filing System"; PluginUUID = new Guid("BAFC1E50-9C64-4CD3-8400-80628CC27AFA"); @@ -270,9 +270,9 @@ namespace DiscImageChef.Filesystems } // TODO: BBC Master hard disks are untested... - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; ulong sbSector; @@ -285,7 +285,7 @@ namespace DiscImageChef.Filesystems GCHandle ptr; // ADFS-S, ADFS-M, ADFS-L, ADFS-D without partitions - if(partitionStart == 0) + if(partition.PartitionStartSector == 0) { OldMapSector0 oldMap0; OldMapSector1 oldMap1; @@ -381,7 +381,7 @@ namespace DiscImageChef.Filesystems // Partitioning or not, new formats follow: DiscRecord drSb; - sector = imagePlugin.ReadSector(partitionStart); + sector = imagePlugin.ReadSector(partition.PartitionStartSector); byte newChk = NewMapChecksum(sector); DicConsole.DebugWriteLine("ADFS Plugin", "newChk = {0}", newChk); DicConsole.DebugWriteLine("ADFS Plugin", "map.zoneChecksum = {0}", sector[0]); @@ -391,7 +391,7 @@ namespace DiscImageChef.Filesystems if(bootBlockSize % imagePlugin.ImageInfo.sectorSize > 0) sectorsToRead++; - byte[] bootSector = imagePlugin.ReadSectors(sbSector + partitionStart, sectorsToRead); + byte[] bootSector = imagePlugin.ReadSectors(sbSector + partition.PartitionStartSector, sectorsToRead); int bootChk = 0; for(int i = 0; i < 0x1FF; i++) bootChk = ((bootChk & 0xFF) + (bootChk >> 8) + bootSector[i]); @@ -446,7 +446,7 @@ namespace DiscImageChef.Filesystems // TODO: Find root directory on volumes with DiscRecord // TODO: Support big directories (ADFS-G?) // TODO: Find the real freemap on volumes with DiscRecord, as DiscRecord's discid may be empty but this one isn't - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); xmlFSType = new Schemas.FileSystemType(); @@ -460,7 +460,7 @@ namespace DiscImageChef.Filesystems string discname; // ADFS-S, ADFS-M, ADFS-L, ADFS-D without partitions - if(partitionStart == 0) + if(partition.PartitionStartSector == 0) { OldMapSector0 oldMap0; OldMapSector1 oldMap1; @@ -595,7 +595,7 @@ namespace DiscImageChef.Filesystems // Partitioning or not, new formats follow: DiscRecord drSb; - sector = imagePlugin.ReadSector(partitionStart); + sector = imagePlugin.ReadSector(partition.PartitionStartSector); byte newChk = NewMapChecksum(sector); DicConsole.DebugWriteLine("ADFS Plugin", "newChk = {0}", newChk); DicConsole.DebugWriteLine("ADFS Plugin", "map.zoneChecksum = {0}", sector[0]); @@ -605,7 +605,7 @@ namespace DiscImageChef.Filesystems if(bootBlockSize % imagePlugin.ImageInfo.sectorSize > 0) sectorsToRead++; - byte[] bootSector = imagePlugin.ReadSectors(sbSector + partitionStart, sectorsToRead); + byte[] bootSector = imagePlugin.ReadSectors(sbSector + partition.PartitionStartSector, sectorsToRead); int bootChk = 0; for(int i = 0; i < 0x1FF; i++) bootChk = ((bootChk & 0xFF) + (bootChk >> 8) + bootSector[i]); diff --git a/DiscImageChef.Filesystems/AmigaDOS.cs b/DiscImageChef.Filesystems/AmigaDOS.cs index f54714be..35dd45f7 100644 --- a/DiscImageChef.Filesystems/AmigaDOS.cs +++ b/DiscImageChef.Filesystems/AmigaDOS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,10 +31,11 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; -using DiscImageChef.Console; using System.Runtime.InteropServices; +using System.Text; +using DiscImageChef.CommonTypes; +using DiscImageChef.Console; namespace DiscImageChef.Filesystems { @@ -47,7 +48,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public AmigaDOSPlugin(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public AmigaDOSPlugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Amiga DOS filesystem"; PluginUUID = new Guid("3c882400-208c-427d-a086-9119852a1bc7"); @@ -203,9 +204,9 @@ namespace DiscImageChef.Filesystems public const uint TypeHeader = 2; public const uint SubTypeRoot = 1; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; @@ -216,14 +217,14 @@ namespace DiscImageChef.Filesystems // However while you can set a block size different from the sector size on formatting, the bootblock block // size for floppies is the sector size, and for RDB is usually is the hard disk sector size, // so this is not entirely wrong... - byte[] sector = imagePlugin.ReadSectors(0 + partitionStart, 2); + byte[] sector = imagePlugin.ReadSectors(0 + partition.PartitionStartSector, 2); BootBlock bblk = BigEndianMarshal.ByteArrayToStructureBigEndian(sector); // AROS boot floppies... if(sector.Length >= 512 && sector[510] == 0x55 && sector[511] == 0xAA && (bblk.diskType & FFS_Mask) != FFS_Mask && (bblk.diskType & MuFS_Mask) != MuFS_Mask) { - sector = imagePlugin.ReadSectors(1 + partitionStart, 2); + sector = imagePlugin.ReadSectors(1 + partition.PartitionStartSector, 2); bblk = BigEndianMarshal.ByteArrayToStructureBigEndian(sector); } @@ -244,19 +245,19 @@ namespace DiscImageChef.Filesystems // If bootblock is correct, let's take its rootblock pointer if(bsum == bblk.checksum) { - b_root_ptr = bblk.root_ptr + partitionStart; + b_root_ptr = bblk.root_ptr + partition.PartitionStartSector; DicConsole.DebugWriteLine("AmigaDOS plugin", "Bootblock points to {0} as Rootblock", b_root_ptr); } - ulong[] root_ptrs = { b_root_ptr + partitionStart, ((partitionEnd - partitionStart) + 1) / 2 + partitionStart - 2, - ((partitionEnd - partitionStart) + 1) / 2 + partitionStart - 1, ((partitionEnd - partitionStart) + 1) / 2 + partitionStart}; + ulong[] root_ptrs = { b_root_ptr + partition.PartitionStartSector, ((partition.PartitionEndSector - partition.PartitionStartSector) + 1) / 2 + partition.PartitionStartSector - 2, + ((partition.PartitionEndSector - partition.PartitionStartSector) + 1) / 2 + partition.PartitionStartSector - 1, ((partition.PartitionEndSector - partition.PartitionStartSector) + 1) / 2 + partition.PartitionStartSector}; RootBlock rblk = new RootBlock(); // So to handle even number of sectors foreach(ulong root_ptr in root_ptrs) { - if(root_ptr >= partitionEnd || root_ptr < partitionStart) + if(root_ptr >= partition.PartitionEndSector || root_ptr < partition.PartitionStartSector) continue; DicConsole.DebugWriteLine("AmigaDOS plugin", "Searching for Rootblock in sector {0}", root_ptr); @@ -281,7 +282,7 @@ namespace DiscImageChef.Filesystems if(blockSize % sector.Length > 0) sectorsPerBlock++; - if(root_ptr + sectorsPerBlock >= partitionEnd) + if(root_ptr + sectorsPerBlock >= partition.PartitionEndSector) continue; sector = imagePlugin.ReadSectors(root_ptr, sectorsPerBlock); @@ -304,14 +305,14 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); xmlFSType = new Schemas.FileSystemType(); information = null; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - byte[] BootBlockSectors = imagePlugin.ReadSectors(0 + partitionStart, 2); + byte[] BootBlockSectors = imagePlugin.ReadSectors(0 + partition.PartitionStartSector, 2); BootBlock bootBlk = BigEndianMarshal.ByteArrayToStructureBigEndian(BootBlockSectors); bootBlk.bootCode = new byte[BootBlockSectors.Length - 12]; @@ -324,12 +325,12 @@ namespace DiscImageChef.Filesystems // If bootblock is correct, let's take its rootblock pointer if(bsum == bootBlk.checksum) { - b_root_ptr = bootBlk.root_ptr + partitionStart; + b_root_ptr = bootBlk.root_ptr + partition.PartitionStartSector; DicConsole.DebugWriteLine("AmigaDOS plugin", "Bootblock points to {0} as Rootblock", b_root_ptr); } - ulong[] root_ptrs = { b_root_ptr + partitionStart, ((partitionEnd - partitionStart) + 1) / 2 + partitionStart - 2, - ((partitionEnd - partitionStart) + 1) / 2 + partitionStart - 1, ((partitionEnd - partitionStart) + 1) / 2 + partitionStart}; + ulong[] root_ptrs = { b_root_ptr + partition.PartitionStartSector, ((partition.PartitionEndSector - partition.PartitionStartSector) + 1) / 2 + partition.PartitionStartSector - 2, + ((partition.PartitionEndSector - partition.PartitionStartSector) + 1) / 2 + partition.PartitionStartSector - 1, ((partition.PartitionEndSector - partition.PartitionStartSector) + 1) / 2 + partition.PartitionStartSector}; RootBlock rootBlk = new RootBlock(); byte[] RootBlockSector = null; @@ -340,7 +341,7 @@ namespace DiscImageChef.Filesystems // So to handle even number of sectors foreach(ulong root_ptr in root_ptrs) { - if(root_ptr >= partitionEnd || root_ptr < partitionStart) + if(root_ptr >= partition.PartitionEndSector || root_ptr < partition.PartitionStartSector) continue; DicConsole.DebugWriteLine("AmigaDOS plugin", "Searching for Rootblock in sector {0}", root_ptr); @@ -365,7 +366,7 @@ namespace DiscImageChef.Filesystems if(blockSize % RootBlockSector.Length > 0) sectorsPerBlock++; - if(root_ptr + sectorsPerBlock >= partitionEnd) + if(root_ptr + sectorsPerBlock >= partition.PartitionEndSector) continue; RootBlockSector = imagePlugin.ReadSectors(root_ptr, sectorsPerBlock); @@ -457,7 +458,7 @@ namespace DiscImageChef.Filesystems if((bootBlk.diskType & 0xFF) == 4 || (bootBlk.diskType & 0xFF) == 5) sbInformation.AppendFormat("Directory cache starts at block {0}", rootBlk.extension).AppendLine(); - long blocks = (long)((((partitionEnd - partitionStart) + 1) * imagePlugin.ImageInfo.sectorSize) / blockSize); + long blocks = (long)((((partition.PartitionEndSector - partition.PartitionStartSector) + 1) * imagePlugin.ImageInfo.sectorSize) / blockSize); sbInformation.AppendFormat("Volume block size is {0} bytes", blockSize).AppendLine(); sbInformation.AppendFormat("Volume has {0} blocks", blocks).AppendLine(); diff --git a/DiscImageChef.Filesystems/AppleDOS/AppleDOS.cs b/DiscImageChef.Filesystems/AppleDOS/AppleDOS.cs index e2a00277..f502e3e2 100644 --- a/DiscImageChef.Filesystems/AppleDOS/AppleDOS.cs +++ b/DiscImageChef.Filesystems/AppleDOS/AppleDOS.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems.AppleDOS @@ -79,10 +80,10 @@ namespace DiscImageChef.Filesystems.AppleDOS CurrentEncoding = new Claunia.Encoding.LisaRoman(); } - public AppleDOS(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public AppleDOS(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { device = imagePlugin; - start = partitionStart; + start = partition.PartitionStartSector; Name = "Apple DOS File System"; PluginUUID = new Guid("8658A1E9-B2E7-4BCC-9638-157A31B0A700\n"); if(encoding == null) // TODO: Until Apple ][ encoding is implemented diff --git a/DiscImageChef.Filesystems/AppleDOS/Info.cs b/DiscImageChef.Filesystems/AppleDOS/Info.cs index 6d54cec1..ec3de2a7 100644 --- a/DiscImageChef.Filesystems/AppleDOS/Info.cs +++ b/DiscImageChef.Filesystems/AppleDOS/Info.cs @@ -33,18 +33,19 @@ using System; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems.AppleDOS { public partial class AppleDOS : Filesystem { - public override bool Identify(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.ImageInfo.sectors != 455 && imagePlugin.ImageInfo.sectors != 560) return false; - if(partitionStart > 0 || imagePlugin.ImageInfo.sectorSize != 256) + if(partition.PartitionStartSector > 0 || imagePlugin.ImageInfo.sectorSize != 256) return false; int spt = 0; @@ -63,7 +64,7 @@ namespace DiscImageChef.Filesystems.AppleDOS return vtoc.catalogSector < spt && vtoc.maxTrackSectorPairsPerSector <= 122 && vtoc.sectorsPerTrack == spt && vtoc.bytesPerSector == 256; } - public override void GetInformation(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); diff --git a/DiscImageChef.Filesystems/AppleHFS.cs b/DiscImageChef.Filesystems/AppleHFS.cs index cb010aab..979fd40c 100644 --- a/DiscImageChef.Filesystems/AppleHFS.cs +++ b/DiscImageChef.Filesystems/AppleHFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; namespace DiscImageChef.Filesystems @@ -62,7 +63,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("macintosh"); } - public AppleHFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public AppleHFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Apple Hierarchical File System"; PluginUUID = new Guid("36405F8D-0D26-6ECC-0BBB-1D5225FF404F"); @@ -70,9 +71,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("macintosh"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; byte[] mdb_sector; @@ -80,7 +81,7 @@ namespace DiscImageChef.Filesystems if(imagePlugin.GetSectorSize() == 2352 || imagePlugin.GetSectorSize() == 2448 || imagePlugin.GetSectorSize() == 2048) { - mdb_sector = imagePlugin.ReadSector(2 + partitionStart); + mdb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); if(drSigWord == HFS_MAGIC) @@ -89,7 +90,7 @@ namespace DiscImageChef.Filesystems return drSigWord != HFSP_MAGIC; } - mdb_sector = Read2048SectorAs512(imagePlugin, 2 + partitionStart * 4); + mdb_sector = Read2048SectorAs512(imagePlugin, 2 + partition.PartitionStartSector * 4); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); if(drSigWord == HFS_MAGIC) @@ -103,7 +104,7 @@ namespace DiscImageChef.Filesystems } else { - mdb_sector = imagePlugin.ReadSector(2 + partitionStart); + mdb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); if(drSigWord == HFS_MAGIC) @@ -116,7 +117,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -135,21 +136,21 @@ namespace DiscImageChef.Filesystems if(imagePlugin.GetSectorSize() == 2352 || imagePlugin.GetSectorSize() == 2448 || imagePlugin.GetSectorSize() == 2048) { - mdb_sector = imagePlugin.ReadSector(2 + partitionStart); + mdb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); if(drSigWord == HFS_MAGIC) { - bb_sector = imagePlugin.ReadSector(partitionStart); + bb_sector = imagePlugin.ReadSector(partition.PartitionStartSector); } else { - mdb_sector = Read2048SectorAs512(imagePlugin, 2 + partitionStart * 4); + mdb_sector = Read2048SectorAs512(imagePlugin, 2 + partition.PartitionStartSector * 4); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); if(drSigWord == HFS_MAGIC) { - bb_sector = Read2048SectorAs512(imagePlugin, partitionStart * 4); + bb_sector = Read2048SectorAs512(imagePlugin, partition.PartitionStartSector * 4); APMFromHDDOnCD = true; } else @@ -158,11 +159,11 @@ namespace DiscImageChef.Filesystems } else { - mdb_sector = imagePlugin.ReadSector(2 + partitionStart); + mdb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); drSigWord = BigEndianBitConverter.ToUInt16(mdb_sector, 0); if(drSigWord == HFS_MAGIC) - bb_sector = imagePlugin.ReadSector(partitionStart); + bb_sector = imagePlugin.ReadSector(partition.PartitionStartSector); else return; } diff --git a/DiscImageChef.Filesystems/AppleHFSPlus.cs b/DiscImageChef.Filesystems/AppleHFSPlus.cs index 6b2e0df6..e54979df 100644 --- a/DiscImageChef.Filesystems/AppleHFSPlus.cs +++ b/DiscImageChef.Filesystems/AppleHFSPlus.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,9 +31,10 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; using System.Runtime.InteropServices; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -60,7 +61,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public AppleHFSPlus(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public AppleHFSPlus(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Apple HFS+ filesystem"; PluginUUID = new Guid("36405F8D-0D26-6EBE-436F-62F0586B4F08"); @@ -68,9 +69,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; ushort drSigWord; @@ -81,7 +82,7 @@ namespace DiscImageChef.Filesystems byte[] vh_sector; ulong hfsp_offset; - vh_sector = imagePlugin.ReadSector(2 + partitionStart); // Read volume header, of HFS Wrapper MDB + vh_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); // Read volume header, of HFS Wrapper MDB drSigWord = BigEndianBitConverter.ToUInt16(vh_sector, 0); // Check for HFS Wrapper MDB @@ -109,7 +110,7 @@ namespace DiscImageChef.Filesystems hfsp_offset = 0; } - vh_sector = imagePlugin.ReadSector(2 + partitionStart + hfsp_offset); // Read volume header + vh_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector + hfsp_offset); // Read volume header drSigWord = BigEndianBitConverter.ToUInt16(vh_sector, 0); if(drSigWord == HFSP_MAGIC || drSigWord == HFSX_MAGIC) @@ -117,7 +118,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -131,7 +132,7 @@ namespace DiscImageChef.Filesystems bool wrapped; byte[] vh_sector; - vh_sector = imagePlugin.ReadSector(2 + partitionStart); // Read volume header, of HFS Wrapper MDB + vh_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); // Read volume header, of HFS Wrapper MDB drSigWord = BigEndianBitConverter.ToUInt16(vh_sector, 0); // Check for HFS Wrapper MDB @@ -162,7 +163,7 @@ namespace DiscImageChef.Filesystems wrapped = false; } - vh_sector = imagePlugin.ReadSector(2 + partitionStart + hfsp_offset); // Read volume header + vh_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector + hfsp_offset); // Read volume header HPVH.signature = BigEndianBitConverter.ToUInt16(vh_sector, 0x000); if(HPVH.signature == HFSP_MAGIC || HPVH.signature == HFSX_MAGIC) diff --git a/DiscImageChef.Filesystems/AppleMFS/AppleMFS.cs b/DiscImageChef.Filesystems/AppleMFS/AppleMFS.cs index 07c895e7..3583a537 100644 --- a/DiscImageChef.Filesystems/AppleMFS/AppleMFS.cs +++ b/DiscImageChef.Filesystems/AppleMFS/AppleMFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -32,8 +32,9 @@ using System; using System.Collections.Generic; -using DiscImageChef.ImagePlugins; using System.Text; +using DiscImageChef.CommonTypes; +using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems.AppleMFS { @@ -68,12 +69,12 @@ namespace DiscImageChef.Filesystems.AppleMFS CurrentEncoding = Encoding.GetEncoding("macintosh"); } - public AppleMFS(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public AppleMFS(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Apple Macintosh File System"; PluginUUID = new Guid("36405F8D-0D26-4066-6538-5DBF5D065C3A"); device = imagePlugin; - this.partitionStart = partitionStart; + partitionStart = partition.PartitionStartSector; if(encoding == null) CurrentEncoding = Encoding.GetEncoding("macintosh"); } diff --git a/DiscImageChef.Filesystems/AppleMFS/Info.cs b/DiscImageChef.Filesystems/AppleMFS/Info.cs index af96eb4d..8f0689b2 100644 --- a/DiscImageChef.Filesystems/AppleMFS/Info.cs +++ b/DiscImageChef.Filesystems/AppleMFS/Info.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -32,20 +32,21 @@ using System; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems.AppleMFS { // Information from Inside Macintosh Volume II public partial class AppleMFS : Filesystem { - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { ushort drSigWord; - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; - byte[] mdb_sector = imagePlugin.ReadSector(2 + partitionStart); + byte[] mdb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; @@ -54,7 +55,7 @@ namespace DiscImageChef.Filesystems.AppleMFS return drSigWord == MFS_MAGIC; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -66,8 +67,8 @@ namespace DiscImageChef.Filesystems.AppleMFS byte[] pString = new byte[16]; byte[] variable_size; - byte[] mdb_sector = imagePlugin.ReadSector(2 + partitionStart); - byte[] bb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] mdb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); + byte[] bb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; diff --git a/DiscImageChef.Filesystems/BFS.cs b/DiscImageChef.Filesystems/BFS.cs index 4e03b40e..e350bef1 100644 --- a/DiscImageChef.Filesystems/BFS.cs +++ b/DiscImageChef.Filesystems/BFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -58,7 +59,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public BeFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public BeFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Be Filesystem"; PluginUUID = new Guid("dc8572b3-b6ad-46e4-8de9-cbe123ff6672"); @@ -66,15 +67,15 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; uint magic; uint magic_be; - byte[] sb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] sb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); magic = BitConverter.ToUInt32(sb_sector, 0x20); magic_be = BigEndianBitConverter.ToUInt32(sb_sector, 0x20); @@ -91,7 +92,7 @@ namespace DiscImageChef.Filesystems if(magic == BEFS_MAGIC1 || magic_be == BEFS_MAGIC1) return true; - sb_sector = imagePlugin.ReadSector(1 + partitionStart); + sb_sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); magic = BitConverter.ToUInt32(sb_sector, 0x20); magic_be = BigEndianBitConverter.ToUInt32(sb_sector, 0x20); @@ -101,7 +102,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; byte[] name_bytes = new byte[32]; @@ -110,7 +111,7 @@ namespace DiscImageChef.Filesystems BeSuperBlock besb = new BeSuperBlock(); - byte[] sb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] sb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); BigEndianBitConverter.IsLittleEndian = true; // Default for little-endian @@ -121,7 +122,7 @@ namespace DiscImageChef.Filesystems } else { - sb_sector = imagePlugin.ReadSector(1 + partitionStart); + sb_sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); besb.magic1 = BigEndianBitConverter.ToUInt32(sb_sector, 0x20); if(besb.magic1 == BEFS_MAGIC1 || besb.magic1 == BEFS_CIGAM1) // There is a boot sector @@ -130,7 +131,7 @@ namespace DiscImageChef.Filesystems } else if(sb_sector.Length >= 0x400) { - byte[] temp = imagePlugin.ReadSector(0 + partitionStart); + byte[] temp = imagePlugin.ReadSector(0 + partition.PartitionStartSector); besb.magic1 = BigEndianBitConverter.ToUInt32(temp, 0x220); if(besb.magic1 == BEFS_MAGIC1 || besb.magic1 == BEFS_CIGAM1) // There is a boot sector diff --git a/DiscImageChef.Filesystems/BTRFS.cs b/DiscImageChef.Filesystems/BTRFS.cs index 18d3b656..f82c6616 100644 --- a/DiscImageChef.Filesystems/BTRFS.cs +++ b/DiscImageChef.Filesystems/BTRFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,10 +31,11 @@ // ****************************************************************************/ using System; +using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; -using System.Collections.Generic; namespace DiscImageChef.Filesystems { @@ -52,7 +53,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public BTRFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public BTRFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "B-tree file system"; PluginUUID = new Guid("C904CF15-5222-446B-B7DB-02EAC5D781B3"); @@ -121,18 +122,18 @@ namespace DiscImageChef.Filesystems public Guid uuid; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; ulong sbSectorOff = 0x10000 / imagePlugin.GetSectorSize(); uint sbSectorSize = 0x1000 / imagePlugin.GetSectorSize(); - if((sbSectorOff + sbSectorSize) >= partitionEnd) + if((sbSectorOff + sbSectorSize) >= partition.PartitionEndSector) return false; - byte[] sector = imagePlugin.ReadSectors(sbSectorOff + partitionStart, sbSectorSize); + byte[] sector = imagePlugin.ReadSectors(sbSectorOff + partition.PartitionStartSector, sbSectorSize); SuperBlock btrfsSb; try @@ -149,13 +150,13 @@ namespace DiscImageChef.Filesystems DicConsole.DebugWriteLine("BTRFS Plugin", "sbSectorOff = {0}", sbSectorOff); DicConsole.DebugWriteLine("BTRFS Plugin", "sbSectorSize = {0}", sbSectorSize); - DicConsole.DebugWriteLine("BTRFS Plugin", "partitionStart = {0}", partitionStart); + DicConsole.DebugWriteLine("BTRFS Plugin", "partition.PartitionStartSector = {0}", partition.PartitionStartSector); DicConsole.DebugWriteLine("BTRFS Plugin", "btrfsSb.magic = 0x{0:X16}", btrfsSb.magic); return btrfsSb.magic == btrfsMagic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); xmlFSType = new Schemas.FileSystemType(); @@ -164,7 +165,7 @@ namespace DiscImageChef.Filesystems ulong sbSectorOff = 0x10000 / imagePlugin.GetSectorSize(); uint sbSectorSize = 0x1000 / imagePlugin.GetSectorSize(); - byte[] sector = imagePlugin.ReadSectors(sbSectorOff + partitionStart, sbSectorSize); + byte[] sector = imagePlugin.ReadSectors(sbSectorOff + partition.PartitionStartSector, sbSectorSize); SuperBlock btrfsSb; GCHandle handle = GCHandle.Alloc(sector, GCHandleType.Pinned); diff --git a/DiscImageChef.Filesystems/CBM.cs b/DiscImageChef.Filesystems/CBM.cs index 71af0ba7..6ee6c1c7 100644 --- a/DiscImageChef.Filesystems/CBM.cs +++ b/DiscImageChef.Filesystems/CBM.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = new Claunia.Encoding.PETSCII(); } - public CBM(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public CBM(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Commodore file system"; PluginUUID = new Guid("D104744E-A376-450C-BAC0-1347C93F983B"); @@ -179,9 +180,9 @@ namespace DiscImageChef.Filesystems public short fill3; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart > 0) + if(partition.PartitionStartSector > 0) return false; if(imagePlugin.ImageInfo.sectorSize != 256) @@ -221,7 +222,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { byte[] sector; diff --git a/DiscImageChef.Filesystems/CPM/CPM.cs b/DiscImageChef.Filesystems/CPM/CPM.cs index 9a77248b..f8a4eacf 100644 --- a/DiscImageChef.Filesystems/CPM/CPM.cs +++ b/DiscImageChef.Filesystems/CPM/CPM.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems.CPM @@ -41,8 +42,7 @@ namespace DiscImageChef.Filesystems.CPM { bool mounted; readonly ImagePlugin device; - ulong partStart; - ulong partEnd; + Partition partition; /// /// Stores all known CP/M disk definitions @@ -117,11 +117,10 @@ namespace DiscImageChef.Filesystems.CPM CurrentEncoding = Encoding.GetEncoding("IBM437"); } - public CPM(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public CPM(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { device = imagePlugin; - partStart = partitionStart; - partEnd = partitionEnd; + this.partition = partition; Name = "CP/M File System"; PluginUUID = new Guid("AA2B8585-41DF-4E3B-8A35-D1A935E2F8A1"); if(encoding == null) diff --git a/DiscImageChef.Filesystems/CPM/Info.cs b/DiscImageChef.Filesystems/CPM/Info.cs index f5648d29..865ca16f 100644 --- a/DiscImageChef.Filesystems/CPM/Info.cs +++ b/DiscImageChef.Filesystems/CPM/Info.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; using DiscImageChef.ImagePlugins; @@ -41,7 +42,7 @@ namespace DiscImageChef.Filesystems.CPM { partial class CPM : Filesystem { - public override bool Identify(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugin imagePlugin, Partition partition) { // This will try to identify a CP/M filesystem // However as it contains no identification marks whatsoever it's more something of trial-and-error @@ -61,7 +62,7 @@ namespace DiscImageChef.Filesystems.CPM if(!cpmFound) { // Read CHS = {0,0,1} - sector = imagePlugin.ReadSector(0 + partitionStart); + sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); int amsSbOffset = 0; uint sig1, sig2, sig3; @@ -122,7 +123,7 @@ namespace DiscImageChef.Filesystems.CPM dpb.phm += (byte)Math.Pow(2, i); dpb.spt = (ushort)(amsSb.spt * (sectorSize / 128)); uint directoryLength = (uint)((((ulong)dpb.drm + 1) * 32) / sectorSize); - directory = imagePlugin.ReadSector(firstDirectorySector + partitionStart, directoryLength); + directory = imagePlugin.ReadSector(firstDirectorySector + partition.PartitionStartSector, directoryLength); // Build a CP/M disk definition workingDefinition = new CpmDefinition(); @@ -179,7 +180,7 @@ namespace DiscImageChef.Filesystems.CPM if(!cpmFound) { // Read CHS = {0,0,4} - sector = imagePlugin.ReadSector(3 + partitionStart); + sector = imagePlugin.ReadSector(3 + partition.PartitionStartSector); ushort sum = 0; // Sum of all 16-bit words that make this sector must be 0 @@ -204,8 +205,8 @@ namespace DiscImageChef.Filesystems.CPM // If volume size corresponds with working partition (this variant will be inside MBR partitioning) if(sectorSize == imagePlugin.GetSectorSize() && - startingSector == partitionStart && - sectorsInPartition + partitionStart <= partitionEnd) + startingSector == partition.PartitionStartSector && + sectorsInPartition + partition.PartitionStartSector <= partition.PartitionEndSector) { cpmFound = true; firstDirectorySector = (ulong)((hddSb.off * hddSb.sectorsPerTrack)); @@ -225,7 +226,7 @@ namespace DiscImageChef.Filesystems.CPM dpb.psh = 0; // Needed? dpb.spt = hddSb.spt; uint directoryLength = (uint)((((ulong)dpb.drm + 1) * 32) / sectorSize); - directory = imagePlugin.ReadSector(firstDirectorySector + partitionStart, directoryLength); + directory = imagePlugin.ReadSector(firstDirectorySector + partition.PartitionStartSector, directoryLength); DicConsole.DebugWriteLine("CP/M Plugin", "Found CP/M-86 hard disk superblock."); // Build a CP/M disk definition @@ -267,7 +268,7 @@ namespace DiscImageChef.Filesystems.CPM if(!cpmFound) { // Read CHS = {0,0,1} - sector = imagePlugin.ReadSector(0 + partitionStart); + sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); byte formatByte; // Check for alternate location of format ID @@ -649,7 +650,7 @@ namespace DiscImageChef.Filesystems.CPM if(cpmFound) { uint directoryLength = (uint)((((ulong)dpb.drm + 1) * 32) / imagePlugin.GetSectorSize()); - directory = imagePlugin.ReadSector(firstDirectorySector86 + partitionStart, directoryLength); + directory = imagePlugin.ReadSector(firstDirectorySector86 + partition.PartitionStartSector, directoryLength); DicConsole.DebugWriteLine("CP/M Plugin", "Found CP/M-86 floppy identifier."); } } @@ -740,7 +741,7 @@ namespace DiscImageChef.Filesystems.CPM MemoryStream ms = new MemoryStream(); for(int p = 0; p < dirLen; p++) { - byte[] dirSector = imagePlugin.ReadSector((ulong)((int)offset + (int)partitionStart + (p / sectorMask.Length) * sectorMask.Length + sectorMask[p % sectorMask.Length])); + byte[] dirSector = imagePlugin.ReadSector((ulong)((int)offset + (int)partition.PartitionStartSector + (p / sectorMask.Length) * sectorMask.Length + sectorMask[p % sectorMask.Length])); ms.Write(dirSector, 0, dirSector.Length); } directory = ms.ToArray(); @@ -842,11 +843,11 @@ namespace DiscImageChef.Filesystems.CPM } } - public override void GetInformation(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; // As the identification is so complex, just call Identify() and relay on its findings - if(!Identify(imagePlugin, partitionStart, partitionEnd) || !cpmFound || workingDefinition == null || dpb == null) + if(!Identify(imagePlugin, partition) || !cpmFound || workingDefinition == null || dpb == null) return; StringBuilder sb = new StringBuilder(); @@ -922,7 +923,7 @@ namespace DiscImageChef.Filesystems.CPM if(dpb.dsm > 0) xmlFSType.Clusters = ((dpb.dsm + 1) * 128) / (128 << dpb.bsh); else - xmlFSType.Clusters = (long)(partitionEnd - partitionStart); + xmlFSType.Clusters = (long)(partition.PartitionEndSector - partition.PartitionStartSector); if(labelCreationDate != null) { xmlFSType.CreationDate = DateHandlers.CPMToDateTime(labelCreationDate); diff --git a/DiscImageChef.Filesystems/CPM/Super.cs b/DiscImageChef.Filesystems/CPM/Super.cs index b9c11c28..76c428ae 100644 --- a/DiscImageChef.Filesystems/CPM/Super.cs +++ b/DiscImageChef.Filesystems/CPM/Super.cs @@ -51,7 +51,7 @@ namespace DiscImageChef.Filesystems.CPM public override Errno Mount(bool debug) { // As the identification is so complex, just call Identify() and relay on its findings - if(!Identify(device, partStart, partEnd) || !cpmFound || workingDefinition == null || dpb == null) + if(!Identify(device, partition) || !cpmFound || workingDefinition == null || dpb == null) return Errno.InvalidArgument; // Build the software interleaving sector mask @@ -111,9 +111,9 @@ namespace DiscImageChef.Filesystems.CPM { DicConsole.DebugWriteLine("CP/M Plugin", "Deinterleaving whole volume."); - for(int p = 0; p <= (int)(partEnd - partStart); p++) + for(int p = 0; p <= (int)(partition.PartitionEndSector - partition.PartitionStartSector); p++) { - byte[] readSector = device.ReadSector((ulong)((int)partStart + (p / sectorMask.Length) * sectorMask.Length + sectorMask[p % sectorMask.Length])); + byte[] readSector = device.ReadSector((ulong)((int)partition.PartitionStartSector + (p / sectorMask.Length) * sectorMask.Length + sectorMask[p % sectorMask.Length])); if(workingDefinition.complement) { for(int b = 0; b < readSector.Length; b++) diff --git a/DiscImageChef.Filesystems/Cram.cs b/DiscImageChef.Filesystems/Cram.cs index b6108e72..31fc6bff 100644 --- a/DiscImageChef.Filesystems/Cram.cs +++ b/DiscImageChef.Filesystems/Cram.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,7 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; -using System.Security.Policy; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -47,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public Cram(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public Cram(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Cram filesystem"; PluginUUID = new Guid("F8F6E46F-7A2A-48E3-9C0A-46AF4DC29E09"); @@ -87,21 +87,21 @@ namespace DiscImageChef.Filesystems const uint Cram_MAGIC = 0x28CD3D45; const uint Cram_CIGAM = 0x453DCD28; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); uint magic = BitConverter.ToUInt32(sector, 0x00); return magic == Cram_MAGIC || magic == Cram_CIGAM; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); uint magic = BitConverter.ToUInt32(sector, 0x00); CramSuperBlock crSb = new CramSuperBlock(); diff --git a/DiscImageChef.Filesystems/ECMA67.cs b/DiscImageChef.Filesystems/ECMA67.cs index bce64bdc..60149c58 100644 --- a/DiscImageChef.Filesystems/ECMA67.cs +++ b/DiscImageChef.Filesystems/ECMA67.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -35,6 +35,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems @@ -48,7 +49,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public ECMA67(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public ECMA67(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "ECMA-67"; PluginUUID = new Guid("62A2D44A-CBC1-4377-B4B6-28C5C92034A1"); @@ -85,12 +86,12 @@ namespace DiscImageChef.Filesystems public byte[] reserved5; } - public override bool Identify(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugin imagePlugin, Partition partition) { - if(partitionStart > 0) + if(partition.PartitionStartSector > 0) return false; - if(partitionEnd < 8) + if(partition.PartitionEndSector < 8) return false; byte[] sector = imagePlugin.ReadSector(6); @@ -107,7 +108,7 @@ namespace DiscImageChef.Filesystems return ECMA67_Magic.SequenceEqual(vol.labelIdentifier) && vol.labelNumber == 1 && vol.recordLength == 0x31; } - public override void GetInformation(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugin imagePlugin, Partition partition, out string information) { byte[] sector = imagePlugin.ReadSector(6); @@ -127,7 +128,7 @@ namespace DiscImageChef.Filesystems xmlFSType = new Schemas.FileSystemType(); xmlFSType.Type = "ECMA-67"; xmlFSType.ClusterSize = 256; - xmlFSType.Clusters = (long)(partitionEnd - partitionStart + 1); + xmlFSType.Clusters = (long)(partition.PartitionEndSector - partition.PartitionStartSector + 1); xmlFSType.VolumeName = Encoding.ASCII.GetString(vol.volumeIdentifier); information = sbInformation.ToString(); diff --git a/DiscImageChef.Filesystems/F2FS.cs b/DiscImageChef.Filesystems/F2FS.cs index 59dac7ad..b0726c68 100644 --- a/DiscImageChef.Filesystems/F2FS.cs +++ b/DiscImageChef.Filesystems/F2FS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -115,7 +116,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.Unicode; } - public F2FS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public F2FS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "F2FS Plugin"; PluginUUID = new Guid("82B0920F-5F0D-4063-9F57-ADE0AE02ECE5"); @@ -123,7 +124,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.Unicode; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < F2FS_MinSector || imagePlugin.GetSectorSize() > F2FS_MaxSector) return false; @@ -138,7 +139,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(f2fsSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(f2fsSb)) return false; @@ -150,7 +151,7 @@ namespace DiscImageChef.Filesystems return f2fsSb.magic == F2FS_Magic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < F2FS_MinSector || imagePlugin.GetSectorSize() > F2FS_MaxSector) @@ -166,7 +167,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(f2fsSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(f2fsSb)) return; diff --git a/DiscImageChef.Filesystems/FAT.cs b/DiscImageChef.Filesystems/FAT.cs index 2b306545..b54de39c 100644 --- a/DiscImageChef.Filesystems/FAT.cs +++ b/DiscImageChef.Filesystems/FAT.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,15 +31,15 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; -using DiscImageChef.Console; using System.Runtime.InteropServices; +using System.Text; +using DiscImageChef.CommonTypes; +using DiscImageChef.Console; namespace DiscImageChef.Filesystems { - // TODO: Implement detecting DOS bootable disks - // TODO: Implement detecting Atari TOS bootable disks and printing corresponding fields + // TODO: Differentiate between Atari and X68k FAT, as this one uses a standard BPB. public class FAT : Filesystem { public FAT() @@ -49,7 +49,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("IBM437"); } - public FAT(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public FAT(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Microsoft File Allocation Table"; PluginUUID = new Guid("33513B2C-0D26-0D2D-32C3-79D8611158E0"); @@ -57,9 +57,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("IBM437"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; ushort bps; @@ -81,8 +81,8 @@ namespace DiscImageChef.Filesystems byte[] atari_oem = new byte[6]; ushort bootable = 0; - byte[] bpb_sector = imagePlugin.ReadSector(0 + partitionStart); - byte[] fat_sector = imagePlugin.ReadSector(1 + partitionStart); + byte[] bpb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); + byte[] fat_sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); Array.Copy(bpb_sector, 0x02, atari_oem, 0, 6); Array.Copy(bpb_sector, 0x03, dos_oem, 0, 8); @@ -145,7 +145,7 @@ namespace DiscImageChef.Filesystems // HPFS uint hpfs_magic1, hpfs_magic2; - byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partitionStart); // Seek to superblock, on logical sector 16 + byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partition.PartitionStartSector); // Seek to superblock, on logical sector 16 hpfs_magic1 = BitConverter.ToUInt32(hpfs_sb_sector, 0x000); hpfs_magic2 = BitConverter.ToUInt32(hpfs_sb_sector, 0x004); @@ -157,20 +157,20 @@ namespace DiscImageChef.Filesystems return true; // short FAT32 if(bits_in_bps == 1 && correct_spc && fats_no <= 2 && sectors == 0 && fat_sectors == 0 && fat32_signature == 0x28) - return big_sectors == 0 ? huge_sectors <= (partitionEnd - partitionStart) + 1 : big_sectors <= (partitionEnd - partitionStart) + 1; + return big_sectors == 0 ? huge_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1 : big_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1; // MSX-DOS FAT12 - if(bits_in_bps == 1 && correct_spc && fats_no <= 2 && root_entries > 0 && sectors <= (partitionEnd - partitionStart) + 1 && fat_sectors > 0 && msx_string == "VOL_ID") + if(bits_in_bps == 1 && correct_spc && fats_no <= 2 && root_entries > 0 && sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1 && fat_sectors > 0 && msx_string == "VOL_ID") return true; // EBPB if(bits_in_bps == 1 && correct_spc && fats_no <= 2 && root_entries > 0 && fat_sectors > 0 && (bpb_signature == 0x28 || bpb_signature == 0x29)) - return sectors == 0 ? big_sectors <= (partitionEnd - partitionStart) + 1 : sectors <= (partitionEnd - partitionStart) + 1; + return sectors == 0 ? big_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1 : sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1; // BPB - if(bits_in_bps == 1 && correct_spc && reserved_secs < (partitionEnd - partitionStart) && fats_no <= 2 && root_entries > 0 && fat_sectors > 0) - return sectors == 0 ? big_sectors <= (partitionEnd - partitionStart) + 1 : sectors <= (partitionEnd - partitionStart) + 1; + if(bits_in_bps == 1 && correct_spc && reserved_secs < (partition.PartitionEndSector - partition.PartitionStartSector) && fats_no <= 2 && root_entries > 0 && fat_sectors > 0) + return sectors == 0 ? big_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1 : sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1; // All FAT12 without BPB can only be used on floppies, without partitions. - if(partitionStart != 0) + if(partition.PartitionStartSector != 0) return false; byte fat2 = fat_sector[1]; @@ -218,7 +218,7 @@ namespace DiscImageChef.Filesystems break; } - if(fat2_sector_no > partitionEnd) + if(fat2_sector_no > partition.PartitionEndSector) return false; DicConsole.DebugWriteLine("FAT plugin", "2nd fat starts at = {0}", fat2_sector_no); @@ -234,7 +234,7 @@ namespace DiscImageChef.Filesystems return fat_id == fat2_sector[0]; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -263,7 +263,7 @@ namespace DiscImageChef.Filesystems FAT32ParameterBlockShort shortFat32BPB = new FAT32ParameterBlockShort(); FAT32ParameterBlock Fat32BPB = new FAT32ParameterBlock(); - byte[] bpb_sector = imagePlugin.ReadSector(partitionStart); + byte[] bpb_sector = imagePlugin.ReadSector(partition.PartitionStartSector); if(imagePlugin.ImageInfo.sectorSize >= 512) { @@ -313,9 +313,9 @@ namespace DiscImageChef.Filesystems else if(bits_in_bps_fat32_short == 1 && correct_spc_fat32_short && shortFat32BPB.fats_no <= 2 && shortFat32BPB.sectors == 0 && shortFat32BPB.spfat == 0 && shortFat32BPB.signature == 0x28) { DicConsole.DebugWriteLine("FAT plugin", "Using short FAT32 BPB"); - useShortFAT32 = shortFat32BPB.big_sectors == 0 ? shortFat32BPB.huge_sectors <= (partitionEnd - partitionStart) + 1 : shortFat32BPB.big_sectors <= (partitionEnd - partitionStart) + 1; + useShortFAT32 = shortFat32BPB.big_sectors == 0 ? shortFat32BPB.huge_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1 : shortFat32BPB.big_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1; } - else if(bits_in_bps_msx == 1 && correct_spc_msx && msxBPB.fats_no <= 2 && msxBPB.root_ent > 0 && msxBPB.sectors <= (partitionEnd - partitionStart) + 1 && msxBPB.spfat > 0 && Encoding.ASCII.GetString(msxBPB.vol_id) == "VOL_ID") + else if(bits_in_bps_msx == 1 && correct_spc_msx && msxBPB.fats_no <= 2 && msxBPB.root_ent > 0 && msxBPB.sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1 && msxBPB.spfat > 0 && Encoding.ASCII.GetString(msxBPB.vol_id) == "VOL_ID") { DicConsole.DebugWriteLine("FAT plugin", "Using MSX BPB"); useMSXBPB = true; @@ -324,7 +324,7 @@ namespace DiscImageChef.Filesystems { if(EBPB.sectors == 0) { - if(EBPB.big_sectors <= (partitionEnd - partitionStart) + 1) + if(EBPB.big_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1) { if(EBPB.signature == 0x29) { @@ -338,7 +338,7 @@ namespace DiscImageChef.Filesystems } } } - else if(EBPB.sectors <= (partitionEnd - partitionStart) + 1) + else if(EBPB.sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1) { if(EBPB.signature == 0x29) { @@ -352,14 +352,14 @@ namespace DiscImageChef.Filesystems } } } - else if(bits_in_bps_dos33 == 1 && correct_spc_dos33 && dos33BPB.rsectors < (partitionEnd - partitionStart) && dos33BPB.fats_no <= 2 && dos33BPB.root_ent > 0 && dos33BPB.spfat > 0) + else if(bits_in_bps_dos33 == 1 && correct_spc_dos33 && dos33BPB.rsectors < (partition.PartitionEndSector - partition.PartitionStartSector) && dos33BPB.fats_no <= 2 && dos33BPB.root_ent > 0 && dos33BPB.spfat > 0) { - if(dos33BPB.sectors == 0 && dos33BPB.hsectors <= partitionStart && dos33BPB.big_sectors > 0 && dos33BPB.big_sectors <= (partitionEnd - partitionStart) + 1) + if(dos33BPB.sectors == 0 && dos33BPB.hsectors <= partition.PartitionStartSector && dos33BPB.big_sectors > 0 && dos33BPB.big_sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1) { DicConsole.DebugWriteLine("FAT plugin", "Using DOS 3.3 BPB"); useDOS33BPB = true; } - else if(dos33BPB.big_sectors == 0 && dos33BPB.hsectors <= partitionStart && dos33BPB.sectors > 0 && dos33BPB.sectors <= (partitionEnd - partitionStart) + 1) + else if(dos33BPB.big_sectors == 0 && dos33BPB.hsectors <= partition.PartitionStartSector && dos33BPB.sectors > 0 && dos33BPB.sectors <= (partition.PartitionEndSector - partition.PartitionStartSector) + 1) { if(atariBPB.jump[0] == 0x60 || (atariBPB.jump[0] == 0xE9 && atariBPB.jump[1] == 0x00) && Encoding.ASCII.GetString(dos33BPB.oem_name) != "NEXT ") { @@ -374,7 +374,7 @@ namespace DiscImageChef.Filesystems } else { - if(dos32BPB.hsectors <= partitionStart && dos32BPB.hsectors + dos32BPB.sectors == dos32BPB.total_sectors) + if(dos32BPB.hsectors <= partition.PartitionStartSector && dos32BPB.hsectors + dos32BPB.sectors == dos32BPB.total_sectors) { DicConsole.DebugWriteLine("FAT plugin", "Using DOS 3.2 BPB"); useDOS32BPB = true; @@ -429,7 +429,7 @@ namespace DiscImageChef.Filesystems if(!useAtariBPB && !useMSXBPB && !useDOS2BPB && !useDOS3BPB && !useDOS32BPB && !useDOS33BPB && !useShortEBPB && !useEBPB && !useShortFAT32 && !useLongFAT32) { isFAT12 = true; - fat_sector = imagePlugin.ReadSector(1 + partitionStart); + fat_sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); switch(fat_sector[0]) { case 0xE5: @@ -671,9 +671,9 @@ namespace DiscImageChef.Filesystems root_directory_sector = (ulong)((Fat32BPB.root_cluster - 2) * Fat32BPB.spc + Fat32BPB.big_spfat * Fat32BPB.fats_no + Fat32BPB.rsectors) * sectors_per_real_sector; sectors_for_root_directory = 1; - if(Fat32BPB.fsinfo_sector + partitionStart <= partitionEnd) + if(Fat32BPB.fsinfo_sector + partition.PartitionStartSector <= partition.PartitionEndSector) { - byte[] fsinfo_sector = imagePlugin.ReadSector(Fat32BPB.fsinfo_sector + partitionStart); + byte[] fsinfo_sector = imagePlugin.ReadSector(Fat32BPB.fsinfo_sector + partition.PartitionStartSector); IntPtr fsinfo_ptr = Marshal.AllocHGlobal(512); Marshal.Copy(fsinfo_sector, 0, fsinfo_ptr, 512); FSInfoSector fs_info = (FSInfoSector)Marshal.PtrToStructure(fsinfo_ptr, typeof(FSInfoSector)); @@ -874,7 +874,7 @@ namespace DiscImageChef.Filesystems if(!isFAT12 && !isFAT16) { sectors_per_real_sector = fakeBPB.bps / imagePlugin.ImageInfo.sectorSize; - fat_sector = imagePlugin.ReadSector((fakeBPB.rsectors + partitionStart) * sectors_per_real_sector); + fat_sector = imagePlugin.ReadSector((fakeBPB.rsectors + partition.PartitionStartSector) * sectors_per_real_sector); ulong clusters; if(fakeBPB.sectors == 0) @@ -971,7 +971,7 @@ namespace DiscImageChef.Filesystems sb.AppendFormat("{0} heads.", fakeBPB.heads).AppendLine(); } - if(fakeBPB.hsectors <= partitionStart) + if(fakeBPB.hsectors <= partition.PartitionStartSector) sb.AppendFormat("{0} hidden sectors before BPB.", fakeBPB.hsectors).AppendLine(); if(fakeBPB.signature == 0x28 || fakeBPB.signature == 0x29) @@ -1017,9 +1017,9 @@ namespace DiscImageChef.Filesystems if(extraInfo != null) sb.Append(extraInfo); - if(root_directory_sector + partitionStart < partitionEnd) + if(root_directory_sector + partition.PartitionStartSector < partition.PartitionEndSector) { - byte[] root_directory = imagePlugin.ReadSectors(root_directory_sector + partitionStart, sectors_for_root_directory); + byte[] root_directory = imagePlugin.ReadSectors(root_directory_sector + partition.PartitionStartSector, sectors_for_root_directory); for(int i = 0; i < root_directory.Length; i += 32) { // Not a correct entry diff --git a/DiscImageChef.Filesystems/FATX.cs b/DiscImageChef.Filesystems/FATX.cs index d136766b..802f72c2 100644 --- a/DiscImageChef.Filesystems/FATX.cs +++ b/DiscImageChef.Filesystems/FATX.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -57,7 +58,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public FATX(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public FATX(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "FATX Filesystem Plugin"; PluginUUID = new Guid("ED27A721-4A17-4649-89FD-33633B46E228"); @@ -65,20 +66,20 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < 512) return false; FATX_Superblock fatxSb = new FATX_Superblock(); - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); fatxSb = BigEndianMarshal.ByteArrayToStructureBigEndian(sector); return fatxSb.magic == FATX_Magic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < 512) @@ -86,7 +87,7 @@ namespace DiscImageChef.Filesystems FATX_Superblock fatxSb = new FATX_Superblock(); - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); fatxSb = BigEndianMarshal.ByteArrayToStructureBigEndian(sector); @@ -105,7 +106,7 @@ namespace DiscImageChef.Filesystems xmlFSType = new Schemas.FileSystemType(); xmlFSType.Type = "FATX filesystem"; xmlFSType.ClusterSize = (int)(fatxSb.sectorsPerCluster * imagePlugin.ImageInfo.sectorSize); - xmlFSType.Clusters = (long)((partitionEnd - partitionStart + 1) * imagePlugin.ImageInfo.sectorSize / (ulong)xmlFSType.ClusterSize); + xmlFSType.Clusters = (long)((partition.PartitionEndSector - partition.PartitionStartSector + 1) * imagePlugin.ImageInfo.sectorSize / (ulong)xmlFSType.ClusterSize); } public override Errno Mount() diff --git a/DiscImageChef.Filesystems/FFS.cs b/DiscImageChef.Filesystems/FFS.cs index 6d1287c0..c4f82eec 100644 --- a/DiscImageChef.Filesystems/FFS.cs +++ b/DiscImageChef.Filesystems/FFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,12 +31,13 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; -using DiscImageChef.Console; -using ufs_daddr_t = System.Int32; -using time_t = System.Int32; using System.Runtime.InteropServices; +using System.Text; +using DiscImageChef.CommonTypes; +using DiscImageChef.Console; +using time_t = System.Int32; +using ufs_daddr_t = System.Int32; namespace DiscImageChef.Filesystems { @@ -50,7 +51,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public FFSPlugin(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public FFSPlugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "BSD Fast File System (aka UNIX File System, UFS)"; PluginUUID = new Guid("CC90D342-05DB-48A8-988C-C1FE000034A3"); @@ -58,9 +59,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; uint magic; @@ -72,45 +73,45 @@ namespace DiscImageChef.Filesystems else sb_size_in_sectors = block_size / imagePlugin.GetSectorSize(); - if(partitionEnd > (partitionStart + sb_start_floppy * sb_size_in_sectors + sb_size_in_sectors)) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_floppy * sb_size_in_sectors + sb_size_in_sectors)) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_floppy * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_floppy * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) return true; } - if(partitionEnd > (partitionStart + sb_start_ufs1 * sb_size_in_sectors + sb_size_in_sectors)) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_ufs1 * sb_size_in_sectors + sb_size_in_sectors)) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_ufs1 * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_ufs1 * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) return true; } - if(partitionEnd > (partitionStart + sb_start_ufs2 * sb_size_in_sectors + sb_size_in_sectors)) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_ufs2 * sb_size_in_sectors + sb_size_in_sectors)) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_ufs2 * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_ufs2 * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) return true; } - if(partitionEnd > (partitionStart + sb_start_piggy * sb_size_in_sectors + sb_size_in_sectors)) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_piggy * sb_size_in_sectors + sb_size_in_sectors)) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_piggy * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_piggy * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) return true; } - if(partitionEnd > (partitionStart + sb_start_atari / imagePlugin.GetSectorSize() + sb_size_in_sectors)) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_atari / imagePlugin.GetSectorSize() + sb_size_in_sectors)) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + (sb_start_atari / imagePlugin.GetSectorSize()), sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + (sb_start_atari / imagePlugin.GetSectorSize()), sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) @@ -120,7 +121,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sbInformation = new StringBuilder(); @@ -128,7 +129,7 @@ namespace DiscImageChef.Filesystems uint magic = 0; uint sb_size_in_sectors; byte[] ufs_sb_sectors; - ulong sb_offset = partitionStart; + ulong sb_offset = partition.PartitionStartSector; bool fs_type_42bsd = false; bool fs_type_43bsd = false; bool fs_type_44bsd = false; @@ -142,57 +143,57 @@ namespace DiscImageChef.Filesystems else sb_size_in_sectors = block_size / imagePlugin.GetSectorSize(); - if(partitionEnd > (partitionStart + sb_start_floppy * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_floppy * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_floppy * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_floppy * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) - sb_offset = partitionStart + sb_start_floppy * sb_size_in_sectors; + sb_offset = partition.PartitionStartSector + sb_start_floppy * sb_size_in_sectors; else magic = 0; } - if(partitionEnd > (partitionStart + sb_start_ufs1 * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_ufs1 * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_ufs1 * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_ufs1 * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) - sb_offset = partitionStart + sb_start_ufs1 * sb_size_in_sectors; + sb_offset = partition.PartitionStartSector + sb_start_ufs1 * sb_size_in_sectors; else magic = 0; } - if(partitionEnd > (partitionStart + sb_start_ufs2 * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_ufs2 * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_ufs2 * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_ufs2 * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) - sb_offset = partitionStart + sb_start_ufs2 * sb_size_in_sectors; + sb_offset = partition.PartitionStartSector + sb_start_ufs2 * sb_size_in_sectors; else magic = 0; } - if(partitionEnd > (partitionStart + sb_start_piggy * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_piggy * sb_size_in_sectors + sb_size_in_sectors) && magic == 0) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_piggy * sb_size_in_sectors, sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_piggy * sb_size_in_sectors, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) - sb_offset = partitionStart + sb_start_piggy * sb_size_in_sectors; + sb_offset = partition.PartitionStartSector + sb_start_piggy * sb_size_in_sectors; else magic = 0; } - if(partitionEnd > (partitionStart + sb_start_atari / imagePlugin.GetSectorSize() + sb_size_in_sectors) && magic == 0) + if(partition.PartitionEndSector > (partition.PartitionStartSector + sb_start_atari / imagePlugin.GetSectorSize() + sb_size_in_sectors) && magic == 0) { - ufs_sb_sectors = imagePlugin.ReadSectors(partitionStart + sb_start_atari / imagePlugin.GetSectorSize(), sb_size_in_sectors); + ufs_sb_sectors = imagePlugin.ReadSectors(partition.PartitionStartSector + sb_start_atari / imagePlugin.GetSectorSize(), sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(ufs_sb_sectors, 0x055C); if(magic == UFS_MAGIC || magic == UFS_MAGIC_BW || magic == UFS2_MAGIC || magic == UFS_CIGAM || magic == UFS_BAD_MAGIC) - sb_offset = partitionStart + sb_start_atari / imagePlugin.GetSectorSize(); + sb_offset = partition.PartitionStartSector + sb_start_atari / imagePlugin.GetSectorSize(); else magic = 0; } diff --git a/DiscImageChef.Filesystems/Filesystem.cs b/DiscImageChef.Filesystems/Filesystem.cs index 517c4abe..d5fa2e9b 100644 --- a/DiscImageChef.Filesystems/Filesystem.cs +++ b/DiscImageChef.Filesystems/Filesystem.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -68,10 +69,9 @@ namespace DiscImageChef.Filesystems /// Initializes a filesystem instance prepared for reading contents /// /// Image plugin. - /// Partition start. - /// Partition end. + /// Partition. /// Which encoding to use for this filesystem. - protected Filesystem(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + protected Filesystem(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { } @@ -79,19 +79,17 @@ namespace DiscImageChef.Filesystems /// Identifies the filesystem in the specified LBA /// /// Disk image. - /// Partition start sector (LBA). - /// Partition end sector (LBA). + /// Partition. /// true, if the filesystem is recognized, false otherwise. - public abstract bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd); + public abstract bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition); /// /// Gets information about the identified filesystem. /// /// Disk image. - /// Partition start sector (LBA). - /// Partition end sector (LBA). + /// Partition. /// Filesystem information. - public abstract void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information); + public abstract void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information); /// /// Initializates whatever internal structures the filesystem plugin needs to be able to read files and directories from the filesystem. diff --git a/DiscImageChef.Filesystems/HPFS.cs b/DiscImageChef.Filesystems/HPFS.cs index 236562c1..200eedf1 100644 --- a/DiscImageChef.Filesystems/HPFS.cs +++ b/DiscImageChef.Filesystems/HPFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,10 +31,11 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; using System.Runtime.InteropServices; +using System.Text; using DiscImageChef.Checksums; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -48,7 +49,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("ibm850"); } - public HPFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public HPFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "OS/2 High Performance File System"; PluginUUID = new Guid("33513B2C-f590-4acb-8bf2-0b1d5e19dec5"); @@ -56,9 +57,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("ibm850"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; if(imagePlugin.ImageInfo.sectors <= 16) @@ -66,7 +67,7 @@ namespace DiscImageChef.Filesystems uint magic1, magic2; - byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partitionStart); // Seek to superblock, on logical sector 16 + byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partition.PartitionStartSector); // Seek to superblock, on logical sector 16 magic1 = BitConverter.ToUInt32(hpfs_sb_sector, 0x000); magic2 = BitConverter.ToUInt32(hpfs_sb_sector, 0x004); @@ -75,7 +76,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -88,9 +89,9 @@ namespace DiscImageChef.Filesystems byte[] oem_name = new byte[8]; byte[] volume_name = new byte[11]; - byte[] hpfs_bpb_sector = imagePlugin.ReadSector(0 + partitionStart); // Seek to BIOS parameter block, on logical sector 0 - byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partitionStart); // Seek to superblock, on logical sector 16 - byte[] hpfs_sp_sector = imagePlugin.ReadSector(17 + partitionStart); // Seek to spareblock, on logical sector 17 + byte[] hpfs_bpb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); // Seek to BIOS parameter block, on logical sector 0 + byte[] hpfs_sb_sector = imagePlugin.ReadSector(16 + partition.PartitionStartSector); // Seek to superblock, on logical sector 16 + byte[] hpfs_sp_sector = imagePlugin.ReadSector(17 + partition.PartitionStartSector); // Seek to spareblock, on logical sector 17 IntPtr bpbPtr = Marshal.AllocHGlobal(512); Marshal.Copy(hpfs_bpb_sector, 0, bpbPtr, 512); diff --git a/DiscImageChef.Filesystems/ISO9660.cs b/DiscImageChef.Filesystems/ISO9660.cs index 4b382988..e35040d5 100644 --- a/DiscImageChef.Filesystems/ISO9660.cs +++ b/DiscImageChef.Filesystems/ISO9660.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,12 +31,12 @@ // ****************************************************************************/ using System; +using System.Collections.Generic; using System.Globalization; using System.Text; -using System.Collections.Generic; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; - namespace DiscImageChef.Filesystems { // This is coded following ECMA-119. @@ -54,7 +54,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.ASCII; } - public ISO9660Plugin(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public ISO9660Plugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "ISO9660 Filesystem"; PluginUUID = new Guid("d812f4d3-c357-400d-90fd-3b22ef786aa8"); @@ -79,7 +79,7 @@ namespace DiscImageChef.Filesystems public DateTime EffectiveTime; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { /* if (alreadyLaunched) return false; @@ -92,11 +92,11 @@ namespace DiscImageChef.Filesystems return false; // ISO9660 Primary Volume Descriptor starts at sector 16, so that's minimal size. - if(partitionEnd <= (16 + partitionStart)) + if(partition.PartitionEndSector <= (16 + partition.PartitionStartSector)) return false; // Read to Volume Descriptor - byte[] vd_sector = imagePlugin.ReadSector(16 + partitionStart); + byte[] vd_sector = imagePlugin.ReadSector(16 + partition.PartitionStartSector); int xa_off = 0; if(vd_sector.Length == 2336) @@ -116,7 +116,7 @@ namespace DiscImageChef.Filesystems return CurrentEncoding.GetString(VDMagic) == "CD001"; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder ISOMetadata = new StringBuilder(); @@ -159,7 +159,7 @@ namespace DiscImageChef.Filesystems return; // ISO9660 Primary Volume Descriptor starts at sector 16, so that's minimal size. - if(partitionEnd < 16) + if(partition.PartitionEndSector < 16) return; ulong counter = 0; @@ -168,8 +168,8 @@ namespace DiscImageChef.Filesystems { DicConsole.DebugWriteLine("ISO9660 plugin", "Processing VD loop no. {0}", counter); // Seek to Volume Descriptor - DicConsole.DebugWriteLine("ISO9660 plugin", "Reading sector {0}", 16 + counter + partitionStart); - byte[] vd_sector_tmp = imagePlugin.ReadSector(16 + counter + partitionStart); + DicConsole.DebugWriteLine("ISO9660 plugin", "Reading sector {0}", 16 + counter + partition.PartitionStartSector); + byte[] vd_sector_tmp = imagePlugin.ReadSector(16 + counter + partition.PartitionStartSector); byte[] vd_sector; if(vd_sector_tmp.Length == 2336) { @@ -286,16 +286,16 @@ namespace DiscImageChef.Filesystems ulong i = (ulong)BitConverter.ToInt32(VDPathTableStart, 0); - DicConsole.DebugWriteLine("ISO9660 plugin", "VDPathTableStart = {0} + {1} = {2}", i, partitionStart, i + partitionStart); + DicConsole.DebugWriteLine("ISO9660 plugin", "VDPathTableStart = {0} + {1} = {2}", i, partition.PartitionStartSector, i + partition.PartitionStartSector); // TODO: Check this - if((i + partitionStart) < partitionEnd) + if((i + partition.PartitionStartSector) < partition.PartitionEndSector) { - byte[] path_table = imagePlugin.ReadSector(i + partitionStart); + byte[] path_table = imagePlugin.ReadSector(i + partition.PartitionStartSector); Array.Copy(path_table, 2, RootDirectoryLocation, 0, 4); // Check for Rock Ridge - byte[] root_dir = imagePlugin.ReadSector((ulong)BitConverter.ToInt32(RootDirectoryLocation, 0) + partitionStart); + byte[] root_dir = imagePlugin.ReadSector((ulong)BitConverter.ToInt32(RootDirectoryLocation, 0) + partition.PartitionStartSector); byte[] SUSPMagic = new byte[2]; byte[] RRMagic = new byte[2]; @@ -316,7 +316,7 @@ namespace DiscImageChef.Filesystems StringBuilder IPBinInformation = new StringBuilder(); byte[] SegaHardwareID = new byte[16]; - byte[] ipbin_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] ipbin_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); Array.Copy(ipbin_sector, 0x000, SegaHardwareID, 0, 16); DicConsole.DebugWriteLine("ISO9660 plugin", "SegaHardwareID = \"{0}\"", CurrentEncoding.GetString(SegaHardwareID)); @@ -984,7 +984,7 @@ namespace DiscImageChef.Filesystems } xmlFSType.Bootable |= Bootable || SegaCD || Saturn || Dreamcast; - xmlFSType.Clusters = (long)(partitionEnd - partitionStart + 1); + xmlFSType.Clusters = (long)(partition.PartitionEndSector - partition.PartitionStartSector + 1); xmlFSType.ClusterSize = 2048; information = ISOMetadata.ToString(); diff --git a/DiscImageChef.Filesystems/JFS.cs b/DiscImageChef.Filesystems/JFS.cs index fb79d53b..f3a30d13 100644 --- a/DiscImageChef.Filesystems/JFS.cs +++ b/DiscImageChef.Filesystems/JFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -140,7 +141,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public JFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public JFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "JFS Plugin"; PluginUUID = new Guid("D3BE2A41-8F28-4055-94DC-BB6C72A0E9C4"); @@ -148,10 +149,10 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { uint bootSectors = JFS_BootBlocksSize / imagePlugin.GetSectorSize(); - byte[] sector = imagePlugin.ReadSector(partitionStart + bootSectors); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + bootSectors); if(sector.Length < 512) return false; @@ -164,12 +165,12 @@ namespace DiscImageChef.Filesystems return jfsSb.s_magic == JFS_Magic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); uint bootSectors = JFS_BootBlocksSize / imagePlugin.GetSectorSize(); - byte[] sector = imagePlugin.ReadSector(partitionStart + bootSectors); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + bootSectors); if(sector.Length < 512) return; diff --git a/DiscImageChef.Filesystems/LisaFS/Info.cs b/DiscImageChef.Filesystems/LisaFS/Info.cs index 6e3daca7..4058672e 100644 --- a/DiscImageChef.Filesystems/LisaFS/Info.cs +++ b/DiscImageChef.Filesystems/LisaFS/Info.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -32,6 +32,7 @@ using System; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; using DiscImageChef.Decoders; using DiscImageChef.ImagePlugins; @@ -40,7 +41,7 @@ namespace DiscImageChef.Filesystems.LisaFS { public partial class LisaFS : Filesystem { - public override bool Identify(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugin imagePlugin, Partition partition) { try { @@ -126,7 +127,7 @@ namespace DiscImageChef.Filesystems.LisaFS } } - public override void GetInformation(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); diff --git a/DiscImageChef.Filesystems/LisaFS/LisaFS.cs b/DiscImageChef.Filesystems/LisaFS/LisaFS.cs index 322c896e..7c1fc579 100644 --- a/DiscImageChef.Filesystems/LisaFS/LisaFS.cs +++ b/DiscImageChef.Filesystems/LisaFS/LisaFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,9 +31,9 @@ // ****************************************************************************/ using System; - using System.Collections.Generic; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems.LisaFS @@ -75,7 +75,7 @@ namespace DiscImageChef.Filesystems.LisaFS CurrentEncoding = new Claunia.Encoding.LisaRoman(); } - public LisaFS(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public LisaFS(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { device = imagePlugin; Name = "Apple Lisa File System"; diff --git a/DiscImageChef.Filesystems/MinixFS.cs b/DiscImageChef.Filesystems/MinixFS.cs index 5b55ffa2..9139c02d 100644 --- a/DiscImageChef.Filesystems/MinixFS.cs +++ b/DiscImageChef.Filesystems/MinixFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -68,7 +69,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public MinixFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public MinixFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Minix Filesystem"; PluginUUID = new Guid("FE248C3B-B727-4AE5-A39F-79EA9A07D4B3"); @@ -76,13 +77,13 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; ushort magic; - byte[] minix_sb_sector = imagePlugin.ReadSector(2 + partitionStart); + byte[] minix_sb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); magic = BitConverter.ToUInt16(minix_sb_sector, 0x010); // Here should reside magic number on Minix V1 & V2 @@ -96,7 +97,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -106,7 +107,7 @@ namespace DiscImageChef.Filesystems int filenamesize; string minixVersion; ushort magic; - byte[] minix_sb_sector = imagePlugin.ReadSector(2 + partitionStart); + byte[] minix_sb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); magic = BigEndianBitConverter.ToUInt16(minix_sb_sector, 0x018); @@ -212,7 +213,7 @@ namespace DiscImageChef.Filesystems sb.AppendFormat("On-disk filesystem version: {0}", mnx_sb.s_disk_version).AppendLine(); xmlFSType.ClusterSize = mnx_sb.s_blocksize; - xmlFSType.Clusters = (long)((partitionEnd - partitionStart + 1) * imagePlugin.GetSectorSize() / mnx_sb.s_blocksize); + xmlFSType.Clusters = (long)((partition.PartitionEndSector - partition.PartitionStartSector + 1) * imagePlugin.GetSectorSize() / mnx_sb.s_blocksize); } else { @@ -243,7 +244,7 @@ namespace DiscImageChef.Filesystems sb.AppendFormat("{0} bytes maximum per file", mnx_sb.s_max_size).AppendLine(); sb.AppendFormat("Filesystem state: {0:X4}", mnx_sb.s_state).AppendLine(); xmlFSType.ClusterSize = 1024; - xmlFSType.Clusters = (long)((partitionEnd - partitionStart + 1) * imagePlugin.GetSectorSize() / 1024); + xmlFSType.Clusters = (long)((partition.PartitionEndSector - partition.PartitionStartSector + 1) * imagePlugin.GetSectorSize() / 1024); } information = sb.ToString(); } diff --git a/DiscImageChef.Filesystems/NILFS2.cs b/DiscImageChef.Filesystems/NILFS2.cs index 954dfcd6..cde33330 100644 --- a/DiscImageChef.Filesystems/NILFS2.cs +++ b/DiscImageChef.Filesystems/NILFS2.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -103,7 +104,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public NILFS2(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public NILFS2(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "NILFS2 Plugin"; PluginUUID = new Guid("35224226-C5CC-48B5-8FFD-3781E91E86B6"); @@ -111,7 +112,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < 512) return false; @@ -126,7 +127,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(nilfsSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(nilfsSb)) return false; @@ -138,7 +139,7 @@ namespace DiscImageChef.Filesystems return nilfsSb.magic == NILFS2_Magic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < 512) @@ -154,7 +155,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(nilfsSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(nilfsSb)) return; diff --git a/DiscImageChef.Filesystems/NTFS.cs b/DiscImageChef.Filesystems/NTFS.cs index 6ad3ed3e..c2c559d3 100644 --- a/DiscImageChef.Filesystems/NTFS.cs +++ b/DiscImageChef.Filesystems/NTFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,15 +31,15 @@ // ****************************************************************************/ using System; -using System.Text; -using DiscImageChef; using System.Collections.Generic; using System.Runtime.InteropServices; - -// Information from Inside Windows NT +using System.Text; using DiscImageChef.Checksums; +using DiscImageChef.CommonTypes; + namespace DiscImageChef.Filesystems { + // Information from Inside Windows NT public class NTFS : Filesystem { public NTFS() @@ -49,16 +49,16 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.Unicode; } - public NTFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public NTFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "New Technology File System (NTFS)"; PluginUUID = new Guid("33513B2C-1e6d-4d21-a660-0bbc789c3871"); CurrentEncoding = Encoding.Unicode; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; byte[] eigth_bytes = new byte[8]; @@ -66,7 +66,7 @@ namespace DiscImageChef.Filesystems ushort spfat, signature; string oem_name; - byte[] ntfs_bpb = imagePlugin.ReadSector(0 + partitionStart); + byte[] ntfs_bpb = imagePlugin.ReadSector(0 + partition.PartitionStartSector); Array.Copy(ntfs_bpb, 0x003, eigth_bytes, 0, 8); oem_name = StringHandlers.CToString(eigth_bytes); @@ -89,13 +89,13 @@ namespace DiscImageChef.Filesystems return signature == 0xAA55; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); - byte[] ntfs_bpb = imagePlugin.ReadSector(0 + partitionStart); + byte[] ntfs_bpb = imagePlugin.ReadSector(0 + partition.PartitionStartSector); NTFS_BootBlock ntfs_bb = new NTFS_BootBlock(); IntPtr bpbPtr = Marshal.AllocHGlobal(512); diff --git a/DiscImageChef.Filesystems/Nintendo.cs b/DiscImageChef.Filesystems/Nintendo.cs index 0bbc8176..f712c6ba 100644 --- a/DiscImageChef.Filesystems/Nintendo.cs +++ b/DiscImageChef.Filesystems/Nintendo.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; namespace DiscImageChef.Filesystems @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("shift_jis"); } - public NintendoPlugin(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public NintendoPlugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Nintendo optical filesystems"; PluginUUID = new Guid("4675fcb4-4418-4288-9e4a-33d6a4ac1126"); @@ -54,9 +55,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("shift_jis"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart != 0) + if(partition.PartitionStartSector != 0) return false; if((imagePlugin.GetSectors() * imagePlugin.GetSectorSize()) < 0x50000) @@ -75,7 +76,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); information = ""; diff --git a/DiscImageChef.Filesystems/ODS.cs b/DiscImageChef.Filesystems/ODS.cs index a76d2997..d9463ea8 100644 --- a/DiscImageChef.Filesystems/ODS.cs +++ b/DiscImageChef.Filesystems/ODS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -54,7 +55,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public ODS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public ODS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Files-11 On-Disk Structure"; PluginUUID = new Guid("de20633c-8021-4384-aeb0-83b0df14491f"); @@ -62,9 +63,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; if(imagePlugin.GetSectorSize() < 512) @@ -72,7 +73,7 @@ namespace DiscImageChef.Filesystems byte[] magic_b = new byte[12]; string magic; - byte[] hb_sector = imagePlugin.ReadSector(1 + partitionStart); + byte[] hb_sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); Array.Copy(hb_sector, 0x1F0, magic_b, 0, 12); magic = Encoding.ASCII.GetString(magic_b); @@ -80,7 +81,7 @@ namespace DiscImageChef.Filesystems return magic == "DECFILE11A " || magic == "DECFILE11B "; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -90,7 +91,7 @@ namespace DiscImageChef.Filesystems homeblock.min_class = new byte[20]; homeblock.max_class = new byte[20]; - byte[] hb_sector = imagePlugin.ReadSector(1 + partitionStart); + byte[] hb_sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); homeblock.homelbn = BitConverter.ToUInt32(hb_sector, 0x000); homeblock.alhomelbn = BitConverter.ToUInt32(hb_sector, 0x004); diff --git a/DiscImageChef.Filesystems/Opera.cs b/DiscImageChef.Filesystems/Opera.cs index 79f427e2..95e94fd6 100644 --- a/DiscImageChef.Filesystems/Opera.cs +++ b/DiscImageChef.Filesystems/Opera.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -45,7 +46,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.ASCII; } - public OperaFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public OperaFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Opera Filesystem Plugin"; PluginUUID = new Guid("0ec84ec7-eae6-4196-83fe-943b3fe46dbd"); @@ -53,12 +54,12 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.ASCII; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; - byte[] sb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] sb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); byte record_type; byte[] sync_bytes = new byte[5]; @@ -74,12 +75,12 @@ namespace DiscImageChef.Filesystems } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder SuperBlockMetadata = new StringBuilder(); - byte[] sb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] sb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); OperaSuperBlock sb = new OperaSuperBlock(); byte[] cString = new byte[32]; diff --git a/DiscImageChef.Filesystems/PCEngine.cs b/DiscImageChef.Filesystems/PCEngine.cs index 54303a38..9663cf9e 100644 --- a/DiscImageChef.Filesystems/PCEngine.cs +++ b/DiscImageChef.Filesystems/PCEngine.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -45,7 +46,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("shift_jis"); } - public PCEnginePlugin(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public PCEnginePlugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "PC Engine CD Plugin"; PluginUUID = new Guid("e5ee6d7c-90fa-49bd-ac89-14ef750b8af3"); @@ -53,25 +54,25 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("shift_jis"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; byte[] system_descriptor = new byte[23]; - byte[] sector = imagePlugin.ReadSector(1 + partitionStart); + byte[] sector = imagePlugin.ReadSector(1 + partition.PartitionStartSector); Array.Copy(sector, 0x20, system_descriptor, 0, 23); return Encoding.ASCII.GetString(system_descriptor) == "PC Engine CD-ROM SYSTEM"; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; xmlFSType = new Schemas.FileSystemType(); xmlFSType.Type = "PC Engine filesystem"; - xmlFSType.Clusters = (long)((partitionEnd - partitionStart + 1) / imagePlugin.GetSectorSize() * 2048); + xmlFSType.Clusters = (long)((partition.PartitionEndSector - partition.PartitionStartSector + 1) / imagePlugin.GetSectorSize() * 2048); xmlFSType.ClusterSize = 2048; } diff --git a/DiscImageChef.Filesystems/PFS.cs b/DiscImageChef.Filesystems/PFS.cs index 3f4f3edb..5e21ec09 100644 --- a/DiscImageChef.Filesystems/PFS.cs +++ b/DiscImageChef.Filesystems/PFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,9 +31,10 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; using System.Runtime.InteropServices; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public PFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public PFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Professional File System"; PluginUUID = new Guid("68DE769E-D957-406A-8AE4-3781CA8CDA77"); @@ -177,23 +178,23 @@ namespace DiscImageChef.Filesystems /// const uint MUPFS_DISK = 0x6D755046; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - byte[] sector = imagePlugin.ReadSector(2 + partitionStart); + byte[] sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); uint magic = BigEndianBitConverter.ToUInt32(sector, 0x00); return magic == AFS_DISK || magic == PFS2_DISK || magic == PFS_DISK || magic == MUAF_DISK || magic == MUPFS_DISK; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { - byte[] RootBlockSector = imagePlugin.ReadSector(2 + partitionStart); + byte[] RootBlockSector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); RootBlock rootBlock = new RootBlock(); rootBlock = BigEndianMarshal.ByteArrayToStructureBigEndian(RootBlockSector); diff --git a/DiscImageChef.Filesystems/ProDOS.cs b/DiscImageChef.Filesystems/ProDOS.cs index c49d79cc..6bdd9930 100644 --- a/DiscImageChef.Filesystems/ProDOS.cs +++ b/DiscImageChef.Filesystems/ProDOS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; namespace DiscImageChef.Filesystems @@ -85,7 +86,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = new Claunia.Encoding.LisaRoman(); } - public ProDOSPlugin(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public ProDOSPlugin(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Apple ProDOS filesystem"; PluginUUID = new Guid("43874265-7B8A-4739-BCF7-07F80D5932BF"); @@ -93,13 +94,13 @@ namespace DiscImageChef.Filesystems CurrentEncoding = new Claunia.Encoding.LisaRoman(); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionEnd < 3) + if(partition.PartitionEndSector < 3) return false; // Blocks 0 and 1 are boot code - byte[] rootDirectoryKeyBlock = imagePlugin.ReadSector(2 + partitionStart); + byte[] rootDirectoryKeyBlock = imagePlugin.ReadSector(2 + partition.PartitionStartSector); ushort prePointer = BitConverter.ToUInt16(rootDirectoryKeyBlock, 0); DicConsole.DebugWriteLine("ProDOS plugin", "prePointer = {0}", prePointer); @@ -123,20 +124,20 @@ namespace DiscImageChef.Filesystems ushort bit_map_pointer = BitConverter.ToUInt16(rootDirectoryKeyBlock, 0x27); DicConsole.DebugWriteLine("ProDOS plugin", "bit_map_pointer = {0}", bit_map_pointer); - if(bit_map_pointer > partitionEnd) + if(bit_map_pointer > partition.PartitionEndSector) return false; ushort total_blocks = BitConverter.ToUInt16(rootDirectoryKeyBlock, 0x29); - DicConsole.DebugWriteLine("ProDOS plugin", "{0} <= ({1} - {2} + 1)? {3}", total_blocks, partitionEnd, partitionStart, total_blocks <= (partitionEnd - partitionStart + 1)); - return total_blocks <= (partitionEnd - partitionStart + 1); + DicConsole.DebugWriteLine("ProDOS plugin", "{0} <= ({1} - {2} + 1)? {3}", total_blocks, partition.PartitionEndSector, partition.PartitionStartSector, total_blocks <= (partition.PartitionEndSector - partition.PartitionStartSector + 1)); + return total_blocks <= (partition.PartitionEndSector - partition.PartitionStartSector + 1); } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); // Blocks 0 and 1 are boot code - byte[] rootDirectoryKeyBlockBytes = imagePlugin.ReadSector(2 + partitionStart); + byte[] rootDirectoryKeyBlockBytes = imagePlugin.ReadSector(2 + partition.PartitionStartSector); ProDOSRootDirectoryKeyBlock rootDirectoryKeyBlock = new ProDOSRootDirectoryKeyBlock(); rootDirectoryKeyBlock.header = new ProDOSRootDirectoryHeader(); @@ -234,7 +235,7 @@ namespace DiscImageChef.Filesystems xmlFSType.Files = rootDirectoryKeyBlock.header.file_count; xmlFSType.FilesSpecified = true; xmlFSType.Clusters = rootDirectoryKeyBlock.header.total_blocks; - xmlFSType.ClusterSize = (int)(((partitionEnd - partitionStart) + 1) * imagePlugin.ImageInfo.sectorSize / (ulong)xmlFSType.Clusters); + xmlFSType.ClusterSize = (int)(((partition.PartitionEndSector - partition.PartitionStartSector) + 1) * imagePlugin.ImageInfo.sectorSize / (ulong)xmlFSType.Clusters); xmlFSType.Type = "ProDOS"; return; diff --git a/DiscImageChef.Filesystems/QNX4.cs b/DiscImageChef.Filesystems/QNX4.cs index 000671d1..f2500048 100644 --- a/DiscImageChef.Filesystems/QNX4.cs +++ b/DiscImageChef.Filesystems/QNX4.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -35,6 +35,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -114,7 +115,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public QNX4(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public QNX4(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "QNX4 Plugin"; PluginUUID = new Guid("E73A63FA-B5B0-48BF-BF82-DA5F0A8170D2"); @@ -122,9 +123,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - byte[] sector = imagePlugin.ReadSector(partitionStart + 1); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + 1); if(sector.Length < 512) return false; @@ -146,10 +147,10 @@ namespace DiscImageChef.Filesystems return false; // Check extents are not past device - if(qnxSb.rootDir.di_first_xtnt.block + partitionStart >= partitionEnd || - qnxSb.inode.di_first_xtnt.block + partitionStart >= partitionEnd || - qnxSb.boot.di_first_xtnt.block + partitionStart >= partitionEnd || - qnxSb.altBoot.di_first_xtnt.block + partitionStart >= partitionEnd) + if(qnxSb.rootDir.di_first_xtnt.block + partition.PartitionStartSector >= partition.PartitionEndSector || + qnxSb.inode.di_first_xtnt.block + partition.PartitionStartSector >= partition.PartitionEndSector || + qnxSb.boot.di_first_xtnt.block + partition.PartitionStartSector >= partition.PartitionEndSector || + qnxSb.altBoot.di_first_xtnt.block + partition.PartitionStartSector >= partition.PartitionEndSector) return false; // Check inodes are in use @@ -162,10 +163,10 @@ namespace DiscImageChef.Filesystems return true; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; - byte[] sector = imagePlugin.ReadSector(partitionStart + 1); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + 1); if(sector.Length < 512) return; @@ -254,7 +255,7 @@ namespace DiscImageChef.Filesystems xmlFSType = new Schemas.FileSystemType(); xmlFSType.Type = "QNX4 filesystem"; - xmlFSType.Clusters = (long)((partitionEnd - partitionStart + 1) / imagePlugin.GetSectorSize() * 512); + xmlFSType.Clusters = (long)((partition.PartitionEndSector - partition.PartitionStartSector + 1) / imagePlugin.GetSectorSize() * 512); xmlFSType.ClusterSize = 512; xmlFSType.Bootable |= (qnxSb.boot.di_size != 0 || qnxSb.altBoot.di_size != 0); xmlFSType.CreationDate = DateHandlers.UNIXUnsignedToDateTime(qnxSb.rootDir.di_ftime); diff --git a/DiscImageChef.Filesystems/QNX6.cs b/DiscImageChef.Filesystems/QNX6.cs index 311a7f1e..99958321 100644 --- a/DiscImageChef.Filesystems/QNX6.cs +++ b/DiscImageChef.Filesystems/QNX6.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -109,7 +110,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public QNX6(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public QNX6(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "QNX6 Plugin"; PluginUUID = new Guid("3E610EA2-4D08-4D70-8947-830CD4C74FC0"); @@ -117,13 +118,13 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { uint sectors = QNX6_SuperBlockSize / imagePlugin.GetSectorSize(); uint bootSectors = QNX6_BootBlocksSize / imagePlugin.GetSectorSize(); - byte[] audiSector = imagePlugin.ReadSectors(partitionStart, sectors); - byte[] sector = imagePlugin.ReadSectors(partitionStart + bootSectors, sectors); + byte[] audiSector = imagePlugin.ReadSectors(partition.PartitionStartSector, sectors); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + bootSectors, sectors); if(sector.Length < QNX6_SuperBlockSize) return false; @@ -142,15 +143,15 @@ namespace DiscImageChef.Filesystems return qnxSb.magic == QNX6_Magic || audiSb.magic == QNX6_Magic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); uint sectors = QNX6_SuperBlockSize / imagePlugin.GetSectorSize(); uint bootSectors = QNX6_BootBlocksSize / imagePlugin.GetSectorSize(); - byte[] audiSector = imagePlugin.ReadSectors(partitionStart, sectors); - byte[] sector = imagePlugin.ReadSectors(partitionStart + bootSectors, sectors); + byte[] audiSector = imagePlugin.ReadSectors(partition.PartitionStartSector, sectors); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + bootSectors, sectors); if(sector.Length < QNX6_SuperBlockSize) return; diff --git a/DiscImageChef.Filesystems/Reiser.cs b/DiscImageChef.Filesystems/Reiser.cs index e0e3c3af..5e7f6079 100644 --- a/DiscImageChef.Filesystems/Reiser.cs +++ b/DiscImageChef.Filesystems/Reiser.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -35,6 +35,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -97,7 +98,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public Reiser(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public Reiser(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Reiser Filesystem Plugin"; PluginUUID = new Guid("1D8CD8B8-27E6-410F-9973-D16409225FBA"); @@ -105,7 +106,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < 512) return false; @@ -120,7 +121,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(reiserSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(reiserSb)) return false; @@ -134,7 +135,7 @@ namespace DiscImageChef.Filesystems ReiserJr_Magic.SequenceEqual(reiserSb.magic); } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < 512) @@ -150,7 +151,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(reiserSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(reiserSb)) return; diff --git a/DiscImageChef.Filesystems/Reiser4.cs b/DiscImageChef.Filesystems/Reiser4.cs index 95e6770a..00996eac 100644 --- a/DiscImageChef.Filesystems/Reiser4.cs +++ b/DiscImageChef.Filesystems/Reiser4.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -32,9 +32,10 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using System.Text; -using System.Linq; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -62,7 +63,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public Reiser4(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public Reiser4(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Reiser4 Filesystem Plugin"; PluginUUID = new Guid("301F2D00-E8D5-4F04-934E-81DFB21D15BA"); @@ -70,7 +71,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < 512) return false; @@ -85,7 +86,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(reiserSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(reiserSb)) return false; @@ -97,7 +98,7 @@ namespace DiscImageChef.Filesystems return Reiser4_Magic.SequenceEqual(reiserSb.magic); } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < 512) @@ -113,7 +114,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(reiserSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart + sbAddr, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector + sbAddr, sbSize); if(sector.Length < Marshal.SizeOf(reiserSb)) return; @@ -138,7 +139,7 @@ namespace DiscImageChef.Filesystems xmlFSType = new Schemas.FileSystemType(); xmlFSType.Type = "Reiser 4 filesystem"; xmlFSType.ClusterSize = reiserSb.blocksize; - xmlFSType.Clusters = (long)(((partitionEnd - partitionStart) * imagePlugin.GetSectorSize()) / reiserSb.blocksize); + xmlFSType.Clusters = (long)(((partition.PartitionEndSector - partition.PartitionStartSector) * imagePlugin.GetSectorSize()) / reiserSb.blocksize); xmlFSType.VolumeName = StringHandlers.CToString(reiserSb.label, CurrentEncoding); xmlFSType.VolumeSerial = reiserSb.uuid.ToString(); } diff --git a/DiscImageChef.Filesystems/SFS.cs b/DiscImageChef.Filesystems/SFS.cs index 4dadf9ec..3080163c 100644 --- a/DiscImageChef.Filesystems/SFS.cs +++ b/DiscImageChef.Filesystems/SFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-1"); } - public SFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public SFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "SmartFileSystem"; PluginUUID = new Guid("26550C19-3671-4A2D-BC2F-F20CEB7F48DC"); @@ -97,23 +98,23 @@ namespace DiscImageChef.Filesystems /// const uint SFS_MAGIC = 0x53465300; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); uint magic = BigEndianBitConverter.ToUInt32(sector, 0x00); return magic == SFS_MAGIC; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { - byte[] RootBlockSector = imagePlugin.ReadSector(partitionStart); + byte[] RootBlockSector = imagePlugin.ReadSector(partition.PartitionStartSector); RootBlock rootBlock = new RootBlock(); rootBlock = BigEndianMarshal.ByteArrayToStructureBigEndian(RootBlockSector); diff --git a/DiscImageChef.Filesystems/SolarFS.cs b/DiscImageChef.Filesystems/SolarFS.cs index 9afab909..0183ea99 100644 --- a/DiscImageChef.Filesystems/SolarFS.cs +++ b/DiscImageChef.Filesystems/SolarFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; namespace DiscImageChef.Filesystems @@ -47,7 +48,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public SolarFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public SolarFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Solar_OS filesystem"; PluginUUID = new Guid("EA3101C1-E777-4B4F-B5A3-8C57F50F6E65"); @@ -55,15 +56,15 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; byte signature; /// 0x29 string fs_type; // "SOL_FS " - byte[] bpb = imagePlugin.ReadSector(0 + partitionStart); + byte[] bpb = imagePlugin.ReadSector(0 + partition.PartitionStartSector); byte[] fs_type_b = new byte[8]; @@ -76,12 +77,12 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); - byte[] bpb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] bpb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); byte[] bpb_strings; SolarOSParameterBlock BPB = new SolarOSParameterBlock(); diff --git a/DiscImageChef.Filesystems/Squash.cs b/DiscImageChef.Filesystems/Squash.cs index 3307a074..8d78bf3d 100644 --- a/DiscImageChef.Filesystems/Squash.cs +++ b/DiscImageChef.Filesystems/Squash.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public Squash(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public Squash(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Squash filesystem"; PluginUUID = new Guid("F8F6E46F-7A2A-48E3-9C0A-46AF4DC29E09"); @@ -93,21 +94,21 @@ namespace DiscImageChef.Filesystems const uint Squash_MAGIC = 0x73717368; const uint Squash_CIGAM = 0x68737173; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); uint magic = BitConverter.ToUInt32(sector, 0x00); return magic == Squash_MAGIC || magic == Squash_CIGAM; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { - byte[] sector = imagePlugin.ReadSector(partitionStart); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector); uint magic = BitConverter.ToUInt32(sector, 0x00); SquashSuperBlock sqSb = new SquashSuperBlock(); @@ -166,7 +167,7 @@ namespace DiscImageChef.Filesystems xmlFSType.Type = "Squash file system"; xmlFSType.CreationDate = DateHandlers.UNIXUnsignedToDateTime(sqSb.mkfs_time); xmlFSType.CreationDateSpecified = true; - xmlFSType.Clusters = (long)(((partitionEnd - partitionStart + 1) * imagePlugin.ImageInfo.sectorSize) / sqSb.block_size); + xmlFSType.Clusters = (long)(((partition.PartitionEndSector - partition.PartitionStartSector + 1) * imagePlugin.ImageInfo.sectorSize) / sqSb.block_size); xmlFSType.ClusterSize = (int)sqSb.block_size; xmlFSType.Files = sqSb.inodes; xmlFSType.FilesSpecified = true; diff --git a/DiscImageChef.Filesystems/SysV.cs b/DiscImageChef.Filesystems/SysV.cs index a5b16317..cde685f8 100644 --- a/DiscImageChef.Filesystems/SysV.cs +++ b/DiscImageChef.Filesystems/SysV.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -61,7 +62,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public SysVfs(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public SysVfs(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "UNIX System V filesystem"; PluginUUID = new Guid("9B8D016A-8561-400E-A12A-A198283C211D"); @@ -69,9 +70,9 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; uint magic; @@ -106,7 +107,7 @@ namespace DiscImageChef.Filesystems else sb_size_in_sectors = 1; // If not a single sector can store it - if(partitionEnd <= (partitionStart + 4 * (ulong)sb_size_in_sectors + sb_size_in_sectors)) // Device must be bigger than SB location + SB size + offset + if(partition.PartitionEndSector <= (partition.PartitionStartSector + 4 * (ulong)sb_size_in_sectors + sb_size_in_sectors)) // Device must be bigger than SB location + SB size + offset return false; // Superblock can start on 0x000, 0x200, 0x600 and 0x800, not aligned, so we assume 16 (128 bytes/sector) sectors as a safe value @@ -115,7 +116,7 @@ namespace DiscImageChef.Filesystems if(i + sb_size_in_sectors >= (int)imagePlugin.ImageInfo.sectors) break; - byte[] sb_sector = imagePlugin.ReadSectors((ulong)i + partitionStart, sb_size_in_sectors); + byte[] sb_sector = imagePlugin.ReadSectors((ulong)i + partition.PartitionStartSector, sb_size_in_sectors); magic = BitConverter.ToUInt32(sb_sector, 0x3F8); // XENIX magic location @@ -160,7 +161,7 @@ namespace DiscImageChef.Filesystems { if(s_fsize < V7_MAXSIZE && s_nfree < V7_NICFREE && s_ninode < V7_NICINOD) { - if((s_fsize * 1024) == ((partitionEnd - partitionStart) * imagePlugin.GetSectorSize()) || (s_fsize * 512) == ((partitionEnd - partitionStart) * imagePlugin.GetSectorSize())) + if((s_fsize * 1024) == ((partition.PartitionEndSector - partition.PartitionStartSector) * imagePlugin.GetSectorSize()) || (s_fsize * 512) == ((partition.PartitionEndSector - partition.PartitionStartSector) * imagePlugin.GetSectorSize())) return true; } } @@ -170,7 +171,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -198,7 +199,7 @@ namespace DiscImageChef.Filesystems // Superblock can start on 0x000, 0x200, 0x600 and 0x800, not aligned, so we assume 16 (128 bytes/sector) sectors as a safe value for(start = 0; start <= 16; start++) { - sb_sector = imagePlugin.ReadSectors((ulong)start + partitionStart, sb_size_in_sectors); + sb_sector = imagePlugin.ReadSectors((ulong)start + partition.PartitionStartSector, sb_size_in_sectors); magic = BigEndianBitConverter.ToUInt32(sb_sector, 0x3F8); // XENIX magic location if(magic == XENIX_MAGIC) @@ -276,7 +277,7 @@ namespace DiscImageChef.Filesystems { if(s_fsize < V7_MAXSIZE && s_nfree < V7_NICFREE && s_ninode < V7_NICINOD) { - if((s_fsize * 1024) == ((partitionEnd - partitionStart) * imagePlugin.GetSectorSize()) || (s_fsize * 512) == ((partitionEnd - partitionStart) * imagePlugin.GetSectorSize())) + if((s_fsize * 1024) == ((partition.PartitionEndSector - partition.PartitionStartSector) * imagePlugin.GetSectorSize()) || (s_fsize * 512) == ((partition.PartitionEndSector - partition.PartitionStartSector) * imagePlugin.GetSectorSize())) { sys7th = true; BigEndianBitConverter.IsLittleEndian = true; @@ -295,7 +296,7 @@ namespace DiscImageChef.Filesystems { byte[] xenix_strings = new byte[6]; XenixSuperBlock xnx_sb = new XenixSuperBlock(); - sb_sector = imagePlugin.ReadSectors((ulong)start + partitionStart, sb_size_in_sectors); + sb_sector = imagePlugin.ReadSectors((ulong)start + partition.PartitionStartSector, sb_size_in_sectors); if(xenix3) { @@ -417,7 +418,7 @@ namespace DiscImageChef.Filesystems if(sysv) { - sb_sector = imagePlugin.ReadSectors((ulong)start + partitionStart, sb_size_in_sectors); + sb_sector = imagePlugin.ReadSectors((ulong)start + partition.PartitionStartSector, sb_size_in_sectors); ushort pad0, pad1, pad2; byte[] sysv_strings = new byte[6]; @@ -556,7 +557,7 @@ namespace DiscImageChef.Filesystems if(coherent) { - sb_sector = imagePlugin.ReadSectors((ulong)start + partitionStart, sb_size_in_sectors); + sb_sector = imagePlugin.ReadSectors((ulong)start + partition.PartitionStartSector, sb_size_in_sectors); CoherentSuperBlock coh_sb = new CoherentSuperBlock(); byte[] coh_strings = new byte[6]; @@ -611,7 +612,7 @@ namespace DiscImageChef.Filesystems if(sys7th) { - sb_sector = imagePlugin.ReadSectors((ulong)start + partitionStart, sb_size_in_sectors); + sb_sector = imagePlugin.ReadSectors((ulong)start + partition.PartitionStartSector, sb_size_in_sectors); UNIX7thEditionSuperBlock v7_sb = new UNIX7thEditionSuperBlock(); byte[] sys7_strings = new byte[6]; diff --git a/DiscImageChef.Filesystems/UCSDPascal/Info.cs b/DiscImageChef.Filesystems/UCSDPascal/Info.cs index 81b32f56..e6d84028 100644 --- a/DiscImageChef.Filesystems/UCSDPascal/Info.cs +++ b/DiscImageChef.Filesystems/UCSDPascal/Info.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -32,19 +32,20 @@ using System; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems.UCSDPascal { // Information from Call-A.P.P.L.E. Pascal Disk Directory Structure public partial class PascalPlugin : Filesystem { - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectors() < 3) return false; // Blocks 0 and 1 are boot code - byte[] volBlock = imagePlugin.ReadSector(2 + partitionStart); + byte[] volBlock = imagePlugin.ReadSector(2 + partition.PartitionStartSector); PascalVolumeEntry volEntry = new PascalVolumeEntry(); @@ -88,7 +89,7 @@ namespace DiscImageChef.Filesystems.UCSDPascal return true; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { StringBuilder sbInformation = new StringBuilder(); information = ""; @@ -97,7 +98,7 @@ namespace DiscImageChef.Filesystems.UCSDPascal return; // Blocks 0 and 1 are boot code - byte[] volBlock = imagePlugin.ReadSector(2 + partitionStart); + byte[] volBlock = imagePlugin.ReadSector(2 + partition.PartitionStartSector); PascalVolumeEntry volEntry = new PascalVolumeEntry(); @@ -147,7 +148,7 @@ namespace DiscImageChef.Filesystems.UCSDPascal information = sbInformation.ToString(); xmlFSType = new Schemas.FileSystemType(); - xmlFSType.Bootable = !ArrayHelpers.ArrayIsNullOrEmpty(imagePlugin.ReadSectors(partitionStart, 2)); + xmlFSType.Bootable = !ArrayHelpers.ArrayIsNullOrEmpty(imagePlugin.ReadSectors(partition.PartitionStartSector, 2)); xmlFSType.Clusters = volEntry.blocks; xmlFSType.ClusterSize = (int)imagePlugin.GetSectorSize(); xmlFSType.Files = volEntry.files; diff --git a/DiscImageChef.Filesystems/UCSDPascal/UCSDPascal.cs b/DiscImageChef.Filesystems/UCSDPascal/UCSDPascal.cs index 847a1302..3b67fbea 100644 --- a/DiscImageChef.Filesystems/UCSDPascal/UCSDPascal.cs +++ b/DiscImageChef.Filesystems/UCSDPascal/UCSDPascal.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems.UCSDPascal @@ -56,7 +57,7 @@ namespace DiscImageChef.Filesystems.UCSDPascal CurrentEncoding = new Claunia.Encoding.LisaRoman(); } - public PascalPlugin(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public PascalPlugin(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { device = imagePlugin; Name = "U.C.S.D. Pascal filesystem"; diff --git a/DiscImageChef.Filesystems/UDF.cs b/DiscImageChef.Filesystems/UDF.cs index b9b2bcdf..5ec926d4 100644 --- a/DiscImageChef.Filesystems/UDF.cs +++ b/DiscImageChef.Filesystems/UDF.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -32,10 +32,11 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; -using System.Linq; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems @@ -50,7 +51,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public UDF(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public UDF(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Universal Disk Format"; PluginUUID = new Guid("83976FEC-A91B-464B-9293-56C719461BAB"); @@ -230,10 +231,10 @@ namespace DiscImageChef.Filesystems public ushort maximumWriteUDF; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { // UDF needs at least that - if(partitionEnd - partitionStart < 256) + if(partition.PartitionEndSector - partition.PartitionStartSector < 256) return false; // UDF needs at least that @@ -243,12 +244,12 @@ namespace DiscImageChef.Filesystems byte[] sector; AnchorVolumeDescriptorPointer anchor = new AnchorVolumeDescriptorPointer(); // All positions where anchor may reside - ulong[] positions = { 256, 512, partitionEnd - 256, partitionEnd }; + ulong[] positions = { 256, 512, partition.PartitionEndSector - 256, partition.PartitionEndSector }; bool anchorFound = false; foreach(ulong position in positions) { - if(position + partitionStart >= partitionEnd) + if(position + partition.PartitionStartSector >= partition.PartitionEndSector) continue; sector = imagePlugin.ReadSector(position); @@ -273,7 +274,7 @@ namespace DiscImageChef.Filesystems if(anchor.tag.tagIdentifier == TagIdentifier.AnchorVolumeDescriptorPointer && anchor.tag.tagLocation == position && - (anchor.mainVolumeDescriptorSequenceExtent.location + partitionStart) < partitionEnd) + (anchor.mainVolumeDescriptorSequenceExtent.location + partition.PartitionStartSector) < partition.PartitionEndSector) { anchorFound = true; break; @@ -287,11 +288,11 @@ namespace DiscImageChef.Filesystems while(count < 256) { - sector = imagePlugin.ReadSector(partitionStart + anchor.mainVolumeDescriptorSequenceExtent.location + count); + sector = imagePlugin.ReadSector(partition.PartitionStartSector + anchor.mainVolumeDescriptorSequenceExtent.location + count); TagIdentifier tagId = (TagIdentifier)BitConverter.ToUInt16(sector, 0); uint location = BitConverter.ToUInt32(sector, 0x0C); - if(location == partitionStart + anchor.mainVolumeDescriptorSequenceExtent.location + count) + if(location == partition.PartitionStartSector + anchor.mainVolumeDescriptorSequenceExtent.location + count) { if(tagId == TagIdentifier.TerminatingDescriptor) break; @@ -316,7 +317,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { byte[] sector; @@ -326,7 +327,7 @@ namespace DiscImageChef.Filesystems AnchorVolumeDescriptorPointer anchor = new AnchorVolumeDescriptorPointer(); // All positions where anchor may reside - ulong[] positions = { 256, 512, partitionEnd - 256, partitionEnd }; + ulong[] positions = { 256, 512, partition.PartitionEndSector - 256, partition.PartitionEndSector }; foreach(ulong position in positions) { @@ -339,7 +340,7 @@ namespace DiscImageChef.Filesystems if(anchor.tag.tagIdentifier == TagIdentifier.AnchorVolumeDescriptorPointer && anchor.tag.tagLocation == position && - (anchor.mainVolumeDescriptorSequenceExtent.location + partitionStart) < partitionEnd) + (anchor.mainVolumeDescriptorSequenceExtent.location + partition.PartitionStartSector) < partition.PartitionEndSector) break; } @@ -352,11 +353,11 @@ namespace DiscImageChef.Filesystems while(count < 256) { - sector = imagePlugin.ReadSector(partitionStart + anchor.mainVolumeDescriptorSequenceExtent.location + count); + sector = imagePlugin.ReadSector(partition.PartitionStartSector + anchor.mainVolumeDescriptorSequenceExtent.location + count); TagIdentifier tagId = (TagIdentifier)BitConverter.ToUInt16(sector, 0); uint location = BitConverter.ToUInt32(sector, 0x0C); - if(location == partitionStart + anchor.mainVolumeDescriptorSequenceExtent.location + count) + if(location == partition.PartitionStartSector + anchor.mainVolumeDescriptorSequenceExtent.location + count) { if(tagId == TagIdentifier.TerminatingDescriptor) break; @@ -420,7 +421,7 @@ namespace DiscImageChef.Filesystems Convert.ToInt32(string.Format("{0}", lvidiu.maximumWriteUDF & 0xFF), 10)); xmlFSType.ApplicationIdentifier = CurrentEncoding.GetString(pvd.implementationIdentifier.identifier).TrimEnd(new char[] { '\u0000' }); xmlFSType.ClusterSize = (int)lvd.logicalBlockSize; - xmlFSType.Clusters = (long)(((partitionEnd - partitionStart + 1) * imagePlugin.ImageInfo.sectorSize) / (ulong)xmlFSType.ClusterSize); + xmlFSType.Clusters = (long)(((partition.PartitionEndSector - partition.PartitionStartSector + 1) * imagePlugin.ImageInfo.sectorSize) / (ulong)xmlFSType.ClusterSize); xmlFSType.ModificationDate = ECMAToDateTime(lvid.recordingDateTime); xmlFSType.ModificationDateSpecified = true; xmlFSType.Files = lvidiu.files; diff --git a/DiscImageChef.Filesystems/UNIXBFS.cs b/DiscImageChef.Filesystems/UNIXBFS.cs index c45f45fb..7f15f173 100644 --- a/DiscImageChef.Filesystems/UNIXBFS.cs +++ b/DiscImageChef.Filesystems/UNIXBFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; namespace DiscImageChef.Filesystems @@ -49,7 +50,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public BFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public BFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "UNIX Boot filesystem"; PluginUUID = new Guid("1E6E0DA6-F7E4-494C-80C6-CB5929E96155"); @@ -57,24 +58,24 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; uint magic; - magic = BitConverter.ToUInt32(imagePlugin.ReadSector(0 + partitionStart), 0); + magic = BitConverter.ToUInt32(imagePlugin.ReadSector(0 + partition.PartitionStartSector), 0); return magic == BFS_MAGIC; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); - byte[] bfs_sb_sector = imagePlugin.ReadSector(0 + partitionStart); + byte[] bfs_sb_sector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); byte[] sb_strings = new byte[6]; BFSSuperBlock bfs_sb = new BFSSuperBlock(); @@ -110,7 +111,7 @@ namespace DiscImageChef.Filesystems xmlFSType.Type = "BFS"; xmlFSType.VolumeName = bfs_sb.s_volume; xmlFSType.ClusterSize = (int)imagePlugin.GetSectorSize(); - xmlFSType.Clusters = (long)(partitionEnd - partitionStart + 1); + xmlFSType.Clusters = (long)(partition.PartitionEndSector - partition.PartitionStartSector + 1); information = sb.ToString(); } diff --git a/DiscImageChef.Filesystems/VMfs.cs b/DiscImageChef.Filesystems/VMfs.cs index d96d00ab..c38be6ed 100644 --- a/DiscImageChef.Filesystems/VMfs.cs +++ b/DiscImageChef.Filesystems/VMfs.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public VMfs(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public VMfs(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "VMware filesystem"; PluginUUID = new Guid("EE52BDB8-B49C-4122-A3DA-AD21CBE79843"); @@ -89,27 +90,27 @@ namespace DiscImageChef.Filesystems const uint VMfs_MAGIC = 0xC001D00D; const uint VMfs_Base = 0x00100000; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; ulong vmfsSuperOff = VMfs_Base / imagePlugin.ImageInfo.sectorSize; - if(partitionStart + vmfsSuperOff > partitionEnd) + if(partition.PartitionStartSector + vmfsSuperOff > partition.PartitionEndSector) return false; - byte[] sector = imagePlugin.ReadSector(partitionStart + vmfsSuperOff); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + vmfsSuperOff); uint magic = BitConverter.ToUInt32(sector, 0x00); return magic == VMfs_MAGIC; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { ulong vmfsSuperOff = VMfs_Base / imagePlugin.ImageInfo.sectorSize; - byte[] sector = imagePlugin.ReadSector(partitionStart + vmfsSuperOff); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + vmfsSuperOff); VolumeInfo volInfo = new VolumeInfo(); IntPtr volInfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(volInfo)); diff --git a/DiscImageChef.Filesystems/VxFS.cs b/DiscImageChef.Filesystems/VxFS.cs index e99d1a7b..d7ab4bb4 100644 --- a/DiscImageChef.Filesystems/VxFS.cs +++ b/DiscImageChef.Filesystems/VxFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public VxFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public VxFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Veritas filesystem"; PluginUUID = new Guid("EC372605-7687-453C-8BEA-7E0DFF79CB03"); @@ -207,23 +208,23 @@ namespace DiscImageChef.Filesystems const uint VxFS_MAGIC = 0xA501FCF5; const uint VxFS_Base = 0x400; - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if(partitionStart >= partitionEnd) + if(partition.PartitionStartSector >= partition.PartitionEndSector) return false; ulong vmfsSuperOff = VxFS_Base / imagePlugin.ImageInfo.sectorSize; - byte[] sector = imagePlugin.ReadSector(partitionStart + vmfsSuperOff); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + vmfsSuperOff); uint magic = BitConverter.ToUInt32(sector, 0x00); return magic == VxFS_MAGIC; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { ulong vmfsSuperOff = VxFS_Base / imagePlugin.ImageInfo.sectorSize; - byte[] sector = imagePlugin.ReadSector(partitionStart + vmfsSuperOff); + byte[] sector = imagePlugin.ReadSector(partition.PartitionStartSector + vmfsSuperOff); VxSuperBlock vxSb = new VxSuperBlock(); IntPtr vxSbPtr = Marshal.AllocHGlobal(Marshal.SizeOf(vxSb)); diff --git a/DiscImageChef.Filesystems/XFS.cs b/DiscImageChef.Filesystems/XFS.cs index d8ef2bd7..29944040 100644 --- a/DiscImageChef.Filesystems/XFS.cs +++ b/DiscImageChef.Filesystems/XFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -110,7 +111,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public XFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public XFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "XFS Filesystem Plugin"; PluginUUID = new Guid("1D8CD8B8-27E6-410F-9973-D16409225FBA"); @@ -118,7 +119,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < 512) return false; @@ -129,7 +130,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(xfsSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector, sbSize); if(sector.Length < Marshal.SizeOf(xfsSb)) return false; @@ -138,7 +139,7 @@ namespace DiscImageChef.Filesystems return xfsSb.magicnum == XFS_Magic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < 512) @@ -150,7 +151,7 @@ namespace DiscImageChef.Filesystems if(Marshal.SizeOf(xfsSb) % imagePlugin.GetSectorSize() != 0) sbSize++; - byte[] sector = imagePlugin.ReadSectors(partitionStart, sbSize); + byte[] sector = imagePlugin.ReadSectors(partition.PartitionStartSector, sbSize); if(sector.Length < Marshal.SizeOf(xfsSb)) return; diff --git a/DiscImageChef.Filesystems/ZFS.cs b/DiscImageChef.Filesystems/ZFS.cs index 24a7afe9..f93f06af 100644 --- a/DiscImageChef.Filesystems/ZFS.cs +++ b/DiscImageChef.Filesystems/ZFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -232,7 +233,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public ZFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public ZFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "ZFS Filesystem Plugin"; PluginUUID = new Guid("0750014F-A714-4692-A369-E23F6EC3659C"); @@ -240,7 +241,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.UTF8; } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { if(imagePlugin.GetSectorSize() < 512) return false; @@ -248,17 +249,17 @@ namespace DiscImageChef.Filesystems byte[] sector; ulong magic; - if(partitionStart + 31 < partitionEnd) + if(partition.PartitionStartSector + 31 < partition.PartitionEndSector) { - sector = imagePlugin.ReadSector(partitionStart + 31); + sector = imagePlugin.ReadSector(partition.PartitionStartSector + 31); magic = BitConverter.ToUInt64(sector, 0x1D8); if(magic == ZEC_Magic || magic == ZEC_Cigam) return true; } - if(partitionStart + 16 < partitionEnd) + if(partition.PartitionStartSector + 16 < partition.PartitionEndSector) { - sector = imagePlugin.ReadSector(partitionStart + 16); + sector = imagePlugin.ReadSector(partition.PartitionStartSector + 16); magic = BitConverter.ToUInt64(sector, 0x1D8); if(magic == ZEC_Magic || magic == ZEC_Cigam) return true; @@ -267,7 +268,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; if(imagePlugin.GetSectorSize() < 512) @@ -280,17 +281,17 @@ namespace DiscImageChef.Filesystems uint nvlistLen = 114688 / imagePlugin.ImageInfo.sectorSize; byte[] nvlist; - if(partitionStart + 31 < partitionEnd) + if(partition.PartitionStartSector + 31 < partition.PartitionEndSector) { - sector = imagePlugin.ReadSector(partitionStart + 31); + sector = imagePlugin.ReadSector(partition.PartitionStartSector + 31); magic = BitConverter.ToUInt64(sector, 0x1D8); if(magic == ZEC_Magic || magic == ZEC_Cigam) nvlistOff = 32; } - if(partitionStart + 16 < partitionEnd) + if(partition.PartitionStartSector + 16 < partition.PartitionEndSector) { - sector = imagePlugin.ReadSector(partitionStart + 16); + sector = imagePlugin.ReadSector(partition.PartitionStartSector + 16); magic = BitConverter.ToUInt64(sector, 0x1D8); if(magic == ZEC_Magic || magic == ZEC_Cigam) nvlistOff = 17; @@ -299,7 +300,7 @@ namespace DiscImageChef.Filesystems StringBuilder sb = new StringBuilder(); sb.AppendLine("ZFS filesystem"); - nvlist = imagePlugin.ReadSectors(partitionStart + nvlistOff, nvlistLen); + nvlist = imagePlugin.ReadSectors(partition.PartitionStartSector + nvlistOff, nvlistLen); Dictionary decodedNvList; if(!DecodeNvList(nvlist, out decodedNvList)) diff --git a/DiscImageChef.Filesystems/exFAT.cs b/DiscImageChef.Filesystems/exFAT.cs index 53a9c31a..fef2f25b 100644 --- a/DiscImageChef.Filesystems/exFAT.cs +++ b/DiscImageChef.Filesystems/exFAT.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -35,6 +35,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; +using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; namespace DiscImageChef.Filesystems @@ -49,7 +50,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public exFAT(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public exFAT(ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Microsoft Extended File Allocation Table"; PluginUUID = new Guid("8271D088-1533-4CB3-AC28-D802B68BB95C"); @@ -57,12 +58,12 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugin imagePlugin, Partition partition) { - if((12 + partitionStart) >= partitionEnd) + if((12 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; - byte[] vbrSector = imagePlugin.ReadSector(0 + partitionStart); + byte[] vbrSector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); if(vbrSector.Length < 512) return false; @@ -75,28 +76,28 @@ namespace DiscImageChef.Filesystems return Signature.SequenceEqual(vbr.signature); } - public override void GetInformation(ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); xmlFSType = new Schemas.FileSystemType(); - byte[] vbrSector = imagePlugin.ReadSector(0 + partitionStart); + byte[] vbrSector = imagePlugin.ReadSector(0 + partition.PartitionStartSector); VolumeBootRecord vbr = new VolumeBootRecord(); IntPtr vbrPtr = Marshal.AllocHGlobal(512); Marshal.Copy(vbrSector, 0, vbrPtr, 512); vbr = (VolumeBootRecord)Marshal.PtrToStructure(vbrPtr, typeof(VolumeBootRecord)); Marshal.FreeHGlobal(vbrPtr); - byte[] parametersSector = imagePlugin.ReadSector(9 + partitionStart); + byte[] parametersSector = imagePlugin.ReadSector(9 + partition.PartitionStartSector); OemParameterTable parametersTable = new OemParameterTable(); IntPtr parametersPtr = Marshal.AllocHGlobal(512); Marshal.Copy(parametersSector, 0, parametersPtr, 512); parametersTable = (OemParameterTable)Marshal.PtrToStructure(parametersPtr, typeof(OemParameterTable)); Marshal.FreeHGlobal(parametersPtr); - byte[] chkSector = imagePlugin.ReadSector(11 + partitionStart); + byte[] chkSector = imagePlugin.ReadSector(11 + partition.PartitionStartSector); ChecksumSector chksector = new ChecksumSector(); IntPtr chkPtr = Marshal.AllocHGlobal(512); Marshal.Copy(chkSector, 0, chkPtr, 512); diff --git a/DiscImageChef.Filesystems/ext2FS.cs b/DiscImageChef.Filesystems/ext2FS.cs index ed2c3ca0..1990ef05 100644 --- a/DiscImageChef.Filesystems/ext2FS.cs +++ b/DiscImageChef.Filesystems/ext2FS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,9 +31,10 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; using System.Runtime.InteropServices; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -47,7 +48,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public ext2FS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public ext2FS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Linux extended Filesystem 2, 3 and 4"; PluginUUID = new Guid("6AA91B88-150B-4A7B-AD56-F84FB2DF4184"); @@ -55,12 +56,12 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; - byte[] sb_sector = imagePlugin.ReadSector(2 + partitionStart); + byte[] sb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); ushort magic = BitConverter.ToUInt16(sb_sector, 0x038); @@ -69,7 +70,7 @@ namespace DiscImageChef.Filesystems return false; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; @@ -97,7 +98,7 @@ namespace DiscImageChef.Filesystems return; } - byte[] sb_sector = imagePlugin.ReadSectors(2 + partitionStart, sb_size_in_sectors); + byte[] sb_sector = imagePlugin.ReadSectors(2 + partition.PartitionStartSector, sb_size_in_sectors); IntPtr sbPtr = Marshal.AllocHGlobal(512); Marshal.Copy(sb_sector, 0, sbPtr, 512); supblk = (ext2FSSuperBlock)Marshal.PtrToStructure(sbPtr, typeof(ext2FSSuperBlock)); diff --git a/DiscImageChef.Filesystems/extFS.cs b/DiscImageChef.Filesystems/extFS.cs index 5ede58b4..362483bd 100644 --- a/DiscImageChef.Filesystems/extFS.cs +++ b/DiscImageChef.Filesystems/extFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -31,8 +31,9 @@ // ****************************************************************************/ using System; -using System.Text; using System.Collections.Generic; +using System.Text; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { @@ -46,7 +47,7 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public extFS(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, Encoding encoding) + public extFS(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { Name = "Linux extended Filesystem"; PluginUUID = new Guid("076CB3A2-08C2-4D69-BC8A-FCAA2E502BE2"); @@ -54,25 +55,25 @@ namespace DiscImageChef.Filesystems CurrentEncoding = Encoding.GetEncoding("iso-8859-15"); } - public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) + public override bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition) { - if((2 + partitionStart) >= partitionEnd) + if((2 + partition.PartitionStartSector) >= partition.PartitionEndSector) return false; - byte[] sb_sector = imagePlugin.ReadSector(2 + partitionStart); // Superblock resides at 0x400 + byte[] sb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); // Superblock resides at 0x400 ushort magic = BitConverter.ToUInt16(sb_sector, 0x038); // Here should reside magic number return magic == extFSMagic; } - public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd, out string information) + public override void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information) { information = ""; StringBuilder sb = new StringBuilder(); - byte[] sb_sector = imagePlugin.ReadSector(2 + partitionStart); // Superblock resides at 0x400 + byte[] sb_sector = imagePlugin.ReadSector(2 + partition.PartitionStartSector); // Superblock resides at 0x400 extFSSuperBlock ext_sb = new extFSSuperBlock(); ext_sb.inodes = BitConverter.ToUInt32(sb_sector, 0x000); @@ -100,7 +101,7 @@ namespace DiscImageChef.Filesystems xmlFSType.FreeClusters = ext_sb.freecountblk; xmlFSType.FreeClustersSpecified = true; xmlFSType.ClusterSize = 1024; - xmlFSType.Clusters = (long)((partitionEnd - partitionStart + 1) * imagePlugin.GetSectorSize() / 1024); + xmlFSType.Clusters = (long)((partition.PartitionEndSector - partition.PartitionStartSector + 1) * imagePlugin.GetSectorSize() / 1024); information = sb.ToString(); } diff --git a/DiscImageChef.Tests/Filesystems/ADFS.cs b/DiscImageChef.Tests/Filesystems/ADFS.cs index cb85943b..54b79541 100644 --- a/DiscImageChef.Tests/Filesystems/ADFS.cs +++ b/DiscImageChef.Tests/Filesystems/ADFS.cs @@ -102,8 +102,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new AcornADFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(bootable[i], fs.XmlFSType.Bootable, testfiles[i]); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AFFS.cs b/DiscImageChef.Tests/Filesystems/AFFS.cs index 591944d0..399ed6e2 100644 --- a/DiscImageChef.Tests/Filesystems/AFFS.cs +++ b/DiscImageChef.Tests/Filesystems/AFFS.cs @@ -93,8 +93,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new AmigaDOSPlugin(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AFFS2_RDB.cs b/DiscImageChef.Tests/Filesystems/AFFS2_RDB.cs index 5e3f3336..d06502c0 100644 --- a/DiscImageChef.Tests/Filesystems/AFFS2_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/AFFS2_RDB.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS2", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AFFS_MBR.cs b/DiscImageChef.Tests/Filesystems/AFFS_MBR.cs index fc8d8b09..f6b2e680 100644 --- a/DiscImageChef.Tests/Filesystems/AFFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/AFFS_MBR.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AFFS_MBR_RDB.cs b/DiscImageChef.Tests/Filesystems/AFFS_MBR_RDB.cs index 5963fc01..30a33a61 100644 --- a/DiscImageChef.Tests/Filesystems/AFFS_MBR_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/AFFS_MBR_RDB.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -105,8 +105,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AFFS_RDB.cs b/DiscImageChef.Tests/Filesystems/AFFS_RDB.cs index 49483aab..81f1f35c 100644 --- a/DiscImageChef.Tests/Filesystems/AFFS_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/AFFS_RDB.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -110,8 +110,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AOFS.cs b/DiscImageChef.Tests/Filesystems/AOFS.cs index 99d63c2e..e90bc789 100644 --- a/DiscImageChef.Tests/Filesystems/AOFS.cs +++ b/DiscImageChef.Tests/Filesystems/AOFS.cs @@ -93,8 +93,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new AmigaDOSPlugin(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga OFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AOFS_MBR.cs b/DiscImageChef.Tests/Filesystems/AOFS_MBR.cs index 19d45d81..efd359b7 100644 --- a/DiscImageChef.Tests/Filesystems/AOFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/AOFS_MBR.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga OFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AOFS_MBR_RDB.cs b/DiscImageChef.Tests/Filesystems/AOFS_MBR_RDB.cs index b0034321..5a7000d4 100644 --- a/DiscImageChef.Tests/Filesystems/AOFS_MBR_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/AOFS_MBR_RDB.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -105,8 +105,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga OFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/AOFS_RDB.cs b/DiscImageChef.Tests/Filesystems/AOFS_RDB.cs index 6ce4ff27..84612feb 100644 --- a/DiscImageChef.Tests/Filesystems/AOFS_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/AOFS_RDB.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga OFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/Atheos_MBR.cs b/DiscImageChef.Tests/Filesystems/Atheos_MBR.cs index 87cca270..b3c0ae1d 100644 --- a/DiscImageChef.Tests/Filesystems/Atheos_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/Atheos_MBR.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -105,8 +105,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Atheros", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/BeFS.cs b/DiscImageChef.Tests/Filesystems/BeFS.cs index 3b9faa0c..a996ebcf 100644 --- a/DiscImageChef.Tests/Filesystems/BeFS.cs +++ b/DiscImageChef.Tests/Filesystems/BeFS.cs @@ -97,8 +97,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.BeFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("BeFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/BeFS_APM.cs b/DiscImageChef.Tests/Filesystems/BeFS_APM.cs index 5ea12855..019d5928 100644 --- a/DiscImageChef.Tests/Filesystems/BeFS_APM.cs +++ b/DiscImageChef.Tests/Filesystems/BeFS_APM.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("BeFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/BeFS_GPT.cs b/DiscImageChef.Tests/Filesystems/BeFS_GPT.cs index 6416fb42..a6b1fa83 100644 --- a/DiscImageChef.Tests/Filesystems/BeFS_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/BeFS_GPT.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("BeFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/BeFS_MBR.cs b/DiscImageChef.Tests/Filesystems/BeFS_MBR.cs index cbab2dee..26458c03 100644 --- a/DiscImageChef.Tests/Filesystems/BeFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/BeFS_MBR.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("BeFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/F2FS.cs b/DiscImageChef.Tests/Filesystems/F2FS.cs index 5979ba5e..f4d48e58 100644 --- a/DiscImageChef.Tests/Filesystems/F2FS.cs +++ b/DiscImageChef.Tests/Filesystems/F2FS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("F2FS filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT12.cs b/DiscImageChef.Tests/Filesystems/FAT12.cs index 5ed39628..e81f3990 100644 --- a/DiscImageChef.Tests/Filesystems/FAT12.cs +++ b/DiscImageChef.Tests/Filesystems/FAT12.cs @@ -1643,8 +1643,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new FAT(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT12", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT12_APM.cs b/DiscImageChef.Tests/Filesystems/FAT12_APM.cs index 6f78f107..4aed9d9b 100644 --- a/DiscImageChef.Tests/Filesystems/FAT12_APM.cs +++ b/DiscImageChef.Tests/Filesystems/FAT12_APM.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT12", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT12_GPT.cs b/DiscImageChef.Tests/Filesystems/FAT12_GPT.cs index 6ba4954b..686872a6 100644 --- a/DiscImageChef.Tests/Filesystems/FAT12_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/FAT12_GPT.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT12", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT12_MBR.cs b/DiscImageChef.Tests/Filesystems/FAT12_MBR.cs index e0ade33d..6a6eaed2 100644 --- a/DiscImageChef.Tests/Filesystems/FAT12_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/FAT12_MBR.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -217,8 +217,8 @@ namespace DiscImageChef.Tests.Filesystems PartPlugin parts = new MBR(); Assert.AreEqual(true, parts.GetInformation(image, out List partitions), testfiles[i]); Filesystem fs = new FAT(); - Assert.AreEqual(true, fs.Identify(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[0]), testfiles[i]); + fs.GetInformation(image, partitions[0], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT12", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT16.cs b/DiscImageChef.Tests/Filesystems/FAT16.cs index ae5c545f..dc9ee0ba 100644 --- a/DiscImageChef.Tests/Filesystems/FAT16.cs +++ b/DiscImageChef.Tests/Filesystems/FAT16.cs @@ -124,8 +124,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new FAT(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT16", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT16_APM.cs b/DiscImageChef.Tests/Filesystems/FAT16_APM.cs index 3c802fef..29927182 100644 --- a/DiscImageChef.Tests/Filesystems/FAT16_APM.cs +++ b/DiscImageChef.Tests/Filesystems/FAT16_APM.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT16", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT16_Atari.cs b/DiscImageChef.Tests/Filesystems/FAT16_Atari.cs index 0d475630..0f78572a 100644 --- a/DiscImageChef.Tests/Filesystems/FAT16_Atari.cs +++ b/DiscImageChef.Tests/Filesystems/FAT16_Atari.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT16", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT16_GPT.cs b/DiscImageChef.Tests/Filesystems/FAT16_GPT.cs index dd677140..4aab8206 100644 --- a/DiscImageChef.Tests/Filesystems/FAT16_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/FAT16_GPT.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT16", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT16_MBR.cs b/DiscImageChef.Tests/Filesystems/FAT16_MBR.cs index 750d09c0..9d29b652 100644 --- a/DiscImageChef.Tests/Filesystems/FAT16_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/FAT16_MBR.cs @@ -217,8 +217,8 @@ namespace DiscImageChef.Tests.Filesystems PartPlugin parts = new MBR(); Assert.AreEqual(true, parts.GetInformation(image, out List partitions), testfiles[i]); Filesystem fs = new FAT(); - Assert.AreEqual(true, fs.Identify(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[0]), testfiles[i]); + fs.GetInformation(image, partitions[0], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT16", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT16_RDB.cs b/DiscImageChef.Tests/Filesystems/FAT16_RDB.cs index 00f58ffb..6f21a70f 100644 --- a/DiscImageChef.Tests/Filesystems/FAT16_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/FAT16_RDB.cs @@ -110,8 +110,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT32_APM.cs b/DiscImageChef.Tests/Filesystems/FAT32_APM.cs index 83afa229..a9d91597 100644 --- a/DiscImageChef.Tests/Filesystems/FAT32_APM.cs +++ b/DiscImageChef.Tests/Filesystems/FAT32_APM.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT32", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT32_GPT.cs b/DiscImageChef.Tests/Filesystems/FAT32_GPT.cs index 7e5daf0a..af915faf 100644 --- a/DiscImageChef.Tests/Filesystems/FAT32_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/FAT32_GPT.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT32", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/FAT32_MBR.cs b/DiscImageChef.Tests/Filesystems/FAT32_MBR.cs index 23a63f1e..b427aa26 100644 --- a/DiscImageChef.Tests/Filesystems/FAT32_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/FAT32_MBR.cs @@ -129,8 +129,8 @@ namespace DiscImageChef.Tests.Filesystems PartPlugin parts = new MBR(); Assert.AreEqual(true, parts.GetInformation(image, out List partitions), testfiles[i]); Filesystem fs = new FAT(); - Assert.AreEqual(true, fs.Identify(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[0]), testfiles[i]); + fs.GetInformation(image, partitions[0], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("FAT32", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HAMMER_MBR.cs b/DiscImageChef.Tests/Filesystems/HAMMER_MBR.cs index 496f996e..4dca6d42 100644 --- a/DiscImageChef.Tests/Filesystems/HAMMER_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/HAMMER_MBR.cs @@ -106,8 +106,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HAMMER", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFS.cs b/DiscImageChef.Tests/Filesystems/HFS.cs index 318b899a..560abdc8 100644 --- a/DiscImageChef.Tests/Filesystems/HFS.cs +++ b/DiscImageChef.Tests/Filesystems/HFS.cs @@ -101,8 +101,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new AppleHFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFSPlus_APM.cs b/DiscImageChef.Tests/Filesystems/HFSPlus_APM.cs index de75b19a..8a66cf75 100644 --- a/DiscImageChef.Tests/Filesystems/HFSPlus_APM.cs +++ b/DiscImageChef.Tests/Filesystems/HFSPlus_APM.cs @@ -148,8 +148,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS+", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFSPlus_GPT.cs b/DiscImageChef.Tests/Filesystems/HFSPlus_GPT.cs index 1bd25368..7534c9f2 100644 --- a/DiscImageChef.Tests/Filesystems/HFSPlus_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/HFSPlus_GPT.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS+", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFSPlus_MBR.cs b/DiscImageChef.Tests/Filesystems/HFSPlus_MBR.cs index 5b73d7c8..9c2e307e 100644 --- a/DiscImageChef.Tests/Filesystems/HFSPlus_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/HFSPlus_MBR.cs @@ -132,8 +132,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS+", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFSX_APM.cs b/DiscImageChef.Tests/Filesystems/HFSX_APM.cs index 3aa5d558..3bbf4a7d 100644 --- a/DiscImageChef.Tests/Filesystems/HFSX_APM.cs +++ b/DiscImageChef.Tests/Filesystems/HFSX_APM.cs @@ -115,8 +115,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFSX", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFSX_GPT.cs b/DiscImageChef.Tests/Filesystems/HFSX_GPT.cs index d51cf354..40274072 100644 --- a/DiscImageChef.Tests/Filesystems/HFSX_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/HFSX_GPT.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFSX", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFSX_MBR.cs b/DiscImageChef.Tests/Filesystems/HFSX_MBR.cs index 9120496c..2282090e 100644 --- a/DiscImageChef.Tests/Filesystems/HFSX_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/HFSX_MBR.cs @@ -115,8 +115,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFSX", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFS_APM.cs b/DiscImageChef.Tests/Filesystems/HFS_APM.cs index f9af7cff..530fe717 100644 --- a/DiscImageChef.Tests/Filesystems/HFS_APM.cs +++ b/DiscImageChef.Tests/Filesystems/HFS_APM.cs @@ -166,8 +166,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFS_CDROM.cs b/DiscImageChef.Tests/Filesystems/HFS_CDROM.cs index 29a77332..3e9b0966 100644 --- a/DiscImageChef.Tests/Filesystems/HFS_CDROM.cs +++ b/DiscImageChef.Tests/Filesystems/HFS_CDROM.cs @@ -116,8 +116,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFS_MBR.cs b/DiscImageChef.Tests/Filesystems/HFS_MBR.cs index 85892a8f..f88c5837 100644 --- a/DiscImageChef.Tests/Filesystems/HFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/HFS_MBR.cs @@ -110,8 +110,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HFS_RDB.cs b/DiscImageChef.Tests/Filesystems/HFS_RDB.cs index 4f982379..593ad8ba 100644 --- a/DiscImageChef.Tests/Filesystems/HFS_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/HFS_RDB.cs @@ -106,8 +106,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Amiga FFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/HPFS.cs b/DiscImageChef.Tests/Filesystems/HPFS.cs index 09070ca7..6f0161ca 100644 --- a/DiscImageChef.Tests/Filesystems/HPFS.cs +++ b/DiscImageChef.Tests/Filesystems/HPFS.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -113,8 +113,8 @@ namespace DiscImageChef.Tests.Filesystems PartPlugin parts = new MBR(); Assert.AreEqual(true, parts.GetInformation(image, out List partitions), testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.HPFS(); - Assert.AreEqual(true, fs.Identify(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[0].PartitionStartSector, partitions[0].PartitionStartSector + partitions[0].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[0]), testfiles[i]); + fs.GetInformation(image, partitions[0], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("HPFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/JFS2.cs b/DiscImageChef.Tests/Filesystems/JFS2.cs index 57728e85..07c9bba7 100644 --- a/DiscImageChef.Tests/Filesystems/JFS2.cs +++ b/DiscImageChef.Tests/Filesystems/JFS2.cs @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("JFS filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/LFS_MBR.cs b/DiscImageChef.Tests/Filesystems/LFS_MBR.cs index d3a9d34f..062f0d4e 100644 --- a/DiscImageChef.Tests/Filesystems/LFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/LFS_MBR.cs @@ -106,8 +106,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("LFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/LisaFS.cs b/DiscImageChef.Tests/Filesystems/LisaFS.cs index bd866ee0..cfc6c462 100644 --- a/DiscImageChef.Tests/Filesystems/LisaFS.cs +++ b/DiscImageChef.Tests/Filesystems/LisaFS.cs @@ -108,8 +108,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.LisaFS.LisaFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("LisaFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/Locus.cs b/DiscImageChef.Tests/Filesystems/Locus.cs index 4c99d2ae..4d6f1f23 100644 --- a/DiscImageChef.Tests/Filesystems/Locus.cs +++ b/DiscImageChef.Tests/Filesystems/Locus.cs @@ -100,8 +100,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.Locus(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Locus", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MFS.cs b/DiscImageChef.Tests/Filesystems/MFS.cs index 6f0e4ab7..fc980be2 100644 --- a/DiscImageChef.Tests/Filesystems/MFS.cs +++ b/DiscImageChef.Tests/Filesystems/MFS.cs @@ -101,8 +101,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.AppleMFS.AppleMFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("MFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MINIXv1.cs b/DiscImageChef.Tests/Filesystems/MINIXv1.cs index 07fe8eed..24f0b36e 100644 --- a/DiscImageChef.Tests/Filesystems/MINIXv1.cs +++ b/DiscImageChef.Tests/Filesystems/MINIXv1.cs @@ -85,8 +85,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new MinixFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Minix v1", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MINIXv1_MBR.cs b/DiscImageChef.Tests/Filesystems/MINIXv1_MBR.cs index 5421d826..49e26749 100644 --- a/DiscImageChef.Tests/Filesystems/MINIXv1_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/MINIXv1_MBR.cs @@ -95,8 +95,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Minix V1", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MINIXv2.cs b/DiscImageChef.Tests/Filesystems/MINIXv2.cs index b6fc324c..26bf41b1 100644 --- a/DiscImageChef.Tests/Filesystems/MINIXv2.cs +++ b/DiscImageChef.Tests/Filesystems/MINIXv2.cs @@ -85,8 +85,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new MinixFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Minix v2", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MINIXv2_MBR.cs b/DiscImageChef.Tests/Filesystems/MINIXv2_MBR.cs index 9f7083a4..8b011d54 100644 --- a/DiscImageChef.Tests/Filesystems/MINIXv2_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/MINIXv2_MBR.cs @@ -95,8 +95,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Minix V2", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MINIXv3.cs b/DiscImageChef.Tests/Filesystems/MINIXv3.cs index 27d94656..33712900 100644 --- a/DiscImageChef.Tests/Filesystems/MINIXv3.cs +++ b/DiscImageChef.Tests/Filesystems/MINIXv3.cs @@ -85,8 +85,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new MinixFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Minix v3", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/MINIXv3_MBR.cs b/DiscImageChef.Tests/Filesystems/MINIXv3_MBR.cs index 9adc4f4d..90da853b 100644 --- a/DiscImageChef.Tests/Filesystems/MINIXv3_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/MINIXv3_MBR.cs @@ -95,8 +95,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Minix V3", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/NILFS2.cs b/DiscImageChef.Tests/Filesystems/NILFS2.cs index b496f51e..75552a39 100644 --- a/DiscImageChef.Tests/Filesystems/NILFS2.cs +++ b/DiscImageChef.Tests/Filesystems/NILFS2.cs @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("NILFS2 filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/NTFS_GPT.cs b/DiscImageChef.Tests/Filesystems/NTFS_GPT.cs index e7334712..598a2739 100644 --- a/DiscImageChef.Tests/Filesystems/NTFS_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/NTFS_GPT.cs @@ -109,8 +109,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("NTFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/NTFS_MBR.cs b/DiscImageChef.Tests/Filesystems/NTFS_MBR.cs index 2224dbd5..ef02d673 100644 --- a/DiscImageChef.Tests/Filesystems/NTFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/NTFS_MBR.cs @@ -125,8 +125,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("NTFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/NWFS386.cs b/DiscImageChef.Tests/Filesystems/NWFS386.cs index 354d32d2..e7dc2bdd 100644 --- a/DiscImageChef.Tests/Filesystems/NWFS386.cs +++ b/DiscImageChef.Tests/Filesystems/NWFS386.cs @@ -106,8 +106,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("NWFS386", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/OCFS2.cs b/DiscImageChef.Tests/Filesystems/OCFS2.cs index a0c7bcaa..fc4da296 100644 --- a/DiscImageChef.Tests/Filesystems/OCFS2.cs +++ b/DiscImageChef.Tests/Filesystems/OCFS2.cs @@ -106,8 +106,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("OCFS2", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/PFS3_RDB.cs b/DiscImageChef.Tests/Filesystems/PFS3_RDB.cs index e0973bc1..7370a7ae 100644 --- a/DiscImageChef.Tests/Filesystems/PFS3_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/PFS3_RDB.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("PFS v3", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/ProDOS_APM.cs b/DiscImageChef.Tests/Filesystems/ProDOS_APM.cs index 0e4e2c27..4564bdca 100644 --- a/DiscImageChef.Tests/Filesystems/ProDOS_APM.cs +++ b/DiscImageChef.Tests/Filesystems/ProDOS_APM.cs @@ -110,8 +110,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("ProDOS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/QNX4.cs b/DiscImageChef.Tests/Filesystems/QNX4.cs index 9e8b6f73..13a17d6e 100644 --- a/DiscImageChef.Tests/Filesystems/QNX4.cs +++ b/DiscImageChef.Tests/Filesystems/QNX4.cs @@ -85,8 +85,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.QNX4(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("QNX4 filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/QNX4_MBR.cs b/DiscImageChef.Tests/Filesystems/QNX4_MBR.cs index 5014e24e..70de6aca 100644 --- a/DiscImageChef.Tests/Filesystems/QNX4_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/QNX4_MBR.cs @@ -95,8 +95,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("QNX4 filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/ReFS_MBR.cs b/DiscImageChef.Tests/Filesystems/ReFS_MBR.cs index 5dba87cf..f3a76928 100644 --- a/DiscImageChef.Tests/Filesystems/ReFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/ReFS_MBR.cs @@ -111,8 +111,8 @@ namespace DiscImageChef.Tests.Filesystems throw new NotImplementedException("ReFS is not yet implemented"); /* Filesystem fs = new DiscImageChef.Filesystems.ReFS(); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("ReFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/Reiser3.cs b/DiscImageChef.Tests/Filesystems/Reiser3.cs index 97bf2c64..0bd3dbcb 100644 --- a/DiscImageChef.Tests/Filesystems/Reiser3.cs +++ b/DiscImageChef.Tests/Filesystems/Reiser3.cs @@ -99,8 +99,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(reiserversion[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/Reiser4.cs b/DiscImageChef.Tests/Filesystems/Reiser4.cs index 9105e05e..646a5ed3 100644 --- a/DiscImageChef.Tests/Filesystems/Reiser4.cs +++ b/DiscImageChef.Tests/Filesystems/Reiser4.cs @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("Reiser 4 filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/SFS_MBR.cs b/DiscImageChef.Tests/Filesystems/SFS_MBR.cs index 834c56b1..d24884bb 100644 --- a/DiscImageChef.Tests/Filesystems/SFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/SFS_MBR.cs @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("SmartFileSystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/SFS_MBR_RDB.cs b/DiscImageChef.Tests/Filesystems/SFS_MBR_RDB.cs index 00bcefdc..382652c3 100644 --- a/DiscImageChef.Tests/Filesystems/SFS_MBR_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/SFS_MBR_RDB.cs @@ -105,8 +105,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("SmartFileSystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/SFS_RDB.cs b/DiscImageChef.Tests/Filesystems/SFS_RDB.cs index 132f93fe..cc14c2e3 100644 --- a/DiscImageChef.Tests/Filesystems/SFS_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/SFS_RDB.cs @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("SmartFileSystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/SysV.cs b/DiscImageChef.Tests/Filesystems/SysV.cs index 03285231..52577160 100644 --- a/DiscImageChef.Tests/Filesystems/SysV.cs +++ b/DiscImageChef.Tests/Filesystems/SysV.cs @@ -97,8 +97,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.SysVfs(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/SysV_MBR.cs b/DiscImageChef.Tests/Filesystems/SysV_MBR.cs index b2d01e68..263060a4 100644 --- a/DiscImageChef.Tests/Filesystems/SysV_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/SysV_MBR.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/SysV_RDB.cs b/DiscImageChef.Tests/Filesystems/SysV_RDB.cs index 4a3e597d..36289f87 100644 --- a/DiscImageChef.Tests/Filesystems/SysV_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/SysV_RDB.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UDF.cs b/DiscImageChef.Tests/Filesystems/UDF.cs index 6b4e80a3..257b8f4d 100644 --- a/DiscImageChef.Tests/Filesystems/UDF.cs +++ b/DiscImageChef.Tests/Filesystems/UDF.cs @@ -41,6 +41,7 @@ using DiscImageChef.Filters; using DiscImageChef.ImagePlugins; using NUnit.Framework; using DiscImageChef.DiscImages; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Tests.Filesystems { @@ -123,8 +124,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.UDF(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(udfversion[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS.cs b/DiscImageChef.Tests/Filesystems/UFS.cs index e4b38683..b9f58785 100644 --- a/DiscImageChef.Tests/Filesystems/UFS.cs +++ b/DiscImageChef.Tests/Filesystems/UFS.cs @@ -106,8 +106,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.FFSPlugin(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS_APM.cs b/DiscImageChef.Tests/Filesystems/UFS_APM.cs index 9c1775d8..fac1c0e1 100644 --- a/DiscImageChef.Tests/Filesystems/UFS_APM.cs +++ b/DiscImageChef.Tests/Filesystems/UFS_APM.cs @@ -123,8 +123,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS_MBR.cs b/DiscImageChef.Tests/Filesystems/UFS_MBR.cs index cf70a60e..b6927956 100644 --- a/DiscImageChef.Tests/Filesystems/UFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/UFS_MBR.cs @@ -163,8 +163,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS_NeXT.cs b/DiscImageChef.Tests/Filesystems/UFS_NeXT.cs index fcab65ed..7778b07a 100644 --- a/DiscImageChef.Tests/Filesystems/UFS_NeXT.cs +++ b/DiscImageChef.Tests/Filesystems/UFS_NeXT.cs @@ -115,8 +115,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS_NeXT_Floppy.cs b/DiscImageChef.Tests/Filesystems/UFS_NeXT_Floppy.cs index a7d6e028..f53f8d6f 100644 --- a/DiscImageChef.Tests/Filesystems/UFS_NeXT_Floppy.cs +++ b/DiscImageChef.Tests/Filesystems/UFS_NeXT_Floppy.cs @@ -139,8 +139,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS_RDB.cs b/DiscImageChef.Tests/Filesystems/UFS_RDB.cs index 26a8843c..8939a2fa 100644 --- a/DiscImageChef.Tests/Filesystems/UFS_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/UFS_RDB.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UFS_Suni86.cs b/DiscImageChef.Tests/Filesystems/UFS_Suni86.cs index f706ee31..dc7bd20b 100644 --- a/DiscImageChef.Tests/Filesystems/UFS_Suni86.cs +++ b/DiscImageChef.Tests/Filesystems/UFS_Suni86.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UNIXBFS.cs b/DiscImageChef.Tests/Filesystems/UNIXBFS.cs index 9b65b018..8c44051f 100644 --- a/DiscImageChef.Tests/Filesystems/UNIXBFS.cs +++ b/DiscImageChef.Tests/Filesystems/UNIXBFS.cs @@ -99,8 +99,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.BFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("BFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UNIXBFS_MBR.cs b/DiscImageChef.Tests/Filesystems/UNIXBFS_MBR.cs index c99eafe8..a9e00a88 100644 --- a/DiscImageChef.Tests/Filesystems/UNIXBFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/UNIXBFS_MBR.cs @@ -99,8 +99,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("BFS", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/UNIXBFS_RDB.cs b/DiscImageChef.Tests/Filesystems/UNIXBFS_RDB.cs index 381a4413..b00b1324 100644 --- a/DiscImageChef.Tests/Filesystems/UNIXBFS_RDB.cs +++ b/DiscImageChef.Tests/Filesystems/UNIXBFS_RDB.cs @@ -107,8 +107,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(type[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/XFS_MBR.cs b/DiscImageChef.Tests/Filesystems/XFS_MBR.cs index 69e9f936..35b83f75 100644 --- a/DiscImageChef.Tests/Filesystems/XFS_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/XFS_MBR.cs @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("XFS filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/ZFS.cs b/DiscImageChef.Tests/Filesystems/ZFS.cs index 5e0e3607..d2519739 100644 --- a/DiscImageChef.Tests/Filesystems/ZFS.cs +++ b/DiscImageChef.Tests/Filesystems/ZFS.cs @@ -89,8 +89,14 @@ namespace DiscImageChef.Tests.Filesystems Assert.AreEqual(sectors[i], image.ImageInfo.sectors, testfiles[i]); Assert.AreEqual(sectorsize[i], image.ImageInfo.sectorSize, testfiles[i]); Filesystem fs = new DiscImageChef.Filesystems.ZFS(); - Assert.AreEqual(true, fs.Identify(image, 0, image.ImageInfo.sectors - 1), testfiles[i]); - fs.GetInformation(image, 0, image.ImageInfo.sectors - 1, out string information); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = image.ImageInfo.sectors, + PartitionLength = image.ImageInfo.sectors * image.ImageInfo.sectorSize + }; + Assert.AreEqual(true, fs.Identify(image, wholePart), testfiles[i]); + fs.GetInformation(image, wholePart, out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("ZFS filesystem", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/btrfs.cs b/DiscImageChef.Tests/Filesystems/btrfs.cs index 44e02391..fe477040 100644 --- a/DiscImageChef.Tests/Filesystems/btrfs.cs +++ b/DiscImageChef.Tests/Filesystems/btrfs.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("B-tree file system", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/exFAT_APM.cs b/DiscImageChef.Tests/Filesystems/exFAT_APM.cs index 22bdf23f..1c06c056 100644 --- a/DiscImageChef.Tests/Filesystems/exFAT_APM.cs +++ b/DiscImageChef.Tests/Filesystems/exFAT_APM.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("exFAT", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/exFAT_GPT.cs b/DiscImageChef.Tests/Filesystems/exFAT_GPT.cs index 7cc4ed11..06dcc050 100644 --- a/DiscImageChef.Tests/Filesystems/exFAT_GPT.cs +++ b/DiscImageChef.Tests/Filesystems/exFAT_GPT.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("exFAT", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/exFAT_MBR.cs b/DiscImageChef.Tests/Filesystems/exFAT_MBR.cs index 25302ca7..d0fad87e 100644 --- a/DiscImageChef.Tests/Filesystems/exFAT_MBR.cs +++ b/DiscImageChef.Tests/Filesystems/exFAT_MBR.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -103,8 +103,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual("exFAT", fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef.Tests/Filesystems/ext2.cs b/DiscImageChef.Tests/Filesystems/ext2.cs index 616c1815..70ca774b 100644 --- a/DiscImageChef.Tests/Filesystems/ext2.cs +++ b/DiscImageChef.Tests/Filesystems/ext2.cs @@ -1,4 +1,4 @@ -// /*************************************************************************** +// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // @@ -115,8 +115,8 @@ namespace DiscImageChef.Tests.Filesystems } } Assert.AreNotEqual(-1, part, "Partition not found"); - Assert.AreEqual(true, fs.Identify(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1), testfiles[i]); - fs.GetInformation(image, partitions[part].PartitionStartSector, partitions[part].PartitionStartSector + partitions[part].PartitionSectors - 1, out string information); + Assert.AreEqual(true, fs.Identify(image, partitions[part]), testfiles[i]); + fs.GetInformation(image, partitions[part], out string information); Assert.AreEqual(clusters[i], fs.XmlFSType.Clusters, testfiles[i]); Assert.AreEqual(clustersize[i], fs.XmlFSType.ClusterSize, testfiles[i]); Assert.AreEqual(extversion[i], fs.XmlFSType.Type, testfiles[i]); diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 7b9d2c81..7c73d2e3 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,8 @@ +* Commands/Ls.cs: +* Commands/Analyze.cs: +* Commands/ExtractFiles.cs: + Refactor, pass whole partition structure to filesystems. + * DiscImageChef.csproj: Added tests for checksums. diff --git a/DiscImageChef/Commands/Analyze.cs b/DiscImageChef/Commands/Analyze.cs index 7d2b98a8..4c8db0e1 100644 --- a/DiscImageChef/Commands/Analyze.cs +++ b/DiscImageChef/Commands/Analyze.cs @@ -32,12 +32,13 @@ using System; using System.Collections.Generic; +using DiscImageChef.CommonTypes; +using DiscImageChef.Console; +using DiscImageChef.Core; using DiscImageChef.Filesystems; +using DiscImageChef.Filters; using DiscImageChef.ImagePlugins; using DiscImageChef.PartPlugins; -using DiscImageChef.Console; -using DiscImageChef.Filters; -using DiscImageChef.Core; namespace DiscImageChef.Commands { @@ -113,14 +114,13 @@ namespace DiscImageChef.Commands if(options.SearchForPartitions) { - List partitions = new List(); + List partitions = new List(); string partition_scheme = ""; // TODO: Solve possibility of multiple partition schemes (CUE + MBR, MBR + RDB, CUE + APM, etc) foreach(PartPlugin _partplugin in plugins.PartPluginsList.Values) { - List _partitions; - if(_partplugin.GetInformation(_imageFormat, out _partitions)) + if(_partplugin.GetInformation(_imageFormat, out List _partitions)) { partition_scheme = _partplugin.Name; partitions.AddRange(_partitions); @@ -164,7 +164,7 @@ namespace DiscImageChef.Commands { DicConsole.WriteLine("Identifying filesystem on partition"); - Core.Filesystems.Identify(_imageFormat, out id_plugins, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors); + Core.Filesystems.Identify(_imageFormat, out id_plugins, partitions[i]); if(id_plugins.Count == 0) DicConsole.WriteLine("Filesystem not identified"); else if(id_plugins.Count > 1) @@ -176,7 +176,7 @@ namespace DiscImageChef.Commands if(plugins.PluginsList.TryGetValue(plugin_name, out _plugin)) { DicConsole.WriteLine(string.Format("As identified by {0}.", _plugin.Name)); - _plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors, out information); + _plugin.GetInformation(_imageFormat, partitions[i], out information); DicConsole.Write(information); Core.Statistics.AddFilesystem(_plugin.XmlFSType.Type); } @@ -186,7 +186,7 @@ namespace DiscImageChef.Commands { plugins.PluginsList.TryGetValue(id_plugins[0], out _plugin); DicConsole.WriteLine(string.Format("Identified by {0}.", _plugin.Name)); - _plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors, out information); + _plugin.GetInformation(_imageFormat, partitions[i], out information); DicConsole.Write(information); Core.Statistics.AddFilesystem(_plugin.XmlFSType.Type); } @@ -197,7 +197,14 @@ namespace DiscImageChef.Commands if(checkraw) { - Core.Filesystems.Identify(_imageFormat, out id_plugins, 0, _imageFormat.GetSectors() - 1); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = _imageFormat.GetSectors(), + PartitionLength = _imageFormat.GetSectors() * _imageFormat.GetSectorSize() + }; + + Core.Filesystems.Identify(_imageFormat, out id_plugins, wholePart); if(id_plugins.Count == 0) DicConsole.WriteLine("Filesystem not identified"); else if(id_plugins.Count > 1) @@ -209,7 +216,7 @@ namespace DiscImageChef.Commands if(plugins.PluginsList.TryGetValue(plugin_name, out _plugin)) { DicConsole.WriteLine(string.Format("As identified by {0}.", _plugin.Name)); - _plugin.GetInformation(_imageFormat, 0, _imageFormat.GetSectors() - 1, out information); + _plugin.GetInformation(_imageFormat, wholePart, out information); DicConsole.Write(information); Core.Statistics.AddFilesystem(_plugin.XmlFSType.Type); } @@ -219,7 +226,7 @@ namespace DiscImageChef.Commands { plugins.PluginsList.TryGetValue(id_plugins[0], out _plugin); DicConsole.WriteLine(string.Format("Identified by {0}.", _plugin.Name)); - _plugin.GetInformation(_imageFormat, 0, _imageFormat.GetSectors() - 1, out information); + _plugin.GetInformation(_imageFormat, wholePart, out information); DicConsole.Write(information); Core.Statistics.AddFilesystem(_plugin.XmlFSType.Type); } diff --git a/DiscImageChef/Commands/ExtractFiles.cs b/DiscImageChef/Commands/ExtractFiles.cs index 04476e68..4a61ce4a 100644 --- a/DiscImageChef/Commands/ExtractFiles.cs +++ b/DiscImageChef/Commands/ExtractFiles.cs @@ -39,6 +39,7 @@ using DiscImageChef.PartPlugins; using System.IO; using DiscImageChef.Filters; using DiscImageChef.Core; +using DiscImageChef.CommonTypes; namespace DiscImageChef.Commands { @@ -154,7 +155,7 @@ namespace DiscImageChef.Commands DicConsole.WriteLine("Identifying filesystem on partition"); - Core.Filesystems.Identify(_imageFormat, out id_plugins, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors); + Core.Filesystems.Identify(_imageFormat, out id_plugins, partitions[i]); if(id_plugins.Count == 0) DicConsole.WriteLine("Filesystem not identified"); else if(id_plugins.Count > 1) @@ -214,7 +215,14 @@ namespace DiscImageChef.Commands } } - Core.Filesystems.Identify(_imageFormat, out id_plugins, 0, _imageFormat.GetSectors() - 1); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = _imageFormat.GetSectors(), + PartitionLength = _imageFormat.GetSectors() * _imageFormat.GetSectorSize() + }; + + Core.Filesystems.Identify(_imageFormat, out id_plugins, wholePart); if(id_plugins.Count == 0) DicConsole.WriteLine("Filesystem not identified"); else if(id_plugins.Count > 1) diff --git a/DiscImageChef/Commands/Ls.cs b/DiscImageChef/Commands/Ls.cs index 0895f9e7..4caf9653 100644 --- a/DiscImageChef/Commands/Ls.cs +++ b/DiscImageChef/Commands/Ls.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using DiscImageChef.CommonTypes; using DiscImageChef.Console; using DiscImageChef.Core; using DiscImageChef.Filesystems; @@ -143,7 +144,7 @@ namespace DiscImageChef.Commands DicConsole.WriteLine("Identifying filesystem on partition"); - Core.Filesystems.Identify(_imageFormat, out id_plugins, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors); + Core.Filesystems.Identify(_imageFormat, out id_plugins, partitions[i]); if(id_plugins.Count == 0) DicConsole.WriteLine("Filesystem not identified"); else if(id_plugins.Count > 1) @@ -203,7 +204,14 @@ namespace DiscImageChef.Commands } } - Core.Filesystems.Identify(_imageFormat, out id_plugins, 0, _imageFormat.GetSectors() - 1); + Partition wholePart = new Partition + { + PartitionName = "Whole device", + PartitionSectors = _imageFormat.GetSectors(), + PartitionLength = _imageFormat.GetSectors() * _imageFormat.GetSectorSize() + }; + + Core.Filesystems.Identify(_imageFormat, out id_plugins, wholePart); if(id_plugins.Count == 0) DicConsole.WriteLine("Filesystem not identified"); else if(id_plugins.Count > 1)