From 4ff79c804a5618e0300969d7a17fc86f0a07bd81 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 4 Oct 2023 07:39:22 +0100 Subject: [PATCH] Invert 'if' statement to reduce nesting. --- Aaru.Checksums | 2 +- Aaru.CommonTypes | 2 +- Aaru.Compression/TeleDiskLzh.cs | 12 +- Aaru.Decoders | 2 +- Aaru.Filesystems/FAT/BPB.cs | 14 +- Aaru.Filesystems/FAT/Info.cs | 14 +- Aaru.Filesystems/Nintendo/Info.cs | 56 +++--- .../ViewModels/Windows/MainWindowViewModel.cs | 178 +++++++++--------- Aaru.Helpers | 2 +- Aaru.Images/Alcohol120/Read.cs | 60 +++--- Aaru.Images/CDRWin/Read.cs | 36 ++-- Aaru.Images/DART/Read.cs | 50 ++--- Aaru.Images/GDI/Read.cs | 40 ++-- Aaru.Images/PartClone/Read.cs | 10 +- Aaru.Images/Partimage/Read.cs | 10 +- Aaru.Partitions/Sun.cs | 142 +++++++------- Aaru.Partitions/VTOC.cs | 108 +++++------ Aaru.Tests/Issues/FsExtractIssueTest.cs | 24 +-- Aaru.sln.DotSettings | 3 + Aaru/Commands/Filesystem/ExtractFiles.cs | 50 ++--- Aaru/Commands/Filesystem/Info.cs | 40 ++-- Aaru/Commands/Filesystem/Ls.cs | 41 ++-- 22 files changed, 447 insertions(+), 449 deletions(-) diff --git a/Aaru.Checksums b/Aaru.Checksums index 3429b9012..29c9f2955 160000 --- a/Aaru.Checksums +++ b/Aaru.Checksums @@ -1 +1 @@ -Subproject commit 3429b9012b1995a2b33bfee5fc42ba3f1f2d7921 +Subproject commit 29c9f2955435671f7ffc58deaef1856324db0a27 diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index 47294b2f6..d841ec280 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit 47294b2f6244a811f8e150086ed58d5354e6abc3 +Subproject commit d841ec280052067f5ad92bcd6f80190555fc0a17 diff --git a/Aaru.Compression/TeleDiskLzh.cs b/Aaru.Compression/TeleDiskLzh.cs index d71224d16..6d2c699fc 100644 --- a/Aaru.Compression/TeleDiskLzh.cs +++ b/Aaru.Compression/TeleDiskLzh.cs @@ -319,12 +319,12 @@ public class TeleDiskLzh for(i = 0; i < T; i++) { - if(_son[i] >= T) - { - _freq[j] = (ushort)((_freq[i] + 1) / 2); - _son[j] = _son[i]; - j++; - } + if(_son[i] < T) + continue; + + _freq[j] = (ushort)((_freq[i] + 1) / 2); + _son[j] = _son[i]; + j++; } /* make a tree : first, connect children nodes */ diff --git a/Aaru.Decoders b/Aaru.Decoders index 99e85ca76..629ed3dcd 160000 --- a/Aaru.Decoders +++ b/Aaru.Decoders @@ -1 +1 @@ -Subproject commit 99e85ca7629949af44c3f6cee998c8005ba81512 +Subproject commit 629ed3dcd93b4d376000a061ac891e741a4f4873 diff --git a/Aaru.Filesystems/FAT/BPB.cs b/Aaru.Filesystems/FAT/BPB.cs index ef35542ec..982b60272 100644 --- a/Aaru.Filesystems/FAT/BPB.cs +++ b/Aaru.Filesystems/FAT/BPB.cs @@ -386,14 +386,14 @@ public sealed partial class FAT { for(var c = 0; c < 11; c++) { - if(rootDir[c + e] < 0x20 && rootDir[c + e] != 0x00 && rootDir[c + e] != 0x05 || - rootDir[c + e] == 0xFF || - rootDir[c + e] == 0x2E) - { - validRootDir = false; + if((rootDir[c + e] >= 0x20 || rootDir[c + e] == 0x00 || rootDir[c + e] == 0x05) && + rootDir[c + e] != 0xFF && + rootDir[c + e] != 0x2E) + continue; - break; - } + validRootDir = false; + + break; } if(!validRootDir) diff --git a/Aaru.Filesystems/FAT/Info.cs b/Aaru.Filesystems/FAT/Info.cs index 038323ac1..e1e9e58cc 100644 --- a/Aaru.Filesystems/FAT/Info.cs +++ b/Aaru.Filesystems/FAT/Info.cs @@ -331,14 +331,14 @@ public sealed partial class FAT { for(var c = 0; c < 11; c++) { - if(rootDir[c + e] < 0x20 && rootDir[c + e] != 0x00 && rootDir[c + e] != 0x05 || - rootDir[c + e] == 0xFF || - rootDir[c + e] == 0x2E) - { - validRootDir = false; + if((rootDir[c + e] >= 0x20 || rootDir[c + e] == 0x00 || rootDir[c + e] == 0x05) && + rootDir[c + e] != 0xFF && + rootDir[c + e] != 0x2E) + continue; - break; - } + validRootDir = false; + + break; } if(!validRootDir) diff --git a/Aaru.Filesystems/Nintendo/Info.cs b/Aaru.Filesystems/Nintendo/Info.cs index bc83af995..dfb49da0f 100644 --- a/Aaru.Filesystems/Nintendo/Info.cs +++ b/Aaru.Filesystems/Nintendo/Info.cs @@ -126,50 +126,50 @@ public sealed partial class NintendoPlugin for(var i = 0; i < fields.FirstPartitions.Length; i++) { - if(offset1 + i * 8 + 8 < 0x50000) - { - fields.FirstPartitions[i].Offset = - BigEndianBitConverter.ToUInt32(header, (int)(offset1 + i * 8 + 0)) << 2; + if(offset1 + i * 8 + 8 >= 0x50000) + continue; - fields.FirstPartitions[i].Type = - BigEndianBitConverter.ToUInt32(header, (int)(offset1 + i * 8 + 4)); - } + fields.FirstPartitions[i].Offset = + BigEndianBitConverter.ToUInt32(header, (int)(offset1 + i * 8 + 0)) << 2; + + fields.FirstPartitions[i].Type = + BigEndianBitConverter.ToUInt32(header, (int)(offset1 + i * 8 + 4)); } for(var i = 0; i < fields.SecondPartitions.Length; i++) { - if(offset1 + i * 8 + 8 < 0x50000) - { - fields.FirstPartitions[i].Offset = - BigEndianBitConverter.ToUInt32(header, (int)(offset2 + i * 8 + 0)) << 2; + if(offset1 + i * 8 + 8 >= 0x50000) + continue; - fields.FirstPartitions[i].Type = - BigEndianBitConverter.ToUInt32(header, (int)(offset2 + i * 8 + 4)); - } + fields.FirstPartitions[i].Offset = + BigEndianBitConverter.ToUInt32(header, (int)(offset2 + i * 8 + 0)) << 2; + + fields.FirstPartitions[i].Type = + BigEndianBitConverter.ToUInt32(header, (int)(offset2 + i * 8 + 4)); } for(var i = 0; i < fields.ThirdPartitions.Length; i++) { - if(offset1 + i * 8 + 8 < 0x50000) - { - fields.FirstPartitions[i].Offset = - BigEndianBitConverter.ToUInt32(header, (int)(offset3 + i * 8 + 0)) << 2; + if(offset1 + i * 8 + 8 >= 0x50000) + continue; - fields.FirstPartitions[i].Type = - BigEndianBitConverter.ToUInt32(header, (int)(offset3 + i * 8 + 4)); - } + fields.FirstPartitions[i].Offset = + BigEndianBitConverter.ToUInt32(header, (int)(offset3 + i * 8 + 0)) << 2; + + fields.FirstPartitions[i].Type = + BigEndianBitConverter.ToUInt32(header, (int)(offset3 + i * 8 + 4)); } for(var i = 0; i < fields.FourthPartitions.Length; i++) { - if(offset1 + i * 8 + 8 < 0x50000) - { - fields.FirstPartitions[i].Offset = - BigEndianBitConverter.ToUInt32(header, (int)(offset4 + i * 8 + 0)) << 2; + if(offset1 + i * 8 + 8 >= 0x50000) + continue; - fields.FirstPartitions[i].Type = - BigEndianBitConverter.ToUInt32(header, (int)(offset4 + i * 8 + 4)); - } + fields.FirstPartitions[i].Offset = + BigEndianBitConverter.ToUInt32(header, (int)(offset4 + i * 8 + 0)) << 2; + + fields.FirstPartitions[i].Type = + BigEndianBitConverter.ToUInt32(header, (int)(offset4 + i * 8 + 4)); } fields.Region = header[0x4E000]; diff --git a/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs b/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs index d65316f71..fa8b054c1 100644 --- a/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs @@ -644,55 +644,54 @@ public sealed class MainWindowViewModel : ViewModelBase foreach(string pluginName in idPlugins) { - if(plugins.Filesystems.TryGetValue(pluginName, out pluginType)) + if(!plugins.Filesystems.TryGetValue(pluginName, out pluginType)) + continue; + if(Activator.CreateInstance(pluginType) is not IFilesystem fs) + continue; + + fs.GetInformation(imageFormat, partition, null, out string information, + out CommonTypes.AaruMetadata.FileSystem fsMetadata); + + var rofs = fs as IReadOnlyFilesystem; + + if(rofs != null) { - if(Activator.CreateInstance(pluginType) is not IFilesystem fs) - continue; + ErrorNumber error = + rofs.Mount(imageFormat, partition, null, + new Dictionary(), null); - fs.GetInformation(imageFormat, partition, null, out string information, - out CommonTypes.AaruMetadata.FileSystem fsMetadata); - - var rofs = fs as IReadOnlyFilesystem; - - if(rofs != null) - { - ErrorNumber error = - rofs.Mount(imageFormat, partition, null, - new Dictionary(), null); - - if(error != ErrorNumber.NoError) - rofs = null; - } - - var filesystemModel = new FileSystemModel - { - VolumeName = rofs?.Metadata.VolumeName is null - ? fsMetadata.VolumeName is null - ? $"{fsMetadata.Type}" - : $"{fsMetadata.VolumeName} ({fsMetadata.Type})" - : $"{rofs.Metadata.VolumeName} ({rofs.Metadata.Type})", - Filesystem = fs, - ReadOnlyFilesystem = rofs, - ViewModel = new FileSystemViewModel(rofs?.Metadata ?? fsMetadata, - information) - }; - - // TODO: Trap expanding item - if(rofs != null) - { - filesystemModel.Roots.Add(new SubdirectoryModel - { - Name = "/", - Path = "", - Plugin = rofs - }); - - Statistics.AddCommand("ls"); - } - - Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type); - partitionModel.FileSystems.Add(filesystemModel); + if(error != ErrorNumber.NoError) + rofs = null; } + + var filesystemModel = new FileSystemModel + { + VolumeName = rofs?.Metadata.VolumeName is null + ? fsMetadata.VolumeName is null + ? $"{fsMetadata.Type}" + : $"{fsMetadata.VolumeName} ({fsMetadata.Type})" + : $"{rofs.Metadata.VolumeName} ({rofs.Metadata.Type})", + Filesystem = fs, + ReadOnlyFilesystem = rofs, + ViewModel = new FileSystemViewModel(rofs?.Metadata ?? fsMetadata, + information) + }; + + // TODO: Trap expanding item + if(rofs != null) + { + filesystemModel.Roots.Add(new SubdirectoryModel + { + Name = "/", + Path = "", + Plugin = rofs + }); + + Statistics.AddCommand("ls"); + } + + Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type); + partitionModel.FileSystems.Add(filesystemModel); } } @@ -722,53 +721,52 @@ public sealed class MainWindowViewModel : ViewModelBase foreach(string pluginName in idPlugins) { - if(plugins.Filesystems.TryGetValue(pluginName, out pluginType)) + if(!plugins.Filesystems.TryGetValue(pluginName, out pluginType)) + continue; + if(Activator.CreateInstance(pluginType) is not IFilesystem fs) + continue; + + fs.GetInformation(imageFormat, wholePart, null, out string information, + out CommonTypes.AaruMetadata.FileSystem fsMetadata); + + var rofs = fs as IReadOnlyFilesystem; + + if(rofs != null) { - if(Activator.CreateInstance(pluginType) is not IFilesystem fs) - continue; + ErrorNumber error = rofs.Mount(imageFormat, wholePart, null, + new Dictionary(), null); - fs.GetInformation(imageFormat, wholePart, null, out string information, - out CommonTypes.AaruMetadata.FileSystem fsMetadata); - - var rofs = fs as IReadOnlyFilesystem; - - if(rofs != null) - { - ErrorNumber error = rofs.Mount(imageFormat, wholePart, null, - new Dictionary(), null); - - if(error != ErrorNumber.NoError) - rofs = null; - } - - var filesystemModel = new FileSystemModel - { - VolumeName = rofs?.Metadata.VolumeName is null - ? fsMetadata.VolumeName is null - ? $"{fsMetadata.Type}" - : $"{fsMetadata.VolumeName} ({fsMetadata.Type})" - : $"{rofs.Metadata.VolumeName} ({rofs.Metadata.Type})", - Filesystem = fs, - ReadOnlyFilesystem = rofs, - ViewModel = new FileSystemViewModel(rofs?.Metadata ?? fsMetadata, information) - }; - - // TODO: Trap expanding item - if(rofs != null) - { - filesystemModel.Roots.Add(new SubdirectoryModel - { - Name = "/", - Path = "", - Plugin = rofs - }); - - Statistics.AddCommand("ls"); - } - - Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type); - imageModel.PartitionSchemesOrFileSystems.Add(filesystemModel); + if(error != ErrorNumber.NoError) + rofs = null; } + + var filesystemModel = new FileSystemModel + { + VolumeName = rofs?.Metadata.VolumeName is null + ? fsMetadata.VolumeName is null + ? $"{fsMetadata.Type}" + : $"{fsMetadata.VolumeName} ({fsMetadata.Type})" + : $"{rofs.Metadata.VolumeName} ({rofs.Metadata.Type})", + Filesystem = fs, + ReadOnlyFilesystem = rofs, + ViewModel = new FileSystemViewModel(rofs?.Metadata ?? fsMetadata, information) + }; + + // TODO: Trap expanding item + if(rofs != null) + { + filesystemModel.Roots.Add(new SubdirectoryModel + { + Name = "/", + Path = "", + Plugin = rofs + }); + + Statistics.AddCommand("ls"); + } + + Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type); + imageModel.PartitionSchemesOrFileSystems.Add(filesystemModel); } } } diff --git a/Aaru.Helpers b/Aaru.Helpers index 57ad637c2..6f76a5d46 160000 --- a/Aaru.Helpers +++ b/Aaru.Helpers @@ -1 +1 @@ -Subproject commit 57ad637c20b8b520c78fa099d7fbdad6ab2ce263 +Subproject commit 6f76a5d4601dc3ba2895eba4981ff8602a52aae4 diff --git a/Aaru.Images/Alcohol120/Read.cs b/Aaru.Images/Alcohol120/Read.cs index 7ad34c82d..26f3a98d9 100644 --- a/Aaru.Images/Alcohol120/Read.cs +++ b/Aaru.Images/Alcohol120/Read.cs @@ -772,19 +772,19 @@ public sealed partial class Alcohol120 foreach(KeyValuePair kvp in _offsetMap) { - if(sectorAddress >= kvp.Value) + if(sectorAddress < kvp.Value) + continue; + + foreach(Track track in _alcTracks.Values) { - foreach(Track track in _alcTracks.Values) - { - if(track.point != kvp.Key || - !_alcTrackExtras.TryGetValue(track.point, out TrackExtra extra)) - continue; + if(track.point != kvp.Key || + !_alcTrackExtras.TryGetValue(track.point, out TrackExtra extra)) + continue; - if(sectorAddress - kvp.Value >= extra.sectors + extra.pregap) - continue; + if(sectorAddress - kvp.Value >= extra.sectors + extra.pregap) + continue; - return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key, out buffer); - } + return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key, out buffer); } } @@ -798,19 +798,19 @@ public sealed partial class Alcohol120 foreach(KeyValuePair kvp in _offsetMap) { - if(sectorAddress >= kvp.Value) + if(sectorAddress < kvp.Value) + continue; + + foreach(Track track in _alcTracks.Values) { - foreach(Track track in _alcTracks.Values) - { - if(track.point != kvp.Key || - !_alcTrackExtras.TryGetValue(track.point, out TrackExtra extra)) - continue; + if(track.point != kvp.Key || + !_alcTrackExtras.TryGetValue(track.point, out TrackExtra extra)) + continue; - if(sectorAddress - kvp.Value >= extra.sectors + extra.pregap) - continue; + if(sectorAddress - kvp.Value >= extra.sectors + extra.pregap) + continue; - return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag, out buffer); - } + return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag, out buffer); } } @@ -1390,19 +1390,19 @@ public sealed partial class Alcohol120 foreach(KeyValuePair kvp in _offsetMap) { - if(sectorAddress >= kvp.Value) + if(sectorAddress < kvp.Value) + continue; + + foreach(Track alcTrack in _alcTracks.Values) { - foreach(Track alcTrack in _alcTracks.Values) - { - if(alcTrack.point != kvp.Key || - !_alcTrackExtras.TryGetValue(alcTrack.point, out TrackExtra alcExtra)) - continue; + if(alcTrack.point != kvp.Key || + !_alcTrackExtras.TryGetValue(alcTrack.point, out TrackExtra alcExtra)) + continue; - if(sectorAddress - kvp.Value >= alcExtra.sectors + alcExtra.pregap) - continue; + if(sectorAddress - kvp.Value >= alcExtra.sectors + alcExtra.pregap) + continue; - return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key, out buffer); - } + return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key, out buffer); } } diff --git a/Aaru.Images/CDRWin/Read.cs b/Aaru.Images/CDRWin/Read.cs index ef3c18ca6..c35ea8af6 100644 --- a/Aaru.Images/CDRWin/Read.cs +++ b/Aaru.Images/CDRWin/Read.cs @@ -1010,19 +1010,19 @@ public sealed partial class CdrWin for(var i = 0; i < cueTracks.Length; i++) { - if(cueTracks[i].Session == s) + if(cueTracks[i].Session != s) + continue; + + if(!firstTrackRead) { - if(!firstTrackRead) - { - firstSessionTrk = i; - firstTrackRead = true; - } - - sessionSectors += cueTracks[i].Sectors; - - if(i > lastSessionTrack) - lastSessionTrack = i; + firstSessionTrk = i; + firstTrackRead = true; } + + sessionSectors += cueTracks[i].Sectors; + + if(i > lastSessionTrack) + lastSessionTrack = i; } if(s > 1) @@ -1691,13 +1691,13 @@ public sealed partial class CdrWin for(var s = 0; s < sessions.Length; s++) { - if(sessions[s].Sequence > 1 && - track.Sequence == sessions[s].StartTrack) - { - track.TrackFile.Offset += 307200; - track.Sectors -= 150; - sessions[s].StartSector = (ulong)track.Indexes[1]; - } + if(sessions[s].Sequence <= 1 || + track.Sequence != sessions[s].StartTrack) + continue; + + track.TrackFile.Offset += 307200; + track.Sectors -= 150; + sessions[s].StartSector = (ulong)track.Indexes[1]; } } diff --git a/Aaru.Images/DART/Read.cs b/Aaru.Images/DART/Read.cs index 8b1acd23c..a24ff7578 100644 --- a/Aaru.Images/DART/Read.cs +++ b/Aaru.Images/DART/Read.cs @@ -127,40 +127,40 @@ public sealed partial class Dart foreach(short l in bLength) { - if(l != 0) - { - var buffer = new byte[BUFFER_SIZE]; + if(l == 0) + continue; - if(l == -1) + var buffer = new byte[BUFFER_SIZE]; + + if(l == -1) + { + stream.EnsureRead(buffer, 0, BUFFER_SIZE); + dataMs.Write(buffer, 0, DATA_SIZE); + tagMs.Write(buffer, DATA_SIZE, TAG_SIZE); + } + else + { + byte[] temp; + + if(header.srcCmp == COMPRESS_RLE) { - stream.EnsureRead(buffer, 0, BUFFER_SIZE); + temp = new byte[l * 2]; + stream.EnsureRead(temp, 0, temp.Length); + buffer = new byte[BUFFER_SIZE]; + + AppleRle.DecodeBuffer(temp, buffer); + dataMs.Write(buffer, 0, DATA_SIZE); tagMs.Write(buffer, DATA_SIZE, TAG_SIZE); } else { - byte[] temp; + temp = new byte[l]; + stream.EnsureRead(temp, 0, temp.Length); - if(header.srcCmp == COMPRESS_RLE) - { - temp = new byte[l * 2]; - stream.EnsureRead(temp, 0, temp.Length); - buffer = new byte[BUFFER_SIZE]; + AaruConsole.ErrorWriteLine(Localization.LZH_Compressed_images_not_yet_supported); - AppleRle.DecodeBuffer(temp, buffer); - - dataMs.Write(buffer, 0, DATA_SIZE); - tagMs.Write(buffer, DATA_SIZE, TAG_SIZE); - } - else - { - temp = new byte[l]; - stream.EnsureRead(temp, 0, temp.Length); - - AaruConsole.ErrorWriteLine(Localization.LZH_Compressed_images_not_yet_supported); - - return ErrorNumber.NotImplemented; - } + return ErrorNumber.NotImplemented; } } } diff --git a/Aaru.Images/GDI/Read.cs b/Aaru.Images/GDI/Read.cs index f510eab1d..a9a48f5c0 100644 --- a/Aaru.Images/GDI/Read.cs +++ b/Aaru.Images/GDI/Read.cs @@ -929,29 +929,29 @@ public sealed partial class Gdi foreach(GdiTrack gdiTrack in _discImage.Tracks) { - if(gdiTrack.HighDensity == expectedDensity) + if(gdiTrack.HighDensity != expectedDensity) + continue; + + var track = new Track { - var track = new Track - { - Description = null, - StartSector = gdiTrack.StartSector, - Pregap = gdiTrack.Pregap, - Session = (ushort)(gdiTrack.HighDensity ? 2 : 1), - Sequence = gdiTrack.Sequence, - Type = gdiTrack.TrackType, - Filter = gdiTrack.TrackFilter, - File = gdiTrack.TrackFile, - FileOffset = (ulong)gdiTrack.Offset, - FileType = "BINARY", - RawBytesPerSector = gdiTrack.Bps, - BytesPerSector = gdiTrack.TrackType == TrackType.Data ? 2048 : 2352, - SubchannelType = TrackSubchannelType.None - }; + Description = null, + StartSector = gdiTrack.StartSector, + Pregap = gdiTrack.Pregap, + Session = (ushort)(gdiTrack.HighDensity ? 2 : 1), + Sequence = gdiTrack.Sequence, + Type = gdiTrack.TrackType, + Filter = gdiTrack.TrackFilter, + File = gdiTrack.TrackFile, + FileOffset = (ulong)gdiTrack.Offset, + FileType = "BINARY", + RawBytesPerSector = gdiTrack.Bps, + BytesPerSector = gdiTrack.TrackType == TrackType.Data ? 2048 : 2352, + SubchannelType = TrackSubchannelType.None + }; - track.EndSector = track.StartSector + gdiTrack.Sectors - 1; + track.EndSector = track.StartSector + gdiTrack.Sectors - 1; - tracks.Add(track); - } + tracks.Add(track); } return tracks; diff --git a/Aaru.Images/PartClone/Read.cs b/Aaru.Images/PartClone/Read.cs index 95306c277..b558dc690 100644 --- a/Aaru.Images/PartClone/Read.cs +++ b/Aaru.Images/PartClone/Read.cs @@ -194,12 +194,12 @@ public sealed partial class PartClone for(uint i = 0; i < length; i++) { - if(_byteMap[sectorAddress + i] != 0) - { - allEmpty = false; + if(_byteMap[sectorAddress + i] == 0) + continue; - break; - } + allEmpty = false; + + break; } if(allEmpty) diff --git a/Aaru.Images/Partimage/Read.cs b/Aaru.Images/Partimage/Read.cs index 4872452f9..b37618918 100644 --- a/Aaru.Images/Partimage/Read.cs +++ b/Aaru.Images/Partimage/Read.cs @@ -445,12 +445,12 @@ public sealed partial class Partimage for(uint i = 0; i < length; i++) { - if((_bitmap[sectorAddress / 8] & 1 << (int)(sectorAddress % 8)) != 0) - { - allEmpty = false; + if((_bitmap[sectorAddress / 8] & 1 << (int)(sectorAddress % 8)) == 0) + continue; - break; - } + allEmpty = false; + + break; } if(allEmpty) diff --git a/Aaru.Partitions/Sun.cs b/Aaru.Partitions/Sun.cs index 5cf7fec47..c41727fbf 100644 --- a/Aaru.Partitions/Sun.cs +++ b/Aaru.Partitions/Sun.cs @@ -193,26 +193,26 @@ public sealed class SunDisklabel : IPartition for(var i = 0; i < NDKMAP; i++) { - if(dkl.dkl_map[i].dkl_cylno > 0 && - dkl.dkl_map[i].dkl_nblk > 0) - { - var part = new Partition - { - Size = (ulong)dkl.dkl_map[i].dkl_nblk * DK_LABEL_SIZE, - Length = (ulong)(dkl.dkl_map[i].dkl_nblk * DK_LABEL_SIZE / imagePlugin.Info.SectorSize), - Sequence = (ulong)i, - Offset = - ((ulong)dkl.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * DK_LABEL_SIZE, - Start = ((ulong)dkl.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * - DK_LABEL_SIZE / imagePlugin.Info.SectorSize, - Type = Localization.SunOS_partition, - Scheme = Name - }; + if(dkl.dkl_map[i].dkl_cylno <= 0 || + dkl.dkl_map[i].dkl_nblk <= 0) + continue; - if(part.Start < imagePlugin.Info.Sectors && - part.End <= imagePlugin.Info.Sectors) - partitions.Add(part); - } + var part = new Partition + { + Size = (ulong)dkl.dkl_map[i].dkl_nblk * DK_LABEL_SIZE, + Length = (ulong)(dkl.dkl_map[i].dkl_nblk * DK_LABEL_SIZE / imagePlugin.Info.SectorSize), + Sequence = (ulong)i, + Offset = + ((ulong)dkl.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * DK_LABEL_SIZE, + Start = ((ulong)dkl.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * + DK_LABEL_SIZE / imagePlugin.Info.SectorSize, + Type = Localization.SunOS_partition, + Scheme = Name + }; + + if(part.Start < imagePlugin.Info.Sectors && + part.End <= imagePlugin.Info.Sectors) + partitions.Add(part); } } else if(useDkl8) @@ -271,35 +271,35 @@ public sealed class SunDisklabel : IPartition for(var i = 0; i < dkl8.dkl_vtoc.v_nparts; i++) { - if(dkl8.dkl_map[i].dkl_nblk > 0 && - dkl8.dkl_vtoc.v_part[i].p_tag != SunTag.SunEmpty && - dkl8.dkl_vtoc.v_part[i].p_tag != SunTag.SunWholeDisk) + if(dkl8.dkl_map[i].dkl_nblk <= 0 || + dkl8.dkl_vtoc.v_part[i].p_tag == SunTag.SunEmpty || + dkl8.dkl_vtoc.v_part[i].p_tag == SunTag.SunWholeDisk) + continue; + + var part = new Partition { - var part = new Partition - { - Description = SunFlagsToString(dkl8.dkl_vtoc.v_part[i].p_flag), - Size = (ulong)dkl8.dkl_map[i].dkl_nblk * DK_LABEL_SIZE, - Length = (ulong)(dkl8.dkl_map[i].dkl_nblk * DK_LABEL_SIZE / imagePlugin.Info.SectorSize), - Sequence = (ulong)i, - Offset = ((ulong)dkl8.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * - DK_LABEL_SIZE, - Start = ((ulong)dkl8.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * - DK_LABEL_SIZE / imagePlugin.Info.SectorSize, - Type = SunIdToString(dkl8.dkl_vtoc.v_part[i].p_tag), - Scheme = Name - }; + Description = SunFlagsToString(dkl8.dkl_vtoc.v_part[i].p_flag), + Size = (ulong)dkl8.dkl_map[i].dkl_nblk * DK_LABEL_SIZE, + Length = (ulong)(dkl8.dkl_map[i].dkl_nblk * DK_LABEL_SIZE / imagePlugin.Info.SectorSize), + Sequence = (ulong)i, + Offset = ((ulong)dkl8.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * + DK_LABEL_SIZE, + Start = ((ulong)dkl8.dkl_map[i].dkl_cylno * sectorsPerCylinder + sectorOffset) * + DK_LABEL_SIZE / imagePlugin.Info.SectorSize, + Type = SunIdToString(dkl8.dkl_vtoc.v_part[i].p_tag), + Scheme = Name + }; - if(dkl8.dkl_vtoc.v_timestamp[i] != 0) - { - part.Description += "\n" + string.Format(Localization.Partition_timestamped_on_0, - DateHandlers. - UnixToDateTime(dkl8.dkl_vtoc.v_timestamp[i])); - } - - if(part.Start < imagePlugin.Info.Sectors && - part.End <= imagePlugin.Info.Sectors) - partitions.Add(part); + if(dkl8.dkl_vtoc.v_timestamp[i] != 0) + { + part.Description += "\n" + string.Format(Localization.Partition_timestamped_on_0, + DateHandlers. + UnixToDateTime(dkl8.dkl_vtoc.v_timestamp[i])); } + + if(part.Start < imagePlugin.Info.Sectors && + part.End <= imagePlugin.Info.Sectors) + partitions.Add(part); } } else @@ -357,35 +357,35 @@ public sealed class SunDisklabel : IPartition for(var i = 0; i < dkl16.dkl_vtoc.v_nparts; i++) { - if(dkl16.dkl_vtoc.v_part[i].p_size > 0 && - dkl16.dkl_vtoc.v_part[i].p_tag != SunTag.SunEmpty && - dkl16.dkl_vtoc.v_part[i].p_tag != SunTag.SunWholeDisk) + if(dkl16.dkl_vtoc.v_part[i].p_size <= 0 || + dkl16.dkl_vtoc.v_part[i].p_tag == SunTag.SunEmpty || + dkl16.dkl_vtoc.v_part[i].p_tag == SunTag.SunWholeDisk) + continue; + + var part = new Partition { - var part = new Partition - { - Description = SunFlagsToString(dkl16.dkl_vtoc.v_part[i].p_flag), - Size = (ulong)dkl16.dkl_vtoc.v_part[i].p_size * dkl16.dkl_vtoc.v_sectorsz, - Length = (ulong)(dkl16.dkl_vtoc.v_part[i].p_size * dkl16.dkl_vtoc.v_sectorsz / - imagePlugin.Info.SectorSize), - Sequence = (ulong)i, - Offset = ((ulong)dkl16.dkl_vtoc.v_part[i].p_start + sectorOffset) * dkl16.dkl_vtoc.v_sectorsz, - Start = ((ulong)dkl16.dkl_vtoc.v_part[i].p_start + sectorOffset) * dkl16.dkl_vtoc.v_sectorsz / - imagePlugin.Info.SectorSize, - Type = SunIdToString(dkl16.dkl_vtoc.v_part[i].p_tag), - Scheme = Name - }; + Description = SunFlagsToString(dkl16.dkl_vtoc.v_part[i].p_flag), + Size = (ulong)dkl16.dkl_vtoc.v_part[i].p_size * dkl16.dkl_vtoc.v_sectorsz, + Length = (ulong)(dkl16.dkl_vtoc.v_part[i].p_size * dkl16.dkl_vtoc.v_sectorsz / + imagePlugin.Info.SectorSize), + Sequence = (ulong)i, + Offset = ((ulong)dkl16.dkl_vtoc.v_part[i].p_start + sectorOffset) * dkl16.dkl_vtoc.v_sectorsz, + Start = ((ulong)dkl16.dkl_vtoc.v_part[i].p_start + sectorOffset) * dkl16.dkl_vtoc.v_sectorsz / + imagePlugin.Info.SectorSize, + Type = SunIdToString(dkl16.dkl_vtoc.v_part[i].p_tag), + Scheme = Name + }; - if(dkl16.dkl_vtoc.v_timestamp[i] != 0) - { - part.Description += "\n" + string.Format(Localization.Partition_timestamped_on_0, - DateHandlers. - UnixToDateTime(dkl16.dkl_vtoc.v_timestamp[i])); - } - - if(part.Start < imagePlugin.Info.Sectors && - part.End <= imagePlugin.Info.Sectors) - partitions.Add(part); + if(dkl16.dkl_vtoc.v_timestamp[i] != 0) + { + part.Description += "\n" + string.Format(Localization.Partition_timestamped_on_0, + DateHandlers. + UnixToDateTime(dkl16.dkl_vtoc.v_timestamp[i])); } + + if(part.Start < imagePlugin.Info.Sectors && + part.End <= imagePlugin.Info.Sectors) + partitions.Add(part); } } diff --git a/Aaru.Partitions/VTOC.cs b/Aaru.Partitions/VTOC.cs index cc04960b5..e0266ef01 100644 --- a/Aaru.Partitions/VTOC.cs +++ b/Aaru.Partitions/VTOC.cs @@ -367,63 +367,63 @@ public sealed class VTOC : IPartition // This means partition starts are absolute, not relative, to the VTOC position for(var i = 0; i < V_NUMPAR; i++) { - if(parts[i].p_tag == pTag.V_BACKUP && - (ulong)parts[i].p_start == sectorOffset) - { - absolute = true; + if(parts[i].p_tag != pTag.V_BACKUP || + (ulong)parts[i].p_start != sectorOffset) + continue; - break; - } + absolute = true; + + break; } for(var i = 0; i < V_NUMPAR; i++) { - if(parts[i].p_tag != pTag.V_UNUSED) + if(parts[i].p_tag == pTag.V_UNUSED) + continue; + + var part = new Partition { - var part = new Partition - { - Start = (ulong)(parts[i].p_start * bps) / imagePlugin.Info.SectorSize, - Length = (ulong)(parts[i].p_size * bps) / imagePlugin.Info.SectorSize, - Offset = (ulong)(parts[i].p_start * bps), - Size = (ulong)(parts[i].p_size * bps), - Sequence = (ulong)i, - Type = $"UNIX: {DecodeUnixtag(parts[i].p_tag, !useOld)}", - Scheme = Name - }; + Start = (ulong)(parts[i].p_start * bps) / imagePlugin.Info.SectorSize, + Length = (ulong)(parts[i].p_size * bps) / imagePlugin.Info.SectorSize, + Offset = (ulong)(parts[i].p_start * bps), + Size = (ulong)(parts[i].p_size * bps), + Sequence = (ulong)i, + Type = $"UNIX: {DecodeUnixtag(parts[i].p_tag, !useOld)}", + Scheme = Name + }; - var info = ""; + var info = ""; - // Apparently old ones are absolute :? - if(!useOld && - !absolute) - { - part.Start += sectorOffset; - part.Offset += sectorOffset * imagePlugin.Info.SectorSize; - } - - if(parts[i].p_flag.HasFlag(pFlag.V_VALID)) - info += Localization.valid; - - if(parts[i].p_flag.HasFlag(pFlag.V_UNMNT)) - info += Localization._unmountable_; - - if(parts[i].p_flag.HasFlag(pFlag.V_OPEN)) - info += Localization.open; - - if(parts[i].p_flag.HasFlag(pFlag.V_REMAP)) - info += Localization.alternate_sector_mapping; - - if(parts[i].p_flag.HasFlag(pFlag.V_RONLY)) - info += Localization._read_only_; - - if(timestamps[i] != 0) - info += string.Format(Localization.created_on_0, DateHandlers.UnixToDateTime(timestamps[i])); - - part.Description = "UNIX slice" + info + "."; - - if(part.End < imagePlugin.Info.Sectors) - partitions.Add(part); + // Apparently old ones are absolute :? + if(!useOld && + !absolute) + { + part.Start += sectorOffset; + part.Offset += sectorOffset * imagePlugin.Info.SectorSize; } + + if(parts[i].p_flag.HasFlag(pFlag.V_VALID)) + info += Localization.valid; + + if(parts[i].p_flag.HasFlag(pFlag.V_UNMNT)) + info += Localization._unmountable_; + + if(parts[i].p_flag.HasFlag(pFlag.V_OPEN)) + info += Localization.open; + + if(parts[i].p_flag.HasFlag(pFlag.V_REMAP)) + info += Localization.alternate_sector_mapping; + + if(parts[i].p_flag.HasFlag(pFlag.V_RONLY)) + info += Localization._read_only_; + + if(timestamps[i] != 0) + info += string.Format(Localization.created_on_0, DateHandlers.UnixToDateTime(timestamps[i])); + + part.Description = "UNIX slice" + info + "."; + + if(part.End < imagePlugin.Info.Sectors) + partitions.Add(part); } return partitions.Count > 0; @@ -440,15 +440,15 @@ public sealed class VTOC : IPartition pTag.V_USER => "/usr", pTag.V_BACKUP => Localization.Whole_disk, pTag.V_STAND_OLD => isNew - ? "Stand" - : Localization.Alternate_sector_space, + ? "Stand" + : Localization.Alternate_sector_space, pTag.V_VAR_OLD => isNew ? "/var" : Localization.non_UNIX, pTag.V_HOME_OLD => isNew - ? "/home" - : Localization.Alternate_track_space, + ? "/home" + : Localization.Alternate_track_space, pTag.V_ALTSCTR_OLD => isNew - ? Localization.Alternate_sector_track - : "Stand", + ? Localization.Alternate_sector_track + : "Stand", pTag.V_CACHE => isNew ? Localization.Cache : "/var", pTag.V_RESERVED => isNew ? Localization.Reserved : "/home", diff --git a/Aaru.Tests/Issues/FsExtractIssueTest.cs b/Aaru.Tests/Issues/FsExtractIssueTest.cs index e1cc450c9..77c16b535 100644 --- a/Aaru.Tests/Issues/FsExtractIssueTest.cs +++ b/Aaru.Tests/Issues/FsExtractIssueTest.cs @@ -81,24 +81,24 @@ public abstract class FsExtractIssueTest { foreach(string pluginName in idPlugins) { - if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out pluginType)) - { - Assert.IsNotNull(pluginType, Localization.Could_not_instantiate_filesystem_plugin); + if(!plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out pluginType)) + continue; - var fs = Activator.CreateInstance(pluginType) as IReadOnlyFilesystem; + Assert.IsNotNull(pluginType, Localization.Could_not_instantiate_filesystem_plugin); - Assert.IsNotNull(fs, - string.Format(Localization.Could_not_instantiate_filesystem_0, pluginName)); + var fs = Activator.CreateInstance(pluginType) as IReadOnlyFilesystem; - filesystemFound = true; + Assert.IsNotNull(fs, + string.Format(Localization.Could_not_instantiate_filesystem_0, pluginName)); - error = fs.Mount(imageFormat, partitions[i], encodingClass, options, Namespace); + filesystemFound = true; - Assert.AreEqual(ErrorNumber.NoError, error, - string.Format(Localization.Could_not_mount_0_in_partition_1, pluginName, i)); + error = fs.Mount(imageFormat, partitions[i], encodingClass, options, Namespace); - ExtractFilesInDir("/", fs, Xattrs); - } + Assert.AreEqual(ErrorNumber.NoError, error, + string.Format(Localization.Could_not_mount_0_in_partition_1, pluginName, i)); + + ExtractFilesInDir("/", fs, Xattrs); } } else diff --git a/Aaru.sln.DotSettings b/Aaru.sln.DotSettings index c5d2604fa..78b23cab2 100644 --- a/Aaru.sln.DotSettings +++ b/Aaru.sln.DotSettings @@ -630,6 +630,9 @@ /opt/dotnet/sdk/3.0.100/MSBuild.dll 1048576 + True + True + True True True True diff --git a/Aaru/Commands/Filesystem/ExtractFiles.cs b/Aaru/Commands/Filesystem/ExtractFiles.cs index 6e1c6bba1..ee2186c01 100644 --- a/Aaru/Commands/Filesystem/ExtractFiles.cs +++ b/Aaru/Commands/Filesystem/ExtractFiles.cs @@ -314,37 +314,37 @@ sealed class ExtractFilesCommand : Command foreach(string pluginName in idPlugins) { - if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out pluginType)) + if(!plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out pluginType)) + continue; + + AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, pluginType.Name) + }[/]"); + + if(Activator.CreateInstance(pluginType) is not IReadOnlyFilesystem fs) + continue; + + Core.Spectre.ProgressSingleSpinner(ctx => { - AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, pluginType.Name) - }[/]"); + ctx.AddTask(UI.Mounting_filesystem). + IsIndeterminate(); - if(Activator.CreateInstance(pluginType) is not IReadOnlyFilesystem fs) - continue; + error = fs.Mount(imageFormat, partitions[i], + encodingClass, parsedOptions, + @namespace); + }); - Core.Spectre.ProgressSingleSpinner(ctx => - { - ctx.AddTask(UI.Mounting_filesystem). - IsIndeterminate(); + if(error == ErrorNumber.NoError) + { + string volumeName = string.IsNullOrEmpty(fs.Metadata.VolumeName) + ? "NO NAME" + : fs.Metadata.VolumeName; - error = fs.Mount(imageFormat, partitions[i], - encodingClass, parsedOptions, - @namespace); - }); + ExtractFilesInDir("/", fs, volumeName, outputDir, xattrs); - if(error == ErrorNumber.NoError) - { - string volumeName = string.IsNullOrEmpty(fs.Metadata.VolumeName) - ? "NO NAME" - : fs.Metadata.VolumeName; - - ExtractFilesInDir("/", fs, volumeName, outputDir, xattrs); - - Statistics.AddFilesystem(fs.Metadata.Type); - } - else - AaruConsole.ErrorWriteLine(UI.Unable_to_mount_volume_error_0, error.ToString()); + Statistics.AddFilesystem(fs.Metadata.Type); } + else + AaruConsole.ErrorWriteLine(UI.Unable_to_mount_volume_error_0, error.ToString()); } } else diff --git a/Aaru/Commands/Filesystem/Info.cs b/Aaru/Commands/Filesystem/Info.cs index e8df02588..2c64533cc 100644 --- a/Aaru/Commands/Filesystem/Info.cs +++ b/Aaru/Commands/Filesystem/Info.cs @@ -304,20 +304,19 @@ sealed class FilesystemInfoCommand : Command foreach(string pluginName in idPlugins) { - if(plugins.Filesystems.TryGetValue(pluginName, out pluginType)) - { - if(Activator.CreateInstance(pluginType) is not IFilesystem fs) - continue; + if(!plugins.Filesystems.TryGetValue(pluginName, out pluginType)) + continue; + if(Activator.CreateInstance(pluginType) is not IFilesystem fs) + continue; - AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, fs.Name) - }[/]"); + AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, fs.Name) + }[/]"); - fs.GetInformation(imageFormat, partitionsList[i], encodingClass, - out information, out FileSystem fsMetadata); + fs.GetInformation(imageFormat, partitionsList[i], encodingClass, + out information, out FileSystem fsMetadata); - AaruConsole.Write(information); - Statistics.AddFilesystem(fsMetadata.Type); - } + AaruConsole.Write(information); + Statistics.AddFilesystem(fsMetadata.Type); } break; @@ -375,19 +374,18 @@ sealed class FilesystemInfoCommand : Command foreach(string pluginName in idPlugins) { - if(plugins.Filesystems.TryGetValue(pluginName, out pluginType)) - { - if(Activator.CreateInstance(pluginType) is not IFilesystem fs) - continue; + if(!plugins.Filesystems.TryGetValue(pluginName, out pluginType)) + continue; + if(Activator.CreateInstance(pluginType) is not IFilesystem fs) + continue; - AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, fs.Name)}[/]"); + AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, fs.Name)}[/]"); - fs.GetInformation(imageFormat, wholePart, encodingClass, out information, - out FileSystem fsMetadata); + fs.GetInformation(imageFormat, wholePart, encodingClass, out information, + out FileSystem fsMetadata); - AaruConsole.Write(information); - Statistics.AddFilesystem(fsMetadata.Type); - } + AaruConsole.Write(information); + Statistics.AddFilesystem(fsMetadata.Type); } break; diff --git a/Aaru/Commands/Filesystem/Ls.cs b/Aaru/Commands/Filesystem/Ls.cs index 35821fedd..03cd7fcb2 100644 --- a/Aaru/Commands/Filesystem/Ls.cs +++ b/Aaru/Commands/Filesystem/Ls.cs @@ -286,32 +286,31 @@ sealed class LsCommand : Command foreach(string pluginName in idPlugins) { - if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out pluginType)) + if(!plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out pluginType)) + continue; + if(Activator.CreateInstance(pluginType) is not IReadOnlyFilesystem fs) + continue; + + AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, fs.Name)}[/]"); + + Core.Spectre.ProgressSingleSpinner(ctx => { - if(Activator.CreateInstance(pluginType) is not IReadOnlyFilesystem fs) - continue; + ctx.AddTask(UI.Mounting_filesystem). + IsIndeterminate(); - AaruConsole.WriteLine($"[bold]{string.Format(UI.As_identified_by_0, fs.Name)}[/]"); + error = fs.Mount(imageFormat, partitions[i], + encodingClass, parsedOptions, + @namespace); + }); - Core.Spectre.ProgressSingleSpinner(ctx => - { - ctx.AddTask(UI.Mounting_filesystem). - IsIndeterminate(); + if(error == ErrorNumber.NoError) + { + ListFilesInDir("/", fs, longFormat); - error = fs.Mount(imageFormat, partitions[i], - encodingClass, parsedOptions, - @namespace); - }); - - if(error == ErrorNumber.NoError) - { - ListFilesInDir("/", fs, longFormat); - - Statistics.AddFilesystem(fs.Metadata.Type); - } - else - AaruConsole.ErrorWriteLine(UI.Unable_to_mount_volume_error_0, error.ToString()); + Statistics.AddFilesystem(fs.Metadata.Type); } + else + AaruConsole.ErrorWriteLine(UI.Unable_to_mount_volume_error_0, error.ToString()); } } else