From bd3fe7bd4e3c3b3d8c4d7f327777dad95b52d3b7 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 15 Nov 2022 01:35:06 +0000 Subject: [PATCH] General code style and feature fixes. --- Aaru.CommonTypes | 2 +- Aaru.Compression/LZMA.cs | 6 +- .../Devices/Dumping/CompactDisc/CdiReady.cs | 10 +- Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs | 2 - .../Devices/Dumping/CompactDisc/LeadOuts.cs | 7 + .../Devices/Dumping/CompactDisc/Pregap.cs | 11 +- Aaru.Core/Devices/Dumping/Sbc/Error.cs | 4 +- Aaru.Core/Devices/Dumping/SecureDigital.cs | 32 ++-- Aaru.Core/Devices/Report/GdRomSwapTrick.cs | 2 +- Aaru.Core/Devices/Report/Scsi.cs | 2 +- Aaru.Core/Media/Info/ScsiInfo.cs | 71 ++++---- Aaru.Core/Remote.cs | 2 +- Aaru.Decoders | 2 +- Aaru.Devices/Device/Constructor.cs | 2 + Aaru.Devices/Device/ScsiCommands/MiniDisc.cs | 6 +- Aaru.Devices/Remote/Device.cs | 1 + Aaru.Devices/Remote/Remote.cs | 14 +- Aaru.Filesystems/Acorn.cs | 2 +- Aaru.Filesystems/CPM/Structs.cs | 2 +- Aaru.Filesystems/FAT/File.cs | 2 +- Aaru.Filesystems/FAT/Info.cs | 20 +-- Aaru.Filesystems/FAT/Structs.cs | 2 +- Aaru.Filesystems/FAT/Super.cs | 60 +------ Aaru.Filesystems/FFS.cs | 23 ++- Aaru.Filesystems/ISO9660/Dir.cs | 20 +-- Aaru.Filesystems/ISO9660/Structs/Internal.cs | 4 +- Aaru.Filesystems/ISO9660/Xattr.cs | 4 +- Aaru.Filesystems/LisaFS/Structs.cs | 2 + Aaru.Filesystems/Opera/Structs.cs | 2 +- Aaru.Filesystems/SysV.cs | 10 ++ Aaru.Filesystems/UDF.cs | 14 +- Aaru.Filesystems/extFS.cs | 2 + Aaru.Filters/XZ.cs | 2 +- Aaru.Gui/ViewModels/Dialogs/AboutViewModel.cs | 2 +- .../ViewModels/Dialogs/ConsoleViewModel.cs | 4 +- .../ViewModels/Dialogs/PluginsViewModel.cs | 7 +- .../ViewModels/Panels/DeviceInfoViewModel.cs | 2 +- .../ViewModels/Panels/MediaInfoViewModel.cs | 2 +- Aaru.Gui/ViewModels/Tabs/AtaInfoViewModel.cs | 6 +- .../ViewModels/Tabs/BlurayInfoViewModel.cs | 2 +- .../Tabs/CompactDiscInfoViewModel.cs | 14 +- Aaru.Gui/ViewModels/Tabs/DvdInfoViewModel.cs | 2 +- .../Tabs/DvdWritableInfoViewModel.cs | 2 +- .../ViewModels/Tabs/PcmciaInfoViewModel.cs | 2 +- Aaru.Gui/ViewModels/Tabs/ScsiInfoViewModel.cs | 17 +- Aaru.Gui/ViewModels/Tabs/XboxInfoViewModel.cs | 2 +- .../Windows/ImageChecksumViewModel.cs | 3 +- .../Windows/ImageConvertViewModel.cs | 19 +- .../Windows/ImageEntropyViewModel.cs | 1 + .../Windows/ImageSidecarViewModel.cs | 2 +- .../ViewModels/Windows/MediaDumpViewModel.cs | 8 +- .../ViewModels/Windows/MediaScanViewModel.cs | 4 +- .../Windows/SplashWindowViewModel.cs | 7 +- Aaru.Helpers | 2 +- Aaru.Images/AaruFormat/CdEcc.cs | 4 +- Aaru.Images/AaruFormat/Read.cs | 53 +++--- Aaru.Images/BlindWrite4/Read.cs | 13 +- Aaru.Images/BlindWrite5/Read.cs | 14 +- Aaru.Images/ByteAddressable/GameBoy.cs | 2 +- Aaru.Images/CDRDAO/Identify.cs | 2 +- Aaru.Images/CDRDAO/Read.cs | 7 +- Aaru.Images/CDRWin/Identify.cs | 8 +- Aaru.Images/CDRWin/Read.cs | 10 +- Aaru.Images/CDRWin/Structs.cs | 2 +- Aaru.Images/DART/Read.cs | 15 +- Aaru.Images/DiscJuggler/Read.cs | 6 +- Aaru.Images/DiskCopy42/Read.cs | 15 +- Aaru.Images/DiskCopy42/Write.cs | 2 +- Aaru.Images/HDCopy/Helpers.cs | 2 +- Aaru.Images/KryoFlux/Read.cs | 3 +- Aaru.Images/NDIF/Read.cs | 15 +- Aaru.Images/Nero/Read.cs | 5 +- Aaru.Images/Nero/Structs.cs | 6 +- Aaru.Images/Partimage/Structs.cs | 1 + Aaru.Images/UDIF/Read.cs | 15 +- Aaru.Images/VDI/Write.cs | 2 +- Aaru.Images/VHD/Read.cs | 2 +- Aaru.Images/ZZZRawImage/Read.cs | 2 +- Aaru.Partitions/AppleMap.cs | 4 +- Aaru.Partitions/MBR.cs | 3 +- Aaru.Partitions/NeXT.cs | 4 +- Aaru.Partitions/Xbox.cs | 2 - Aaru.Settings/Settings.cs | 21 +-- Aaru.Tests.Devices/SCSI/HP.cs | 4 +- Aaru.Tests/Filesystems/FilesystemTest.cs | 4 +- .../Filesystems/ReadOnlyFilesystemTest.cs | 4 +- Aaru.Tests/Structs.cs | 4 +- Aaru.sln.DotSettings | 32 ++++ Aaru/Commands/Device/DeviceReport.cs | 168 +++++++++--------- Aaru/Commands/Filesystem/ExtractFiles.cs | 2 +- Aaru/Commands/Image/Compare.cs | 8 +- Aaru/Commands/Image/Convert.cs | 10 +- Aaru/Commands/Image/Decode.cs | 3 +- Aaru/Commands/Image/Print.cs | 2 +- 94 files changed, 460 insertions(+), 478 deletions(-) diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index 937d6929a..97c141693 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit 937d6929a006165ee0d65bc9f82dd22fa775928d +Subproject commit 97c1416934974e2e8579fc7789716eb7ba11458a diff --git a/Aaru.Compression/LZMA.cs b/Aaru.Compression/LZMA.cs index 66aa43018..e15b05dee 100644 --- a/Aaru.Compression/LZMA.cs +++ b/Aaru.Compression/LZMA.cs @@ -30,6 +30,7 @@ namespace Aaru.Compression; using System.IO; using System.Runtime.InteropServices; +using Aaru.Helpers; using SharpCompress.Compressors.LZMA; /// @@ -69,7 +70,7 @@ public class LZMA using var cmpMs = new MemoryStream(source); using var lzmaBlock = new LzmaStream(properties, cmpMs); - lzmaBlock.Read(destination, 0, destination.Length); + lzmaBlock.EnsureRead(destination, 0, destination.Length); return destination.Length; } @@ -83,7 +84,8 @@ public class LZMA /// Literal context bits /// Literal position bits /// Position bits - /// + /// Forward bits + /// How many bytes have been written to the destination buffer public static int EncodeBuffer(byte[] source, byte[] destination, out byte[] properties, int level, uint dictSize, int lc, int lp, int pb, int fb) { diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs index 8b129aadf..750f3ff7d 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs @@ -267,7 +267,7 @@ partial class Dump desiredSubchannel, sub, i + r, 1, subLog, isrcs, 1, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true, - out List newPregapSectors); + out List _); // Set tracks and go back if(indexesChanged) @@ -347,10 +347,10 @@ partial class Dump outputOptical.WriteSectorsLong(data, i, blocksToRead); bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, - desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, 1, ref mcn, tracks, - subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel, - _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true, - out List newPregapSectors); + desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, 1, ref mcn, tracks, + subchannelExtents, _fixSubchannelPosition, outputOptical, _fixSubchannel, + _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true, + out List newPregapSectors); // Set tracks and go back if(indexesChanged) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index e6aa287fe..6df1af8a4 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -322,7 +322,6 @@ sealed partial class Dump UpdateStatus?.Invoke("Full raw subchannel reading supported..."); subType = TrackSubchannelType.Raw; subSize = 96; - readcd = true; break; case MmcSubchannel.Q16: @@ -335,7 +334,6 @@ sealed partial class Dump subType = TrackSubchannelType.Q16; subSize = 16; - readcd = true; break; } diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs index f793d08c2..9ffe5287b 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs @@ -38,6 +38,7 @@ namespace Aaru.Core.Devices.Dumping; using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Extents; @@ -75,6 +76,9 @@ partial class Dump /// Disc media catalogue number /// List of subchannels not yet dumped correctly /// List of smallest pregap relative address per track + + // TODO: Use it + [SuppressMessage("ReSharper", "UnusedMember.Local")] void DumpCdLeadOuts(uint blockSize, ref double currentSpeed, DumpHardwareType currentTry, ExtentsULong extents, IbgLog ibgLog, ref double imageWriteDuration, ExtentsULong leadOutExtents, ref double maxSpeed, MhddLog mhddLog, ref double minSpeed, bool read6, bool read10, bool read12, bool read16, @@ -244,6 +248,9 @@ partial class Dump /// Disc media catalogue number /// List of subchannels not yet dumped correctly /// List of smallest pregap relative address per track + + // TODO: Use it + [SuppressMessage("ReSharper", "UnusedMember.Local")] void RetryCdLeadOuts(uint blockSize, ref double currentSpeed, DumpHardwareType currentTry, ExtentsULong extents, IbgLog ibgLog, ref double imageWriteDuration, ExtentsULong leadOutExtents, ref double maxSpeed, MhddLog mhddLog, ref double minSpeed, bool read6, bool read10, bool read12, bool read16, diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs index 23fa1d519..4c99e5e4a 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Pregap.cs @@ -175,11 +175,12 @@ partial class Dump break; } - AaruConsole.DebugWriteLine("Pregap calculator", bcd == true - ? "Subchannel is BCD" - : bcd == false - ? "Subchannel is not BCD" - : "Could not detect drive subchannel BCD"); + AaruConsole.DebugWriteLine("Pregap calculator", bcd switch + { + true => "Subchannel is BCD", + false => "Subchannel is not BCD", + _ => "Could not detect drive subchannel BCD" + }); if(bcd is null) { diff --git a/Aaru.Core/Devices/Dumping/Sbc/Error.cs b/Aaru.Core/Devices/Dumping/Sbc/Error.cs index b44ba0ca9..333425ff1 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Error.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Error.cs @@ -322,7 +322,9 @@ partial class Dump var forward = true; bool sense; byte[] buffer; - var outputFormat = _outputPlugin as IWritableImage; + + if(_outputPlugin is not IWritableImage outputFormat) + return; InitProgress?.Invoke(); diff --git a/Aaru.Core/Devices/Dumping/SecureDigital.cs b/Aaru.Core/Devices/Dumping/SecureDigital.cs index c24af2665..c5eea37a5 100644 --- a/Aaru.Core/Devices/Dumping/SecureDigital.cs +++ b/Aaru.Core/Devices/Dumping/SecureDigital.cs @@ -125,10 +125,12 @@ public partial class Dump blocks = ecsdDecoded.SectorCount; blockSize = (uint)(ecsdDecoded.SectorSize == 1 ? 4096 : 512); - if(ecsdDecoded.NativeSectorSize == 0) - physicalBlockSize = 512; - else if(ecsdDecoded.NativeSectorSize == 1) - physicalBlockSize = 4096; + physicalBlockSize = ecsdDecoded.NativeSectorSize switch + { + 0 => 512, + 1 => 4096, + _ => physicalBlockSize + }; blocksToRead = (ushort)(ecsdDecoded.OptimalReadSize * 4096 / blockSize); @@ -758,7 +760,6 @@ public partial class Dump { var pass = 1; var forward = true; - const bool runningPersistent = false; InitProgress?.Invoke(); repeatRetryLba: @@ -775,9 +776,7 @@ public partial class Dump break; } - PulseProgress?.Invoke(string.Format("Retrying sector {0}, pass {1}, {3}{2}", badSector, pass, - forward ? "forward" : "reverse", - runningPersistent ? "recovering partial data, " : "")); + PulseProgress?.Invoke($"Retrying sector {badSector}, pass {pass}, {(forward ? "forward" : "reverse")}"); error = _dev.ReadSingleBlock(out cmdBuf, out response, (uint)badSector, blockSize, byteAddressed, timeout, out duration); @@ -785,18 +784,17 @@ public partial class Dump totalDuration += duration; if(error) + { _errorLog?.WriteLine(badSector, _dev.Error, _dev.LastError, byteAddressed, response); - if(!error) - { - _resume.BadBlocks.Remove(badSector); - extents.Add(badSector); - outputFormat.WriteSector(cmdBuf, badSector); - UpdateStatus?.Invoke($"Correctly retried block {badSector} in pass {pass}."); - _dumpLog.WriteLine("Correctly retried block {0} in pass {1}.", badSector, pass); + continue; } - else if(runningPersistent) - outputFormat.WriteSector(cmdBuf, badSector); + + _resume.BadBlocks.Remove(badSector); + extents.Add(badSector); + outputFormat.WriteSector(cmdBuf, badSector); + UpdateStatus?.Invoke($"Correctly retried block {badSector} in pass {pass}."); + _dumpLog.WriteLine("Correctly retried block {0} in pass {1}.", badSector, pass); } if(pass < _retryPasses && diff --git a/Aaru.Core/Devices/Report/GdRomSwapTrick.cs b/Aaru.Core/Devices/Report/GdRomSwapTrick.cs index e055ee379..ac221f219 100644 --- a/Aaru.Core/Devices/Report/GdRomSwapTrick.cs +++ b/Aaru.Core/Devices/Report/GdRomSwapTrick.cs @@ -154,7 +154,7 @@ public sealed partial class DeviceReport tocIsNotBcd = true; break; - case >= 0xA0 when !tocIsNotBcd: + case >= 0xA0: min += 90; leadOutTrack.PMIN -= 0x90; diff --git a/Aaru.Core/Devices/Report/Scsi.cs b/Aaru.Core/Devices/Report/Scsi.cs index 72838193c..2c15b0b84 100644 --- a/Aaru.Core/Devices/Report/Scsi.cs +++ b/Aaru.Core/Devices/Report/Scsi.cs @@ -183,7 +183,7 @@ public sealed partial class DeviceReport return evpds.Count > 0 ? evpds : null; } - byte[] ClearPage83(byte[] pageResponse) + static byte[] ClearPage83(byte[] pageResponse) { if(pageResponse?[1] != 0x83) return null; diff --git a/Aaru.Core/Media/Info/ScsiInfo.cs b/Aaru.Core/Media/Info/ScsiInfo.cs index 86f15b200..23c2d0940 100644 --- a/Aaru.Core/Media/Info/ScsiInfo.cs +++ b/Aaru.Core/Media/Info/ScsiInfo.cs @@ -178,7 +178,7 @@ public sealed class ScsiInfo if(DeviceInfo.ScsiMode?.Header.BlockDescriptors?.Length > 0) scsiDensityCode = (byte)DeviceInfo.ScsiMode.Value.Header.BlockDescriptors[0].Density; - if(DeviceInfo.ScsiMode.Value.Pages != null) + if(DeviceInfo.ScsiMode?.Pages != null) containsFloppyPage = DeviceInfo.ScsiMode.Value.Pages.Any(p => p.Page == 0x05); } @@ -810,42 +810,49 @@ public sealed class ScsiInfo #endregion HD DVD-ROM } - #region HD DVD-R - if(MediaType == MediaType.HDDVDR) + switch(MediaType) { - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdrMediumStatus, 0, dev.Timeout, out _); + #region HD DVD-R + case MediaType.HDDVDR: + { + sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.HddvdrMediumStatus, 0, dev.Timeout, out _); - if(sense) - AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: HD DVD-R Medium Status\n{0}", - Sense.PrettifySense(senseBuf)); - else - HddvdrMediumStatus = cmdBuf; + if(sense) + AaruConsole.DebugWriteLine("Media-Info command", + "READ DISC STRUCTURE: HD DVD-R Medium Status\n{0}", + Sense.PrettifySense(senseBuf)); + else + HddvdrMediumStatus = cmdBuf; - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.HddvdrLastRmd, 0, dev.Timeout, out _); + sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.HddvdrLastRmd, 0, dev.Timeout, out _); - if(sense) - AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Last RMD\n{0}", - Sense.PrettifySense(senseBuf)); - else - HddvdrLastRmd = cmdBuf; + if(sense) + AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Last RMD\n{0}", + Sense.PrettifySense(senseBuf)); + else + HddvdrLastRmd = cmdBuf; + + break; + } + #endregion HD DVD-R + #region DVD-R DL, DVD-RW DL, DVD+R DL, DVD+RW DL + case MediaType.DVDPRDL or MediaType.DVDRDL or MediaType.DVDRWDL or MediaType.DVDPRWDL: + { + sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.DvdrLayerCapacity, 0, dev.Timeout, out _); + + if(sense) + AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Layer Capacity\n{0}", + Sense.PrettifySense(senseBuf)); + else + DvdrLayerCapacity = cmdBuf; + + break; + } + #endregion DVD-R DL, DVD-RW DL, DVD+R DL, DVD+RW DL } - #endregion HD DVD-R - - #region DVD-R DL, DVD-RW DL, DVD+R DL, DVD+RW DL - if(MediaType is MediaType.DVDPRDL or MediaType.DVDRDL or MediaType.DVDRWDL or MediaType.DVDPRWDL) - { - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, - MmcDiscStructureFormat.DvdrLayerCapacity, 0, dev.Timeout, out _); - - if(sense) - AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Layer Capacity\n{0}", - Sense.PrettifySense(senseBuf)); - else - DvdrLayerCapacity = cmdBuf; - } - #endregion DVD-R DL, DVD-RW DL, DVD+R DL, DVD+RW DL switch(MediaType) { diff --git a/Aaru.Core/Remote.cs b/Aaru.Core/Remote.cs index 4924bb930..f05912dab 100644 --- a/Aaru.Core/Remote.cs +++ b/Aaru.Core/Remote.cs @@ -474,7 +474,7 @@ public static class Remote ProgressTask task = ctx.AddTask("Updating known iNES/NES 2.0 headers"); task.MaxValue = sync.Offsets.Count; - sync.NesHeaders ??= new(); + sync.NesHeaders ??= new List(); foreach(NesHeaderDto header in sync.NesHeaders) { diff --git a/Aaru.Decoders b/Aaru.Decoders index a02220902..7e9c84703 160000 --- a/Aaru.Decoders +++ b/Aaru.Decoders @@ -1 +1 @@ -Subproject commit a02220902cf7a11a664fb0479f0c91142c62633d +Subproject commit 7e9c847033de7e69db0451b581f95c747057f7fe diff --git a/Aaru.Devices/Device/Constructor.cs b/Aaru.Devices/Device/Constructor.cs index d6e559d7f..0fcede2cf 100644 --- a/Aaru.Devices/Device/Constructor.cs +++ b/Aaru.Devices/Device/Constructor.cs @@ -50,6 +50,8 @@ public partial class Device { /// Opens the device for sending direct commands /// Device path + /// Sets the error if a device cannot be opened + /// Device public static Device Create(string devicePath, out ErrorNumber errno) { Device dev = null; diff --git a/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs b/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs index 85fde26b5..92ebb5ba2 100644 --- a/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs +++ b/Aaru.Devices/Device/ScsiCommands/MiniDisc.cs @@ -119,7 +119,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.MiniDiscD5; - cdb[7] = (transferLength & 0xFF00) >> 8; + cdb[7] = 0; cdb[8] = transferLength & 0xFF; buffer = new byte[transferLength]; @@ -173,7 +173,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.MiniDiscReadPosition; - cdb[7] = (transferLength & 0xFF00) >> 8; + cdb[7] = 0; cdb[8] = transferLength & 0xFF; buffer = new byte[transferLength]; @@ -202,7 +202,7 @@ public partial class Device cdb[0] = (byte)ScsiCommands.MiniDiscGetType; - cdb[7] = (transferLength & 0xFF00) >> 8; + cdb[7] = 0; cdb[8] = transferLength & 0xFF; buffer = new byte[transferLength]; diff --git a/Aaru.Devices/Remote/Device.cs b/Aaru.Devices/Remote/Device.cs index d710dda27..ca4315918 100644 --- a/Aaru.Devices/Remote/Device.cs +++ b/Aaru.Devices/Remote/Device.cs @@ -75,6 +75,7 @@ public sealed partial class Device : Devices.Device /// Opens the device for sending direct commands /// AaruRemote URI + /// Sets the error if a device cannot be opened /// Device internal static Device Create(Uri aaruUri, out ErrorNumber errno) { diff --git a/Aaru.Devices/Remote/Remote.cs b/Aaru.Devices/Remote/Remote.cs index c020e8431..ecf1caf07 100644 --- a/Aaru.Devices/Remote/Remote.cs +++ b/Aaru.Devices/Remote/Remote.cs @@ -1238,11 +1238,14 @@ public class Remote : IDisposable Array.Copy(res.ocr, 0, ocr, 0, res.ocr_len); } - if(res.scr_len <= 0) - return res.isSdhci; + switch(res.scr_len) + { + case <= 0: return res.isSdhci; + case > 16: + res.scr_len = 16; - if(res.scr_len > 16) - res.scr_len = 16; + break; + } scr = new byte[res.scr_len]; @@ -1588,8 +1591,7 @@ public class Remote : IDisposable long packetSize = Marshal.SizeOf() + Marshal.SizeOf() * commands.LongLength; - foreach(Devices.Device.MmcSingleCommand command in commands) - packetSize += command.buffer?.Length ?? 0; + packetSize = commands.Aggregate(packetSize, (current, command) => current + (command.buffer?.Length ?? 0)); var packet = new AaruPacketMultiCmdSdhci { diff --git a/Aaru.Filesystems/Acorn.cs b/Aaru.Filesystems/Acorn.cs index b0abfcd68..d916c32ef 100644 --- a/Aaru.Filesystems/Acorn.cs +++ b/Aaru.Filesystems/Acorn.cs @@ -603,7 +603,7 @@ public sealed class AcornADFS : IFilesystem XmlFsType.Type = "Acorn Advanced Disc Filing System"; } - byte AcornMapChecksum(byte[] data, int length) + static byte AcornMapChecksum(byte[] data, int length) { var sum = 0; var carry = 0; diff --git a/Aaru.Filesystems/CPM/Structs.cs b/Aaru.Filesystems/CPM/Structs.cs index 743ec2488..490b1dd12 100644 --- a/Aaru.Filesystems/CPM/Structs.cs +++ b/Aaru.Filesystems/CPM/Structs.cs @@ -43,7 +43,7 @@ public sealed partial class CPM { /// Most of the times this structure is hard wired or generated by CP/M, not stored on disk [SuppressMessage("ReSharper", "InconsistentNaming")] - class DiscParameterBlock + sealed class DiscParameterBlock { /// First byte of allocation bitmap public byte al0; diff --git a/Aaru.Filesystems/FAT/File.cs b/Aaru.Filesystems/FAT/File.cs index 777c1f99a..6cf89887c 100644 --- a/Aaru.Filesystems/FAT/File.cs +++ b/Aaru.Filesystems/FAT/File.cs @@ -331,7 +331,7 @@ public sealed partial class FAT return ErrorNumber.NoError; } - byte LfnChecksum(byte[] name, byte[] extension) + static byte LfnChecksum(byte[] name, byte[] extension) { byte sum = 0; diff --git a/Aaru.Filesystems/FAT/Info.cs b/Aaru.Filesystems/FAT/Info.cs index 919645ad9..529db989f 100644 --- a/Aaru.Filesystems/FAT/Info.cs +++ b/Aaru.Filesystems/FAT/Info.cs @@ -756,32 +756,16 @@ public sealed partial class FAT bool fat12Valid = fat12[0] >= FAT12_RESERVED && fat12[1] >= FAT12_RESERVED; - foreach(ushort entry in fat12) - { - if(entry >= FAT12_RESERVED || - entry <= clusters) - continue; - + if(fat12.Any(entry => entry < FAT12_RESERVED && entry > clusters)) fat12Valid = false; - break; - } - ushort[] fat16 = MemoryMarshal.Cast(fatBytes).ToArray(); bool fat16Valid = fat16[0] >= FAT16_RESERVED && fat16[1] >= 0x3FF0; - foreach(ushort entry in fat16) - { - if(entry >= FAT16_RESERVED || - entry <= clusters) - continue; - + if(fat16.Any(entry => entry < FAT16_RESERVED && entry > clusters)) fat16Valid = false; - break; - } - isFat12 = fat12Valid; isFat16 = fat16Valid; diff --git a/Aaru.Filesystems/FAT/Structs.cs b/Aaru.Filesystems/FAT/Structs.cs index 4056b1f1f..fed59163e 100644 --- a/Aaru.Filesystems/FAT/Structs.cs +++ b/Aaru.Filesystems/FAT/Structs.cs @@ -960,7 +960,7 @@ public sealed partial class FAT UMSDOS_HLINK = 2 } - class CompleteDirectoryEntry + sealed class CompleteDirectoryEntry { public DirectoryEntry Dirent; public DirectoryEntry Fat32Ea; diff --git a/Aaru.Filesystems/FAT/Super.cs b/Aaru.Filesystems/FAT/Super.cs index d1df3a05e..46cd83964 100644 --- a/Aaru.Filesystems/FAT/Super.cs +++ b/Aaru.Filesystems/FAT/Super.cs @@ -347,32 +347,16 @@ public sealed partial class FAT bool fat12Valid = fat12[0] >= FAT12_RESERVED && fat12[1] >= FAT12_RESERVED; - foreach(ushort entry in fat12) - { - if(entry >= FAT12_RESERVED || - entry <= clusters) - continue; - + if(fat12.Any(entry => entry < FAT12_RESERVED && entry > clusters)) fat12Valid = false; - break; - } - ushort[] fat16 = MemoryMarshal.Cast(fatBytes).ToArray(); bool fat16Valid = fat16[0] >= FAT16_RESERVED && fat16[1] >= 0x3FF0; - foreach(ushort entry in fat16) - { - if(entry >= FAT16_RESERVED || - entry <= clusters) - continue; - + if(fat16.Any(entry => entry < FAT16_RESERVED && entry > clusters)) fat16Valid = false; - break; - } - _fat12 = fat12Valid; _fat16 = fat16Valid; @@ -898,28 +882,12 @@ public sealed partial class FAT secondFatEntries[pos++] = (ushort)(((fatBytes[i + 1] & 0xF0) >> 4) + (fatBytes[i + 2] << 4)); } - foreach(ushort entry in firstFatEntries) - { - if(entry >= FAT12_RESERVED || - entry <= _statfs.Blocks) - continue; - + if(firstFatEntries.Any(entry => entry < FAT12_RESERVED && entry > _statfs.Blocks)) firstFatValid = false; - break; - } - - foreach(ushort entry in secondFatEntries) - { - if(entry >= FAT12_RESERVED || - entry <= _statfs.Blocks) - continue; - + if(secondFatEntries.Any(entry => entry < FAT12_RESERVED && entry > _statfs.Blocks)) secondFatValid = false; - break; - } - if(firstFatValid == secondFatValid) _fatEntries = _useFirstFat ? firstFatEntries : secondFatEntries; else if(firstFatValid) @@ -947,28 +915,12 @@ public sealed partial class FAT AaruConsole.DebugWriteLine("FAT plugin", "Casting FAT"); secondFatEntries = MemoryMarshal.Cast(fatBytes).ToArray(); - foreach(ushort entry in firstFatEntries) - { - if(entry >= FAT16_RESERVED || - entry <= _statfs.Blocks) - continue; - + if(firstFatEntries.Any(entry => entry < FAT16_RESERVED && entry > _statfs.Blocks)) firstFatValid = false; - break; - } - - foreach(ushort entry in secondFatEntries) - { - if(entry >= FAT16_RESERVED || - entry <= _statfs.Blocks) - continue; - + if(secondFatEntries.Any(entry => entry < FAT16_RESERVED && entry > _statfs.Blocks)) secondFatValid = false; - break; - } - if(firstFatValid == secondFatValid) _fatEntries = _useFirstFat ? firstFatEntries : secondFatEntries; else if(firstFatValid) diff --git a/Aaru.Filesystems/FFS.cs b/Aaru.Filesystems/FFS.cs index 8ef752a05..1940bf895 100644 --- a/Aaru.Filesystems/FFS.cs +++ b/Aaru.Filesystems/FFS.cs @@ -130,21 +130,20 @@ public sealed class FFSPlugin : IFilesystem try { - foreach(ulong loc in locations) - if(partition.End > partition.Start + loc + sbSizeInSectors) - { - ErrorNumber errno = - imagePlugin.ReadSectors(partition.Start + loc, sbSizeInSectors, out byte[] ufsSbSectors); + foreach(ulong loc in locations.Where(loc => partition.End > partition.Start + loc + sbSizeInSectors)) + { + ErrorNumber errno = + imagePlugin.ReadSectors(partition.Start + loc, sbSizeInSectors, out byte[] ufsSbSectors); - if(errno != ErrorNumber.NoError) - continue; + if(errno != ErrorNumber.NoError) + continue; - var magic = BitConverter.ToUInt32(ufsSbSectors, 0x055C); + var magic = BitConverter.ToUInt32(ufsSbSectors, 0x055C); - if(magic is UFS_MAGIC or UFS_CIGAM or UFS_MAGIC_BW or UFS_CIGAM_BW or UFS2_MAGIC or UFS2_CIGAM - or UFS_BAD_MAGIC or UFS_BAD_CIGAM) - return true; - } + if(magic is UFS_MAGIC or UFS_CIGAM or UFS_MAGIC_BW or UFS_CIGAM_BW or UFS2_MAGIC or UFS2_CIGAM + or UFS_BAD_MAGIC or UFS_BAD_CIGAM) + return true; + } return false; } diff --git a/Aaru.Filesystems/ISO9660/Dir.cs b/Aaru.Filesystems/ISO9660/Dir.cs index e37faa2e6..4c7bf15df 100644 --- a/Aaru.Filesystems/ISO9660/Dir.cs +++ b/Aaru.Filesystems/ISO9660/Dir.cs @@ -703,8 +703,7 @@ public sealed partial class ISO9660 if(amiga.flags.HasFlag(AmigaFlags.Comment)) { - if(entry.AmigaComment is null) - entry.AmigaComment = Array.Empty(); + entry.AmigaComment ??= Array.Empty(); var newComment = new byte[entry.AmigaComment.Length + data @@ -834,8 +833,7 @@ public sealed partial class ISO9660 Array.Copy(data, systemAreaOff + Marshal.SizeOf(), nm, 0, nm.Length); } - if(entry.RockRidgeAlternateName is null) - entry.RockRidgeAlternateName = Array.Empty(); + entry.RockRidgeAlternateName ??= Array.Empty(); var newNm = new byte[entry.RockRidgeAlternateName.Length + nm.Length]; Array.Copy(entry.RockRidgeAlternateName, 0, newNm, 0, entry.RockRidgeAlternateName.Length); @@ -1039,7 +1037,7 @@ public sealed partial class ISO9660 } } - PathTableEntryInternal[] GetPathTableEntries(string path) + IEnumerable GetPathTableEntries(string path) { IEnumerable tableEntries; List pathTableList = new(_pathTable); @@ -1082,8 +1080,8 @@ public sealed partial class ISO9660 DecodedDirectoryEntry[] GetSubdirsFromCdiPathTable(string path) { - PathTableEntryInternal[] tableEntries = GetPathTableEntries(path); - List entries = new(); + IEnumerable tableEntries = GetPathTableEntries(path); + List entries = new(); foreach(PathTableEntryInternal tEntry in tableEntries) { @@ -1134,8 +1132,8 @@ public sealed partial class ISO9660 DecodedDirectoryEntry[] GetSubdirsFromIsoPathTable(string path) { - PathTableEntryInternal[] tableEntries = GetPathTableEntries(path); - List entries = new(); + IEnumerable tableEntries = GetPathTableEntries(path); + List entries = new(); foreach(PathTableEntryInternal tEntry in tableEntries) { @@ -1186,8 +1184,8 @@ public sealed partial class ISO9660 DecodedDirectoryEntry[] GetSubdirsFromHighSierraPathTable(string path) { - PathTableEntryInternal[] tableEntries = GetPathTableEntries(path); - List entries = new(); + IEnumerable tableEntries = GetPathTableEntries(path); + List entries = new(); foreach(PathTableEntryInternal tEntry in tableEntries) { diff --git a/Aaru.Filesystems/ISO9660/Structs/Internal.cs b/Aaru.Filesystems/ISO9660/Structs/Internal.cs index 4b0eed42f..d149e12d7 100644 --- a/Aaru.Filesystems/ISO9660/Structs/Internal.cs +++ b/Aaru.Filesystems/ISO9660/Structs/Internal.cs @@ -57,7 +57,7 @@ public sealed partial class ISO9660 public uint Blocks; } - class DecodedDirectoryEntry + sealed class DecodedDirectoryEntry { public byte[] AmigaComment; public AmigaProtection? AmigaProtection; @@ -97,7 +97,7 @@ public sealed partial class ISO9660 public override string ToString() => Filename; } - class PathTableEntryInternal + sealed class PathTableEntryInternal { public uint Extent; public string Name; diff --git a/Aaru.Filesystems/ISO9660/Xattr.cs b/Aaru.Filesystems/ISO9660/Xattr.cs index ef91b1fb9..aa5131463 100644 --- a/Aaru.Filesystems/ISO9660/Xattr.cs +++ b/Aaru.Filesystems/ISO9660/Xattr.cs @@ -61,10 +61,10 @@ public sealed partial class ISO9660 if(entry.AssociatedFile != null) xattrs.Add("org.iso.9660.AssociatedFile"); - if(entry.AppleDosType != null) + if(entry.AppleDosType is not null) xattrs.Add("com.apple.dos.type"); - if(entry.AppleProDosType != null) + if(entry.AppleProDosType is not null) xattrs.Add("com.apple.prodos.type"); if(entry.ResourceFork != null) diff --git a/Aaru.Filesystems/LisaFS/Structs.cs b/Aaru.Filesystems/LisaFS/Structs.cs index e883f3079..44676f1d3 100644 --- a/Aaru.Filesystems/LisaFS/Structs.cs +++ b/Aaru.Filesystems/LisaFS/Structs.cs @@ -34,6 +34,7 @@ // ReSharper disable NotAccessedField.Local +#pragma warning disable CS0649 namespace Aaru.Filesystems.LisaFS; using System; @@ -205,6 +206,7 @@ public sealed partial class LisaFS public byte write_protected; /// Master disk (On-disk position unknown) public byte master; + #pragma warning restore CS0649 /// Copy disk (On-disk position unknown) public byte copy; /// No idea (On-disk position unknown) diff --git a/Aaru.Filesystems/Opera/Structs.cs b/Aaru.Filesystems/Opera/Structs.cs index a77fa6f2a..5e421c9ae 100644 --- a/Aaru.Filesystems/Opera/Structs.cs +++ b/Aaru.Filesystems/Opera/Structs.cs @@ -111,7 +111,7 @@ public sealed partial class OperaFS public readonly uint last_copy; } - class DirectoryEntryWithPointers + sealed class DirectoryEntryWithPointers { public DirectoryEntry Entry; public uint[] Pointers; diff --git a/Aaru.Filesystems/SysV.cs b/Aaru.Filesystems/SysV.cs index 0ed84bd2f..05e14a7ed 100644 --- a/Aaru.Filesystems/SysV.cs +++ b/Aaru.Filesystems/SysV.cs @@ -862,6 +862,7 @@ public sealed class SysVfs : IFilesystem } // Old XENIX use different offsets + #pragma warning disable CS0649 struct XenixSuperBlock { /// 0x000, index of first data zone @@ -915,7 +916,9 @@ public sealed class SysVfs : IFilesystem /// 0x3FC (0x1F4), filesystem type (1 = 512 bytes/blk, 2 = 1024 bytes/blk, 3 = 2048 bytes/blk) public uint s_type; } + #pragma warning restore CS0649 + #pragma warning disable CS0649 struct SystemVRelease4SuperBlock { /// 0x000, index of first data zone @@ -977,7 +980,9 @@ public sealed class SysVfs : IFilesystem /// 0x1FC, filesystem type (1 = 512 bytes/blk, 2 = 1024 bytes/blk) public uint s_type; } + #pragma warning restore CS0649 + #pragma warning disable CS0649 struct SystemVRelease2SuperBlock { /// 0x000, index of first data zone @@ -1031,7 +1036,9 @@ public sealed class SysVfs : IFilesystem /// 0x1FC, filesystem type (1 = 512 bytes/blk, 2 = 1024 bytes/blk) public uint s_type; } + #pragma warning restore CS0649 + #pragma warning disable CS0649 struct UNIX7thEditionSuperBlock { /// 0x000, index of first data zone @@ -1073,7 +1080,9 @@ public sealed class SysVfs : IFilesystem /// 0x1B2, 6 bytes, pack name public string s_fpack; } + #pragma warning restore CS0649 + #pragma warning disable CS0649 struct CoherentSuperBlock { /// 0x000, index of first data zone @@ -1117,4 +1126,5 @@ public sealed class SysVfs : IFilesystem /// 0x1F4, zero-filled public uint s_unique; } + #pragma warning restore CS0649 } \ No newline at end of file diff --git a/Aaru.Filesystems/UDF.cs b/Aaru.Filesystems/UDF.cs index 79da61b0c..946b733f6 100644 --- a/Aaru.Filesystems/UDF.cs +++ b/Aaru.Filesystems/UDF.cs @@ -121,15 +121,15 @@ public sealed class UDF : IFilesystem var anchorFound = false; uint ratio = 1; + sector = null; - foreach(ulong[] position in positions.Where(position => position[0] + partition.Start + position[1] <= - partition.End && position[0] < partition.End)) + foreach(ulong[] position in from position in + positions.Where(position => + position[0] + partition.Start + position[1] <= + partition.End && position[0] < partition.End) let errno = + imagePlugin.ReadSectors(position[0], (uint)position[1], out sector) + where errno == ErrorNumber.NoError select position) { - ErrorNumber errno = imagePlugin.ReadSectors(position[0], (uint)position[1], out sector); - - if(errno != ErrorNumber.NoError) - continue; - anchor = Marshal.ByteArrayToStructureLittleEndian(sector); AaruConsole.DebugWriteLine("UDF Plugin", "anchor.tag.tagIdentifier = {0}", anchor.tag.tagIdentifier); diff --git a/Aaru.Filesystems/extFS.cs b/Aaru.Filesystems/extFS.cs index f430334a1..8a75a4085 100644 --- a/Aaru.Filesystems/extFS.cs +++ b/Aaru.Filesystems/extFS.cs @@ -155,6 +155,7 @@ public sealed class extFS : IFilesystem } /// ext superblock + #pragma warning disable CS0649 [SuppressMessage("ReSharper", "InconsistentNaming")] struct SuperBlock { @@ -189,4 +190,5 @@ public sealed class extFS : IFilesystem /// 0x038, 0x137D (little endian) public ushort magic; } + #pragma warning restore CS0649 } \ No newline at end of file diff --git a/Aaru.Filters/XZ.cs b/Aaru.Filters/XZ.cs index cf8c983b8..495ad4d73 100644 --- a/Aaru.Filters/XZ.cs +++ b/Aaru.Filters/XZ.cs @@ -224,7 +224,7 @@ public sealed class XZ : IFilter _dataStream.Seek(0, SeekOrigin.Begin); } - int Decode(byte[] buf, int sizeMax, ref ulong num) + static int Decode(byte[] buf, int sizeMax, ref ulong num) { switch(sizeMax) { diff --git a/Aaru.Gui/ViewModels/Dialogs/AboutViewModel.cs b/Aaru.Gui/ViewModels/Dialogs/AboutViewModel.cs index b7911b2c5..1a3ee14bf 100644 --- a/Aaru.Gui/ViewModels/Dialogs/AboutViewModel.cs +++ b/Aaru.Gui/ViewModels/Dialogs/AboutViewModel.cs @@ -136,7 +136,7 @@ Logo and art: set => this.RaiseAndSetIfChanged(ref _versionText, value); } - void ExecuteWebsiteCommand() + static void ExecuteWebsiteCommand() { var process = new Process { diff --git a/Aaru.Gui/ViewModels/Dialogs/ConsoleViewModel.cs b/Aaru.Gui/ViewModels/Dialogs/ConsoleViewModel.cs index b81aa4bff..503afeffc 100644 --- a/Aaru.Gui/ViewModels/Dialogs/ConsoleViewModel.cs +++ b/Aaru.Gui/ViewModels/Dialogs/ConsoleViewModel.cs @@ -88,7 +88,7 @@ public sealed class ConsoleViewModel : ViewModelBase { var dlgSave = new SaveFileDialog(); - dlgSave.Filters.Add(new FileDialogFilter + dlgSave.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -158,5 +158,5 @@ public sealed class ConsoleViewModel : ViewModelBase } } - void ExecuteClearCommand() => ConsoleHandler.Entries.Clear(); + static void ExecuteClearCommand() => ConsoleHandler.Entries.Clear(); } \ No newline at end of file diff --git a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs index bdcc005dc..f8a9fe77c 100644 --- a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs +++ b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs @@ -123,7 +123,11 @@ public sealed class PluginsViewModel : ViewModelBase Author = writableFloppyImage.Author }); - foreach(IWritableImage writableImage in GetPluginBase.Instance.WritableImages.Values) + foreach(IBaseWritableImage baseWritableImage in GetPluginBase.Instance.WritableImages.Values) + { + if(baseWritableImage is not IWritableImage writableImage) + continue; + WritableImages.Add(new PluginModel { Name = writableImage.Name, @@ -131,6 +135,7 @@ public sealed class PluginsViewModel : ViewModelBase Version = Assembly.GetAssembly(writableImage.GetType())?.GetName().Version?.ToString(), Author = writableImage.Author }); + } } [NotNull] diff --git a/Aaru.Gui/ViewModels/Panels/DeviceInfoViewModel.cs b/Aaru.Gui/ViewModels/Panels/DeviceInfoViewModel.cs index 552ee7d44..464dc1a57 100644 --- a/Aaru.Gui/ViewModels/Panels/DeviceInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Panels/DeviceInfoViewModel.cs @@ -916,7 +916,7 @@ public sealed class DeviceInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Panels/MediaInfoViewModel.cs b/Aaru.Gui/ViewModels/Panels/MediaInfoViewModel.cs index 62057d948..0903bc515 100644 --- a/Aaru.Gui/ViewModels/Panels/MediaInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Panels/MediaInfoViewModel.cs @@ -348,7 +348,7 @@ public sealed class MediaInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/AtaInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/AtaInfoViewModel.cs index cd2743cde..32d978c8e 100644 --- a/Aaru.Gui/ViewModels/Tabs/AtaInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/AtaInfoViewModel.cs @@ -110,7 +110,7 @@ public sealed class AtaInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -138,7 +138,7 @@ public sealed class AtaInfoViewModel : ViewModelBase { var dlgSaveText = new SaveFileDialog(); - dlgSaveText.Filters.Add(new FileDialogFilter + dlgSaveText.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -154,7 +154,7 @@ public sealed class AtaInfoViewModel : ViewModelBase var saveFs = new FileStream(result, FileMode.Create); var saveSw = new StreamWriter(saveFs); - saveSw.Write(AtaIdentifyText); + await saveSw.WriteAsync(AtaIdentifyText); saveFs.Close(); } } \ No newline at end of file diff --git a/Aaru.Gui/ViewModels/Tabs/BlurayInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/BlurayInfoViewModel.cs index c89b5b892..ae9e12e20 100644 --- a/Aaru.Gui/ViewModels/Tabs/BlurayInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/BlurayInfoViewModel.cs @@ -159,7 +159,7 @@ public sealed class BlurayInfoViewModel { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/CompactDiscInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/CompactDiscInfoViewModel.cs index 3eb5f542c..ef2833aac 100644 --- a/Aaru.Gui/ViewModels/Tabs/CompactDiscInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/CompactDiscInfoViewModel.cs @@ -133,7 +133,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -157,7 +157,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -181,7 +181,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -205,7 +205,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -229,7 +229,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -253,7 +253,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -277,7 +277,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/DvdInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/DvdInfoViewModel.cs index eba8b1097..4db481e80 100644 --- a/Aaru.Gui/ViewModels/Tabs/DvdInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/DvdInfoViewModel.cs @@ -122,7 +122,7 @@ public sealed class DvdInfoViewModel { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/DvdWritableInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/DvdWritableInfoViewModel.cs index 503c246f1..545eb44e2 100644 --- a/Aaru.Gui/ViewModels/Tabs/DvdWritableInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/DvdWritableInfoViewModel.cs @@ -237,7 +237,7 @@ public sealed class DvdWritableInfoViewModel { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/PcmciaInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/PcmciaInfoViewModel.cs index 9d816cff9..c7315c55e 100644 --- a/Aaru.Gui/ViewModels/Tabs/PcmciaInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/PcmciaInfoViewModel.cs @@ -172,7 +172,7 @@ public class PcmciaInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/ScsiInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/ScsiInfoViewModel.cs index d4cb0467d..26e978a78 100644 --- a/Aaru.Gui/ViewModels/Tabs/ScsiInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/ScsiInfoViewModel.cs @@ -413,8 +413,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase } // TODO: Automatic error reporting - if(decodedText == null) - decodedText = "Error decoding page, please open an issue."; + decodedText ??= "Error decoding page, please open an issue."; ModeSensePages.Add(new ScsiPageModel { @@ -763,7 +762,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -787,7 +786,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase { var dlgSaveText = new SaveFileDialog(); - dlgSaveText.Filters.Add(new FileDialogFilter + dlgSaveText.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -803,7 +802,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase var saveFs = new FileStream(result, FileMode.Create); var saveSw = new StreamWriter(saveFs); - saveSw.Write(ScsiInquiryText); + await saveSw.WriteAsync(ScsiInquiryText); saveFs.Close(); } @@ -811,7 +810,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -835,7 +834,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -862,7 +861,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { @@ -886,7 +885,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Tabs/XboxInfoViewModel.cs b/Aaru.Gui/ViewModels/Tabs/XboxInfoViewModel.cs index f3a4ae8a8..145de2295 100644 --- a/Aaru.Gui/ViewModels/Tabs/XboxInfoViewModel.cs +++ b/Aaru.Gui/ViewModels/Tabs/XboxInfoViewModel.cs @@ -95,7 +95,7 @@ public sealed class XboxInfoViewModel { var dlgSaveBinary = new SaveFileDialog(); - dlgSaveBinary.Filters.Add(new FileDialogFilter + dlgSaveBinary.Filters?.Add(new FileDialogFilter { Extensions = new List(new[] { diff --git a/Aaru.Gui/ViewModels/Windows/ImageChecksumViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageChecksumViewModel.cs index dceebeddc..bbbe26be4 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageChecksumViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageChecksumViewModel.cs @@ -34,9 +34,9 @@ namespace Aaru.Gui.ViewModels.Windows; using System; using System.Collections.ObjectModel; +using System.Diagnostics.CodeAnalysis; using System.Reactive; using System.Threading; -using System.Threading.Tasks; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; using Aaru.CommonTypes.Structs; @@ -368,6 +368,7 @@ public sealed class ImageChecksumViewModel : ViewModelBase StopCommandEnabled = false; } + [SuppressMessage("ReSharper", "AsyncVoidMethod")] async void DoWork() { var opticalMediaImage = _inputFormat as IOpticalMediaImage; diff --git a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs index 250465a02..73d253b96 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs @@ -35,6 +35,7 @@ namespace Aaru.Gui.ViewModels.Windows; using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Reactive; @@ -54,7 +55,6 @@ using Aaru.Devices; using Aaru.Gui.Models; using Avalonia.Controls; using Avalonia.Threading; -using JetBrains.Annotations; using MessageBox.Avalonia; using MessageBox.Avalonia.Enums; using ReactiveUI; @@ -62,6 +62,7 @@ using Schemas; using ImageInfo = Aaru.CommonTypes.Structs.ImageInfo; using Version = Aaru.CommonTypes.Interop.Version; +[SuppressMessage("ReSharper", "AsyncVoidLambda")] public sealed class ImageConvertViewModel : ViewModelBase { readonly IMediaImage _inputFormat; @@ -127,7 +128,8 @@ public sealed class ImageConvertViewModel : ViewModelBase bool _stopVisible; string _title; - public ImageConvertViewModel([NotNull] IMediaImage inputFormat, string imageSource, Window view) + public ImageConvertViewModel([JetBrains.Annotations.NotNull] IMediaImage inputFormat, string imageSource, + Window view) { _view = view; _inputFormat = inputFormat; @@ -172,8 +174,10 @@ public sealed class ImageConvertViewModel : ViewModelBase PluginBase plugins = GetPluginBase.Instance; - foreach(IWritableImage plugin in - plugins.WritableImages.Values.Where(p => p.SupportedMediaTypes.Contains(inputFormat.Info.MediaType))) + foreach(IWritableImage plugin in plugins.WritableImages.Values. + Where(p => p.SupportedMediaTypes.Contains(inputFormat.Info.MediaType)). + Select(baseWritableImage => baseWritableImage as IWritableImage). + Where(plugin => plugin is not null)) PluginsList.Add(new ImagePluginModel { Plugin = plugin @@ -569,6 +573,7 @@ public sealed class ImageConvertViewModel : ViewModelBase new Thread(DoWork).Start(SelectedPlugin.Plugin); } + [SuppressMessage("ReSharper", "AsyncVoidMethod")] async void DoWork(object plugin) { var warning = false; @@ -1866,7 +1871,7 @@ public sealed class ImageConvertViewModel : ViewModelBase Title = "Choose destination file" }; - dlgDestination.Filters.Add(new FileDialogFilter + dlgDestination.Filters?.Add(new FileDialogFilter { Name = SelectedPlugin.Plugin.Name, Extensions = SelectedPlugin.Plugin.KnownExtensions.ToList() @@ -1932,7 +1937,7 @@ public sealed class ImageConvertViewModel : ViewModelBase Title = "Choose existing metadata sidecar" }; - dlgMetadata.Filters.Add(new FileDialogFilter + dlgMetadata.Filters?.Add(new FileDialogFilter { Name = "CICM XML metadata", Extensions = new List(new[] @@ -1979,7 +1984,7 @@ public sealed class ImageConvertViewModel : ViewModelBase Title = "Choose existing resume file" }; - dlgMetadata.Filters.Add(new FileDialogFilter + dlgMetadata.Filters?.Add(new FileDialogFilter { Name = "CICM XML metadata", Extensions = new List(new[] diff --git a/Aaru.Gui/ViewModels/Windows/ImageEntropyViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageEntropyViewModel.cs index a7e57c1e5..1760f7b93 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageEntropyViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageEntropyViewModel.cs @@ -307,6 +307,7 @@ public sealed class ImageEntropyViewModel : ViewModelBase WholeDiscChecked = false; } + // ReSharper disable once AsyncVoidLambda var thread = new Thread(async () => { if(SeparatedTracksChecked) diff --git a/Aaru.Gui/ViewModels/Windows/ImageSidecarViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageSidecarViewModel.cs index c700ef89e..5153a82b1 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageSidecarViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageSidecarViewModel.cs @@ -330,7 +330,7 @@ public sealed class ImageSidecarViewModel : ViewModelBase Title = "Choose destination file" }; - dlgDestination.Filters.Add(new FileDialogFilter + dlgDestination.Filters?.Add(new FileDialogFilter { Name = "CICM XML metadata", Extensions = new List(new[] diff --git a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs index 16b9b83b2..d11989c20 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs @@ -418,11 +418,11 @@ public sealed class MediaDumpViewModel : ViewModelBase { this.RaiseAndSetIfChanged(ref _useResume, value); - if(value == false) + if(!value) return; if(_outputPrefix != null) - CheckResumeFile(); + CheckResumeFile().GetAwaiter().GetResult(); } } @@ -485,7 +485,7 @@ public sealed class MediaDumpViewModel : ViewModelBase Title = "Choose existing metadata sidecar" }; - dlgMetadata.Filters.Add(new FileDialogFilter + dlgMetadata.Filters?.Add(new FileDialogFilter { Name = "CICM XML metadata", Extensions = new List(new[] @@ -643,7 +643,7 @@ public sealed class MediaDumpViewModel : ViewModelBase Title = "Choose destination file" }; - dlgDestination.Filters.Add(new FileDialogFilter + dlgDestination.Filters?.Add(new FileDialogFilter { Name = SelectedPlugin.Plugin.Name, Extensions = SelectedPlugin.Plugin.KnownExtensions.ToList() diff --git a/Aaru.Gui/ViewModels/Windows/MediaScanViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaScanViewModel.cs index d6387b80f..89ac42136 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaScanViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaScanViewModel.cs @@ -576,6 +576,8 @@ public sealed class MediaScanViewModel : ViewModelBase }); [SuppressMessage("ReSharper", "AsyncVoidMethod")] + + // ReSharper disable once AsyncVoidLambda async void StoppingErrorMessage(string text) => await Dispatcher.UIThread.InvokeAsync(action: async () => { ProgressText = text; @@ -583,7 +585,7 @@ public sealed class MediaScanViewModel : ViewModelBase await MessageBoxManager.GetMessageBoxStandardWindow("Error", $"{text}", ButtonEnum.Ok, Icon.Error). ShowDialog(_view); - WorkFinished(); + await WorkFinished(); }); [SuppressMessage("ReSharper", "AsyncVoidMethod")] diff --git a/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs b/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs index 9c15c771a..58e97d04f 100644 --- a/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/SplashWindowViewModel.cs @@ -33,6 +33,7 @@ namespace Aaru.Gui.ViewModels.Windows; using System; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Text; @@ -184,10 +185,7 @@ public sealed class SplashWindowViewModel : ViewModelBase Task.Run(() => { - var mainDbUpdate = false; - - if(!File.Exists(Settings.MainDbPath)) - mainDbUpdate = true; + bool mainDbUpdate = !File.Exists(Settings.MainDbPath); // TODO: Update database @@ -217,6 +215,7 @@ public sealed class SplashWindowViewModel : ViewModelBase }); } + [SuppressMessage("ReSharper", "AsyncVoidMethod")] async void CheckGdprCompliance() { CurrentProgress++; diff --git a/Aaru.Helpers b/Aaru.Helpers index f44172edb..8b24f6ed0 160000 --- a/Aaru.Helpers +++ b/Aaru.Helpers @@ -1 +1 @@ -Subproject commit f44172edb9be5513611691ccf16f7ff6d7bf9db6 +Subproject commit 8b24f6ed00439d0cae092da443e3dcd5fa77e68c diff --git a/Aaru.Images/AaruFormat/CdEcc.cs b/Aaru.Images/AaruFormat/CdEcc.cs index ba42ac174..c5cb1ff8c 100644 --- a/Aaru.Images/AaruFormat/CdEcc.cs +++ b/Aaru.Images/AaruFormat/CdEcc.cs @@ -213,8 +213,8 @@ public sealed partial class AaruFormat static (byte minute, byte second, byte frame) LbaToMsf(long pos) => ((byte)((pos + 150) / 75 / 60), (byte)((pos + 150) / 75 % 60), (byte)((pos + 150) % 75)); - void ReconstructPrefix(ref byte[] sector, // must point to a full 2352-byte sector - TrackType type, long lba) + static void ReconstructPrefix(ref byte[] sector, // must point to a full 2352-byte sector + TrackType type, long lba) { // // Sync diff --git a/Aaru.Images/AaruFormat/Read.cs b/Aaru.Images/AaruFormat/Read.cs index 31dbca083..6d9c77e42 100644 --- a/Aaru.Images/AaruFormat/Read.cs +++ b/Aaru.Images/AaruFormat/Read.cs @@ -2225,25 +2225,23 @@ public sealed partial class AaruFormat return ErrorNumber.NoError; } - if(_sectorPrefixDdt != null && - _sectorSuffixDdt != null) + if(_sectorPrefixDdt == null || + _sectorSuffixDdt == null) + return ReadSectors(sectorAddress, length, out buffer); + + buffer = new byte[2352 * length]; + + for(uint i = 0; i < length; i++) { - buffer = new byte[2352 * length]; + errno = ReadSectorLong(sectorAddress + i, out byte[] temp); - for(uint i = 0; i < length; i++) - { - errno = ReadSectorLong(sectorAddress + i, out byte[] temp); + if(errno != ErrorNumber.NoError) + return errno; - if(errno != ErrorNumber.NoError) - return errno; - - Array.Copy(temp, 0, buffer, 2352 * i, 2352); - } - - return ErrorNumber.NoError; + Array.Copy(temp, 0, buffer, 2352 * i, 2352); } - return ReadSectors(sectorAddress, length, out buffer); + return ErrorNumber.NoError; // Join prefix (sync, header) with user data case TrackType.CdMode2Formless: @@ -2268,25 +2266,24 @@ public sealed partial class AaruFormat return ErrorNumber.NoError; } - if(_sectorPrefixDdt != null && - _sectorSuffixDdt != null) + if(_sectorPrefixDdt == null || + _sectorSuffixDdt == null) + return ReadSectors(sectorAddress, length, out buffer); + + buffer = new byte[2352 * length]; + + for(uint i = 0; i < length; i++) { - buffer = new byte[2352 * length]; + errno = ReadSectorLong(sectorAddress + i, out byte[] temp); - for(uint i = 0; i < length; i++) - { - errno = ReadSectorLong(sectorAddress + i, out byte[] temp); + if(errno != ErrorNumber.NoError) + return errno; - if(errno != ErrorNumber.NoError) - return errno; - - Array.Copy(temp, 0, buffer, 2352 * i, 2352); - } - - return ErrorNumber.NoError; + Array.Copy(temp, 0, buffer, 2352 * i, 2352); } - return ReadSectors(sectorAddress, length, out buffer); + return ErrorNumber.NoError; + } break; diff --git a/Aaru.Images/BlindWrite4/Read.cs b/Aaru.Images/BlindWrite4/Read.cs index f43d0d8c5..d5cc0c1a7 100644 --- a/Aaru.Images/BlindWrite4/Read.cs +++ b/Aaru.Images/BlindWrite4/Read.cs @@ -857,7 +857,7 @@ public sealed partial class BlindWrite4 public ErrorNumber ReadSectors(ulong sectorAddress, uint length, uint track, out byte[] buffer) { buffer = null; - Track? aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -954,7 +954,7 @@ public sealed partial class BlindWrite4 out byte[] buffer) { buffer = null; - Track? aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -1177,9 +1177,7 @@ public sealed partial class BlindWrite4 if(length + sectorAddress > aaruTrack.EndSector - aaruTrack.StartSector + 1) return ErrorNumber.OutOfRange; - uint sectorOffset; uint sectorSize; - uint sectorSkip; switch(aaruTrack.Type) { @@ -1188,9 +1186,7 @@ public sealed partial class BlindWrite4 case CommonTypes.Enums.TrackType.CdMode2Formless: case CommonTypes.Enums.TrackType.Data: { - sectorOffset = 0; sectorSize = (uint)aaruTrack.RawBytesPerSector; - sectorSkip = 0; break; } @@ -1200,9 +1196,8 @@ public sealed partial class BlindWrite4 _imageStream = aaruTrack.Filter.GetDataForkStream(); var br = new BinaryReader(_imageStream); - br.BaseStream. - Seek((long)aaruTrack.FileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), - SeekOrigin.Begin); + br.BaseStream.Seek((long)aaruTrack.FileOffset + (long)(sectorAddress * sectorSize), + SeekOrigin.Begin); buffer = br.ReadBytes((int)(sectorSize * length)); diff --git a/Aaru.Images/BlindWrite5/Read.cs b/Aaru.Images/BlindWrite5/Read.cs index 6beadcfef..23ec3490d 100644 --- a/Aaru.Images/BlindWrite5/Read.cs +++ b/Aaru.Images/BlindWrite5/Read.cs @@ -1407,7 +1407,7 @@ public sealed partial class BlindWrite5 buffer = null; // TODO: Cross data files - Track? aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -1534,7 +1534,7 @@ public sealed partial class BlindWrite5 buffer = null; // TODO: Cross data files - Track? aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -2043,7 +2043,7 @@ public sealed partial class BlindWrite5 buffer = null; // TODO: Cross data files - Track? aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(bwTrack => bwTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -2112,12 +2112,10 @@ public sealed partial class BlindWrite5 _imageStream = aaruTrack.Filter.GetDataForkStream(); var br = new BinaryReader(_imageStream); - br.BaseStream. - Seek((long)aaruTrack.FileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), - SeekOrigin.Begin); + br.BaseStream.Seek((long)aaruTrack.FileOffset + (long)(sectorAddress * (sectorSize + sectorSkip)), + SeekOrigin.Begin); - if(sectorOffset == 0 && - sectorSkip == 0) + if(sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(var i = 0; i < length; i++) diff --git a/Aaru.Images/ByteAddressable/GameBoy.cs b/Aaru.Images/ByteAddressable/GameBoy.cs index 28a744ad8..0a4199e89 100644 --- a/Aaru.Images/ByteAddressable/GameBoy.cs +++ b/Aaru.Images/ByteAddressable/GameBoy.cs @@ -724,7 +724,7 @@ public class GameBoy : IByteAddressableImage } [SuppressMessage("ReSharper", "StringLiteralTypo")] - string DecodeLicensee(byte headerLicensee, byte[] headerLicenseeNew) + static string DecodeLicensee(byte headerLicensee, byte[] headerLicenseeNew) { if(headerLicensee != 0x33) return headerLicensee switch diff --git a/Aaru.Images/CDRDAO/Identify.cs b/Aaru.Images/CDRDAO/Identify.cs index 91bceea99..04b80cde7 100644 --- a/Aaru.Images/CDRDAO/Identify.cs +++ b/Aaru.Images/CDRDAO/Identify.cs @@ -86,7 +86,7 @@ public sealed partial class Cdrdao string line = _tocStream.ReadLine(); Match dm = dr.Match(line ?? ""); - Match cm = cr.Match(line); + Match cm = cr.Match(line ?? ""); // Skip comments at start of file if(cm.Success) diff --git a/Aaru.Images/CDRDAO/Read.cs b/Aaru.Images/CDRDAO/Read.cs index d8e40529e..6781904dc 100644 --- a/Aaru.Images/CDRDAO/Read.cs +++ b/Aaru.Images/CDRDAO/Read.cs @@ -1373,11 +1373,10 @@ public sealed partial class Cdrdao _imageStream = aaruTrack.Trackfile.Datafilter.GetDataForkStream(); var br = new BinaryReader(_imageStream); - br.BaseStream. - Seek((long)aaruTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), - SeekOrigin.Begin); + br.BaseStream.Seek((long)aaruTrack.Trackfile.Offset + (long)(sectorAddress * (sectorSize + sectorSkip)), + SeekOrigin.Begin); - if(sectorOffset == 0 && + if( sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else diff --git a/Aaru.Images/CDRWin/Identify.cs b/Aaru.Images/CDRWin/Identify.cs index 7a46b9246..ea719b65e 100644 --- a/Aaru.Images/CDRWin/Identify.cs +++ b/Aaru.Images/CDRWin/Identify.cs @@ -93,10 +93,10 @@ public sealed partial class CdrWin // First line must be SESSION, REM, CATALOG, FILE or CDTEXTFILE. Match sm = sr.Match(line ?? ""); - Match rm = rr.Match(line); - Match cm = cr.Match(line); - Match fm = fr.Match(line); - Match tm = tr.Match(line); + Match rm = rr.Match(line ?? ""); + Match cm = cr.Match(line ?? ""); + Match fm = fr.Match(line ?? ""); + Match tm = tr.Match(line ?? ""); return sm.Success || rm.Success || cm.Success || fm.Success || tm.Success; } diff --git a/Aaru.Images/CDRWin/Read.cs b/Aaru.Images/CDRWin/Read.cs index 3aa6eb8b7..b6289c549 100644 --- a/Aaru.Images/CDRWin/Read.cs +++ b/Aaru.Images/CDRWin/Read.cs @@ -282,8 +282,7 @@ public sealed partial class CdrWin AaruConsole.DebugWriteLine("CDRWin plugin", "Found REM METADATA DUMP EXTENT at line {0}", lineNumber); - if(DumpHardware is null) - DumpHardware = new List(); + DumpHardware ??= new List(); DumpHardwareType existingDump = DumpHardware.FirstOrDefault(d => @@ -2253,11 +2252,10 @@ public sealed partial class CdrWin _imageStream = aaruTrack.TrackFile.DataFilter.GetDataForkStream(); var br = new BinaryReader(_imageStream); - br.BaseStream. - Seek((long)aaruTrack.TrackFile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), - SeekOrigin.Begin); + br.BaseStream.Seek((long)aaruTrack.TrackFile.Offset + (long)(sectorAddress * (sectorSize + sectorSkip)), + SeekOrigin.Begin); - if(sectorOffset == 0 && + if( sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else diff --git a/Aaru.Images/CDRWin/Structs.cs b/Aaru.Images/CDRWin/Structs.cs index a41ba912d..0e451994e 100644 --- a/Aaru.Images/CDRWin/Structs.cs +++ b/Aaru.Images/CDRWin/Structs.cs @@ -53,7 +53,7 @@ public sealed partial class CdrWin public string FileType; } - class CdrWinTrack + sealed class CdrWinTrack { /// Track arranger (from CD-Text) public string Arranger; diff --git a/Aaru.Images/DART/Read.cs b/Aaru.Images/DART/Read.cs index 04e745ecd..9515e236a 100644 --- a/Aaru.Images/DART/Read.cs +++ b/Aaru.Images/DART/Read.cs @@ -186,7 +186,6 @@ public sealed partial class Dart var version = new Version(vers); string release = null; - string dev = null; string pre = null; string major = $"{version.MajorVersion}"; @@ -195,13 +194,13 @@ public sealed partial class Dart if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; - dev = version.DevStage switch - { - Version.DevelopmentStage.Alpha => "a", - Version.DevelopmentStage.Beta => "b", - Version.DevelopmentStage.PreAlpha => "d", - _ => dev - }; + string dev = version.DevStage switch + { + Version.DevelopmentStage.Alpha => "a", + Version.DevelopmentStage.Beta => "b", + Version.DevelopmentStage.PreAlpha => "d", + _ => null + }; if(dev == null && version.PreReleaseVersion > 0) diff --git a/Aaru.Images/DiscJuggler/Read.cs b/Aaru.Images/DiscJuggler/Read.cs index fc80b589a..e63d44e46 100644 --- a/Aaru.Images/DiscJuggler/Read.cs +++ b/Aaru.Images/DiscJuggler/Read.cs @@ -868,7 +868,7 @@ public sealed partial class DiscJuggler { buffer = null; - Track? aaruTrack = Tracks.FirstOrDefault(linqTrack => linqTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(linqTrack => linqTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -985,7 +985,7 @@ public sealed partial class DiscJuggler if(tag == SectorTagType.CdTrackFlags) track = (uint)sectorAddress; - Track? aaruTrack = Tracks.FirstOrDefault(linqTrack => linqTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(linqTrack => linqTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; @@ -1256,7 +1256,7 @@ public sealed partial class DiscJuggler if(!_isCd) return ReadSectors(sectorAddress, length, track, out buffer); - Track? aaruTrack = Tracks.FirstOrDefault(linqTrack => linqTrack.Sequence == track); + Track aaruTrack = Tracks.FirstOrDefault(linqTrack => linqTrack.Sequence == track); if(aaruTrack is null) return ErrorNumber.SectorNotFound; diff --git a/Aaru.Images/DiskCopy42/Read.cs b/Aaru.Images/DiskCopy42/Read.cs index a8d082198..9824cdd65 100644 --- a/Aaru.Images/DiskCopy42/Read.cs +++ b/Aaru.Images/DiskCopy42/Read.cs @@ -268,7 +268,6 @@ public sealed partial class DiskCopy42 var version = new Version(vers); string release = null; - string dev = null; string pre = null; string major = $"{version.MajorVersion}"; @@ -277,13 +276,13 @@ public sealed partial class DiskCopy42 if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; - dev = version.DevStage switch - { - Version.DevelopmentStage.Alpha => "a", - Version.DevelopmentStage.Beta => "b", - Version.DevelopmentStage.PreAlpha => "d", - _ => dev - }; + string dev = version.DevStage switch + { + Version.DevelopmentStage.Alpha => "a", + Version.DevelopmentStage.Beta => "b", + Version.DevelopmentStage.PreAlpha => "d", + _ => null + }; if(dev == null && version.PreReleaseVersion > 0) diff --git a/Aaru.Images/DiskCopy42/Write.cs b/Aaru.Images/DiskCopy42/Write.cs index d9bc19168..1b38d8bde 100644 --- a/Aaru.Images/DiskCopy42/Write.cs +++ b/Aaru.Images/DiskCopy42/Write.cs @@ -399,7 +399,7 @@ public sealed partial class DiskCopy42 writingStream.Seek(0, SeekOrigin.Begin); if(header.DiskName.Length > 63) - header.DiskName = header.DiskName.Substring(0, 63); + header.DiskName = header.DiskName[..63]; writingStream.WriteByte((byte)header.DiskName.Length); Encoding macRoman = new MacRoman(); diff --git a/Aaru.Images/HDCopy/Helpers.cs b/Aaru.Images/HDCopy/Helpers.cs index 561673fe2..c09895658 100644 --- a/Aaru.Images/HDCopy/Helpers.cs +++ b/Aaru.Images/HDCopy/Helpers.cs @@ -41,7 +41,7 @@ using Aaru.Helpers; public sealed partial class HdCopy { - bool TryReadHeader(Stream stream, ref FileHeader fhdr, ref long dataStartOffset) + static bool TryReadHeader(Stream stream, ref FileHeader fhdr, ref long dataStartOffset) { var numTracks = 82; diff --git a/Aaru.Images/KryoFlux/Read.cs b/Aaru.Images/KryoFlux/Read.cs index 4fa7e8b08..feec6f229 100644 --- a/Aaru.Images/KryoFlux/Read.cs +++ b/Aaru.Images/KryoFlux/Read.cs @@ -79,8 +79,7 @@ public sealed partial class KryoFlux byte heads = 2; var topHead = false; - string basename = Path.Combine(imageFilter.ParentFolder, - imageFilter.Filename.Substring(0, imageFilter.Filename.Length - 8)); + string basename = Path.Combine(imageFilter.ParentFolder, imageFilter.Filename[..^8]); for(byte t = 0; t < 166; t += step) { diff --git a/Aaru.Images/NDIF/Read.cs b/Aaru.Images/NDIF/Read.cs index c38d52013..e6d9d0ba6 100644 --- a/Aaru.Images/NDIF/Read.cs +++ b/Aaru.Images/NDIF/Read.cs @@ -208,7 +208,6 @@ public sealed partial class Ndif var version = new Version(vers); string release = null; - string dev = null; string pre = null; string major = $"{version.MajorVersion}"; @@ -217,13 +216,13 @@ public sealed partial class Ndif if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; - dev = version.DevStage switch - { - Version.DevelopmentStage.Alpha => "a", - Version.DevelopmentStage.Beta => "b", - Version.DevelopmentStage.PreAlpha => "d", - _ => dev - }; + string dev = version.DevStage switch + { + Version.DevelopmentStage.Alpha => "a", + Version.DevelopmentStage.Beta => "b", + Version.DevelopmentStage.PreAlpha => "d", + _ => null + }; if(dev == null && version.PreReleaseVersion > 0) diff --git a/Aaru.Images/Nero/Read.cs b/Aaru.Images/Nero/Read.cs index 619a8de20..4f37c42fc 100644 --- a/Aaru.Images/Nero/Read.cs +++ b/Aaru.Images/Nero/Read.cs @@ -2145,11 +2145,10 @@ public sealed partial class Nero _imageStream = _neroFilter.GetDataForkStream(); var br = new BinaryReader(_imageStream); - br.BaseStream.Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + br.BaseStream.Seek((long)aaruTrack.Offset + (long)(sectorAddress * (sectorSize + sectorSkip)), SeekOrigin.Begin); - if(sectorOffset == 0 && - sectorSkip == 0) + if(sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(var i = 0; i < length; i++) diff --git a/Aaru.Images/Nero/Structs.cs b/Aaru.Images/Nero/Structs.cs index 31f963d2f..33931b0e9 100644 --- a/Aaru.Images/Nero/Structs.cs +++ b/Aaru.Images/Nero/Structs.cs @@ -76,7 +76,7 @@ public sealed partial class Nero public int LbaStart; } - class CuesheetV2 + sealed class CuesheetV2 { /// "CUEX" public uint ChunkId; @@ -112,7 +112,7 @@ public sealed partial class Nero public byte Frame; } - class CuesheetV1 + sealed class CuesheetV1 { /// "CUES" public uint ChunkId; @@ -416,7 +416,7 @@ public sealed partial class Nero } // Internal use only - class NeroTrack + sealed class NeroTrack { public ulong EndOfTrack; public ulong Index0; diff --git a/Aaru.Images/Partimage/Structs.cs b/Aaru.Images/Partimage/Structs.cs index e31645a38..eba706874 100644 --- a/Aaru.Images/Partimage/Structs.cs +++ b/Aaru.Images/Partimage/Structs.cs @@ -30,6 +30,7 @@ // Copyright © 2011-2022 Natalia Portillo // ****************************************************************************/ +#pragma warning disable CS0649 namespace Aaru.DiscImages; using System.Diagnostics.CodeAnalysis; diff --git a/Aaru.Images/UDIF/Read.cs b/Aaru.Images/UDIF/Read.cs index c2ee49912..9d6f8d8c2 100644 --- a/Aaru.Images/UDIF/Read.cs +++ b/Aaru.Images/UDIF/Read.cs @@ -287,7 +287,6 @@ public sealed partial class Udif var version = new Version(vers); string release = null; - string dev = null; string pre = null; string major = $"{version.MajorVersion}"; @@ -296,13 +295,13 @@ public sealed partial class Udif if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; - dev = version.DevStage switch - { - Version.DevelopmentStage.Alpha => "a", - Version.DevelopmentStage.Beta => "b", - Version.DevelopmentStage.PreAlpha => "d", - _ => dev - }; + string dev = version.DevStage switch + { + Version.DevelopmentStage.Alpha => "a", + Version.DevelopmentStage.Beta => "b", + Version.DevelopmentStage.PreAlpha => "d", + _ => null + }; if(dev == null && version.PreReleaseVersion > 0) diff --git a/Aaru.Images/VDI/Write.cs b/Aaru.Images/VDI/Write.cs index be18eb459..6fdf8f4da 100644 --- a/Aaru.Images/VDI/Write.cs +++ b/Aaru.Images/VDI/Write.cs @@ -259,7 +259,7 @@ public sealed partial class Vdi } if(!string.IsNullOrEmpty(_imageInfo.Comments)) - _vHdr.comments = _imageInfo.Comments.Length > 255 ? _imageInfo.Comments.Substring(0, 255) + _vHdr.comments = _imageInfo.Comments.Length > 255 ? _imageInfo.Comments[..255] : _imageInfo.Comments; if(_vHdr.logicalCylinders == 0) diff --git a/Aaru.Images/VHD/Read.cs b/Aaru.Images/VHD/Read.cs index 7576dd71d..2b7ad6e94 100644 --- a/Aaru.Images/VHD/Read.cs +++ b/Aaru.Images/VHD/Read.cs @@ -472,7 +472,7 @@ public sealed partial class Vhd ReadOnlySpan span = bat; - _blockAllocationTable = MemoryMarshal.Cast(span).Slice(0, (int)_thisDynamic.MaxTableEntries). + _blockAllocationTable = MemoryMarshal.Cast(span)[..(int)_thisDynamic.MaxTableEntries]. ToArray(); for(var i = 0; i < _blockAllocationTable.Length; i++) diff --git a/Aaru.Images/ZZZRawImage/Read.cs b/Aaru.Images/ZZZRawImage/Read.cs index 2971a2987..badf638b6 100644 --- a/Aaru.Images/ZZZRawImage/Read.cs +++ b/Aaru.Images/ZZZRawImage/Read.cs @@ -377,7 +377,7 @@ public sealed partial class ZZZRawImage // Search for known tags string basename = imageFilter.BasePath; - basename = basename[..^_extension.Length]; + basename = basename[..^(_extension?.Length ?? basename.Length)]; _mediaTags = new Dictionary(); diff --git a/Aaru.Partitions/AppleMap.cs b/Aaru.Partitions/AppleMap.cs index fadfa935f..6effdbff3 100644 --- a/Aaru.Partitions/AppleMap.cs +++ b/Aaru.Partitions/AppleMap.cs @@ -70,9 +70,7 @@ public sealed class AppleMap : IPartition /// public bool GetInformation(IMediaImage imagePlugin, out List partitions, ulong sectorOffset) { - uint sectorSize; - - sectorSize = imagePlugin.Info.SectorSize is 2352 or 2448 ? 2048 : imagePlugin.Info.SectorSize; + uint sectorSize = imagePlugin.Info.SectorSize is 2352 or 2448 ? 2048 : imagePlugin.Info.SectorSize; partitions = new List(); diff --git a/Aaru.Partitions/MBR.cs b/Aaru.Partitions/MBR.cs index ba6296e64..b68a2108d 100644 --- a/Aaru.Partitions/MBR.cs +++ b/Aaru.Partitions/MBR.cs @@ -315,8 +315,7 @@ public sealed class MBR : IPartition if(signature == GPT_MAGIC) return false; - if(signature != GPT_MAGIC && - imagePlugin.Info.XmlMediaType == XmlMediaType.OpticalDisc) + if(imagePlugin.Info.XmlMediaType == XmlMediaType.OpticalDisc) { errno = imagePlugin.ReadSector(sectorOffset, out hdrBytes); diff --git a/Aaru.Partitions/NeXT.cs b/Aaru.Partitions/NeXT.cs index 403fd4c16..706153a97 100644 --- a/Aaru.Partitions/NeXT.cs +++ b/Aaru.Partitions/NeXT.cs @@ -76,9 +76,7 @@ public sealed class NeXTDisklabel : IPartition var magicFound = false; byte[] labelSector; - uint sectorSize; - - sectorSize = imagePlugin.Info.SectorSize is 2352 or 2448 ? 2048 : imagePlugin.Info.SectorSize; + uint sectorSize = imagePlugin.Info.SectorSize is 2352 or 2448 ? 2048 : imagePlugin.Info.SectorSize; partitions = new List(); diff --git a/Aaru.Partitions/Xbox.cs b/Aaru.Partitions/Xbox.cs index 357bbc834..387c0e8ed 100644 --- a/Aaru.Partitions/Xbox.cs +++ b/Aaru.Partitions/Xbox.cs @@ -264,8 +264,6 @@ public sealed class Xbox : IPartition return true; } - - return false; } [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/Aaru.Settings/Settings.cs b/Aaru.Settings/Settings.cs index e12bfacc4..a6eed8b28 100644 --- a/Aaru.Settings/Settings.cs +++ b/Aaru.Settings/Settings.cs @@ -35,6 +35,7 @@ namespace Aaru.Settings; using System; using System.IO; +using System.Runtime.InteropServices; using System.Xml.Serialization; using Aaru.CommonTypes.Interop; using Claunia.PropertyList; @@ -357,11 +358,11 @@ public static class Settings #if !NETSTANDARD2_0 // In case of Windows settings will be saved in the registry: HKLM/SOFTWARE/Claunia.com/Aaru - case PlatformID.Win32NT: - case PlatformID.Win32S: - case PlatformID.Win32Windows: - case PlatformID.WinCE: - case PlatformID.WindowsPhone: + case PlatformID.Win32NT when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.Win32S when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.Win32Windows when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.WinCE when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.WindowsPhone when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): { RegistryKey parentKey = Registry.CurrentUser.OpenSubKey("SOFTWARE")?.OpenSubKey("Claunia.com"); @@ -579,11 +580,11 @@ public static class Settings #if !NETSTANDARD2_0 // In case of Windows settings will be saved in the registry: HKLM/SOFTWARE/Claunia.com/Aaru - case PlatformID.Win32NT: - case PlatformID.Win32S: - case PlatformID.Win32Windows: - case PlatformID.WinCE: - case PlatformID.WindowsPhone: + case PlatformID.Win32NT when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.Win32S when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.Win32Windows when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.WinCE when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): + case PlatformID.WindowsPhone when RuntimeInformation.IsOSPlatform(OSPlatform.Windows): { RegistryKey parentKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true)?. CreateSubKey("Claunia.com"); diff --git a/Aaru.Tests.Devices/SCSI/HP.cs b/Aaru.Tests.Devices/SCSI/HP.cs index 4019a2fcb..0b36fcb94 100644 --- a/Aaru.Tests.Devices/SCSI/HP.cs +++ b/Aaru.Tests.Devices/SCSI/HP.cs @@ -153,7 +153,7 @@ static class Hp if(!uint.TryParse(strDev, out address)) { - AaruConsole.WriteLine("Not a numbr. Press any key to continue..."); + AaruConsole.WriteLine("Not a number. Press any key to continue..."); address = 0; Console.ReadKey(); @@ -191,7 +191,7 @@ static class Hp if(!ushort.TryParse(strDev, out bps)) { - AaruConsole.WriteLine("Not a numbr. Press any key to continue..."); + AaruConsole.WriteLine("Not a number. Press any key to continue..."); bps = 512; Console.ReadKey(); } diff --git a/Aaru.Tests/Filesystems/FilesystemTest.cs b/Aaru.Tests/Filesystems/FilesystemTest.cs index d5ffd4320..c02c6a6f0 100644 --- a/Aaru.Tests/Filesystems/FilesystemTest.cs +++ b/Aaru.Tests/Filesystems/FilesystemTest.cs @@ -13,9 +13,9 @@ public abstract class FilesystemTest { readonly string _fileSystemType; - public FilesystemTest() => _fileSystemType = null; + protected FilesystemTest() => _fileSystemType = null; - public FilesystemTest(string fileSystemType) => _fileSystemType = fileSystemType; + protected FilesystemTest(string fileSystemType) => _fileSystemType = fileSystemType; public abstract string DataFolder { get; } public abstract IFilesystem Plugin { get; } diff --git a/Aaru.Tests/Filesystems/ReadOnlyFilesystemTest.cs b/Aaru.Tests/Filesystems/ReadOnlyFilesystemTest.cs index a10e52aa3..047f857b2 100644 --- a/Aaru.Tests/Filesystems/ReadOnlyFilesystemTest.cs +++ b/Aaru.Tests/Filesystems/ReadOnlyFilesystemTest.cs @@ -18,9 +18,9 @@ using FileAttributes = Aaru.CommonTypes.Structs.FileAttributes; public abstract class ReadOnlyFilesystemTest : FilesystemTest { - public ReadOnlyFilesystemTest() {} + protected ReadOnlyFilesystemTest() {} - public ReadOnlyFilesystemTest(string fileSystemType) : base(fileSystemType) {} + protected ReadOnlyFilesystemTest(string fileSystemType) : base(fileSystemType) {} [Test] public void Contents() diff --git a/Aaru.Tests/Structs.cs b/Aaru.Tests/Structs.cs index 49080638e..b3e0f43a8 100644 --- a/Aaru.Tests/Structs.cs +++ b/Aaru.Tests/Structs.cs @@ -72,8 +72,8 @@ public class OpticalImageTestExpected : BlockImageTestExpected public class TapeImageTestExpected : BlockImageTestExpected { - public TapeFile[] Files; - public TapePartition[] Partitions; + public TapeFile[] Files; + public new TapePartition[] Partitions; } public class PartitionTest diff --git a/Aaru.sln.DotSettings b/Aaru.sln.DotSettings index 762b94d06..41046a749 100644 --- a/Aaru.sln.DotSettings +++ b/Aaru.sln.DotSettings @@ -652,6 +652,7 @@ True True True + True True True True @@ -663,6 +664,7 @@ True True True + True True True True @@ -675,6 +677,7 @@ True True True + True True True True @@ -691,6 +694,7 @@ True True True + True True True True @@ -721,6 +725,10 @@ True True True + True + True + True + True True True True @@ -738,8 +746,11 @@ True True True + True + True True True + True True True True @@ -759,6 +770,7 @@ True True True + True True True True @@ -781,6 +793,7 @@ True True True + True True True True @@ -839,13 +852,17 @@ True True True + True True True True True + True True + True True True + True True True True @@ -903,6 +920,7 @@ True True True + True True True True @@ -915,6 +933,7 @@ True True True + True True True @@ -961,6 +980,7 @@ True True True + True True True True @@ -985,6 +1005,8 @@ True True True + True + True True True True @@ -1087,6 +1109,7 @@ True True True + True True True True @@ -1161,6 +1184,7 @@ True True True + True True True True @@ -1179,9 +1203,11 @@ True True True + True True True True + True True True True @@ -1190,12 +1216,14 @@ True True True + True True True True True True True + True True True True @@ -1212,6 +1240,7 @@ True True True + True True True True @@ -1304,6 +1333,7 @@ True True True + True True True True @@ -1348,12 +1378,14 @@ True True True + True True True True True True True + True True True True diff --git a/Aaru/Commands/Device/DeviceReport.cs b/Aaru/Commands/Device/DeviceReport.cs index a403fb262..93b60a246 100644 --- a/Aaru/Commands/Device/DeviceReport.cs +++ b/Aaru/Commands/Device/DeviceReport.cs @@ -464,102 +464,94 @@ sealed class DeviceReportCommand : Command Features.Separate(report.SCSI.MultiMediaDevice.Features.BinaryData); if(ftr.Descriptors != null) - foreach(Features.FeatureDescriptor desc in ftr.Descriptors) - { - if(desc.Code != 0x0000) - continue; + foreach(Profile prof in from desc in ftr.Descriptors where desc.Code == 0x0000 + select Features.Decode_0000(desc.Data) into ftr0000 + where ftr0000 != null from prof in ftr0000.Value.Profiles + select prof) + switch(prof.Number) + { + case ProfileNumber.CDROM: + case ProfileNumber.CDR: + case ProfileNumber.CDRW: + mediaTypes.Add("CD-ROM"); + mediaTypes.Add("Audio CD"); + mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); + mediaTypes.Add("CD-R"); + mediaTypes.Add("CD-RW Ultra Speed (marked 16x or higher)"); + mediaTypes.Add("CD-RW High Speed (marked between 8x and 12x)"); + mediaTypes.Add("CD-RW (marked 4x or lower)"); - Feature_0000? ftr0000 = Features.Decode_0000(desc.Data); + break; + case ProfileNumber.DVDRWRes: + case ProfileNumber.DVDRWSeq: + case ProfileNumber.DVDRDLSeq: + case ProfileNumber.DVDRDLJump: + case ProfileNumber.DVDRWDL: + case ProfileNumber.DVDDownload: + case ProfileNumber.DVDRWPlus: + case ProfileNumber.DVDRPlus: + case ProfileNumber.DVDRSeq: + case ProfileNumber.DVDRWDLPlus: + case ProfileNumber.DVDRDLPlus: - if(ftr0000 == null) - continue; + case ProfileNumber.DVDROM: + mediaTypes.Add("DVD-ROM"); + mediaTypes.Add("DVD-R"); + mediaTypes.Add("DVD-RW"); + mediaTypes.Add("DVD+R"); + mediaTypes.Add("DVD+RW"); + mediaTypes.Add("DVD-R DL"); + mediaTypes.Add("DVD+R DL"); + mediaTypes.Add("Nintendo GameCube game"); + mediaTypes.Add("Nintendo Wii game"); - foreach(Profile prof in ftr0000.Value.Profiles) - switch(prof.Number) - { - case ProfileNumber.CDROM: - case ProfileNumber.CDR: - case ProfileNumber.CDRW: - mediaTypes.Add("CD-ROM"); - mediaTypes.Add("Audio CD"); - mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); - mediaTypes.Add("CD-R"); - mediaTypes.Add("CD-RW Ultra Speed (marked 16x or higher)"); - mediaTypes.Add("CD-RW High Speed (marked between 8x and 12x)"); - mediaTypes.Add("CD-RW (marked 4x or lower)"); + break; + case ProfileNumber.DVDRAM: + mediaTypes.Add("DVD-RAM (1st gen, marked 2.6Gb or 5.2Gb)"); + mediaTypes.Add("DVD-RAM (2nd gen, marked 4.7Gb or 9.4Gb)"); - break; - case ProfileNumber.DVDRWRes: - case ProfileNumber.DVDRWSeq: - case ProfileNumber.DVDRDLSeq: - case ProfileNumber.DVDRDLJump: - case ProfileNumber.DVDRWDL: - case ProfileNumber.DVDDownload: - case ProfileNumber.DVDRWPlus: - case ProfileNumber.DVDRPlus: - case ProfileNumber.DVDRSeq: - case ProfileNumber.DVDRWDLPlus: - case ProfileNumber.DVDRDLPlus: + break; + case ProfileNumber.DDCDROM: + case ProfileNumber.DDCDR: + case ProfileNumber.DDCDRW: + mediaTypes.Add("DDCD-ROM"); + mediaTypes.Add("DDCD-R"); + mediaTypes.Add("DDCD-RW"); - case ProfileNumber.DVDROM: - mediaTypes.Add("DVD-ROM"); - mediaTypes.Add("DVD-R"); - mediaTypes.Add("DVD-RW"); - mediaTypes.Add("DVD+R"); - mediaTypes.Add("DVD+RW"); - mediaTypes.Add("DVD-R DL"); - mediaTypes.Add("DVD+R DL"); - mediaTypes.Add("Nintendo GameCube game"); - mediaTypes.Add("Nintendo Wii game"); + break; + case ProfileNumber.BDROM: + case ProfileNumber.BDRSeq: + case ProfileNumber.BDRRdm: + case ProfileNumber.BDRE: + mediaTypes.Add("BD-ROM"); + mediaTypes.Add("BD-R HTL (not LTH)"); + mediaTypes.Add("BD-RE"); + mediaTypes.Add("BD-R LTH"); + mediaTypes.Add("BD-R Triple Layer (100Gb)"); + mediaTypes.Add("BD-R Quad Layer (128Gb)"); + mediaTypes.Add("Ultra HD Blu-ray movie"); + mediaTypes.Add("PlayStation 3 game"); + mediaTypes.Add("PlayStation 4 game"); + mediaTypes.Add("PlayStation 5 game"); + mediaTypes.Add("Xbox One game"); + mediaTypes.Add("Nintendo Wii U game"); - break; - case ProfileNumber.DVDRAM: - mediaTypes.Add("DVD-RAM (1st gen, marked 2.6Gb or 5.2Gb)"); - mediaTypes.Add("DVD-RAM (2nd gen, marked 4.7Gb or 9.4Gb)"); + break; + case ProfileNumber.HDDVDROM: + case ProfileNumber.HDDVDR: + case ProfileNumber.HDDVDRW: + case ProfileNumber.HDDVDRDL: + case ProfileNumber.HDDVDRWDL: + mediaTypes.Add("HD DVD-ROM"); + mediaTypes.Add("HD DVD-R"); + mediaTypes.Add("HD DVD-RW"); - break; - case ProfileNumber.DDCDROM: - case ProfileNumber.DDCDR: - case ProfileNumber.DDCDRW: - mediaTypes.Add("DDCD-ROM"); - mediaTypes.Add("DDCD-R"); - mediaTypes.Add("DDCD-RW"); + break; + case ProfileNumber.HDDVDRAM: + mediaTypes.Add("HD DVD-RAM"); - break; - case ProfileNumber.BDROM: - case ProfileNumber.BDRSeq: - case ProfileNumber.BDRRdm: - case ProfileNumber.BDRE: - mediaTypes.Add("BD-ROM"); - mediaTypes.Add("BD-R HTL (not LTH)"); - mediaTypes.Add("BD-RE"); - mediaTypes.Add("BD-R LTH"); - mediaTypes.Add("BD-R Triple Layer (100Gb)"); - mediaTypes.Add("BD-R Quad Layer (128Gb)"); - mediaTypes.Add("Ultra HD Blu-ray movie"); - mediaTypes.Add("PlayStation 3 game"); - mediaTypes.Add("PlayStation 4 game"); - mediaTypes.Add("PlayStation 5 game"); - mediaTypes.Add("Xbox One game"); - mediaTypes.Add("Nintendo Wii U game"); - - break; - case ProfileNumber.HDDVDROM: - case ProfileNumber.HDDVDR: - case ProfileNumber.HDDVDRW: - case ProfileNumber.HDDVDRDL: - case ProfileNumber.HDDVDRWDL: - mediaTypes.Add("HD DVD-ROM"); - mediaTypes.Add("HD DVD-R"); - mediaTypes.Add("HD DVD-RW"); - - break; - case ProfileNumber.HDDVDRAM: - mediaTypes.Add("HD DVD-RAM"); - - break; - } - } + break; + } } if(cdromMode != null && diff --git a/Aaru/Commands/Filesystem/ExtractFiles.cs b/Aaru/Commands/Filesystem/ExtractFiles.cs index 7f18de717..cbb322185 100644 --- a/Aaru/Commands/Filesystem/ExtractFiles.cs +++ b/Aaru/Commands/Filesystem/ExtractFiles.cs @@ -397,7 +397,7 @@ sealed class ExtractFilesCommand : Command bool doXattrs) { if(path.StartsWith('/')) - path = path.Substring(1); + path = path[1..]; ErrorNumber error = fs.ReadDir(path, out List directory); diff --git a/Aaru/Commands/Image/Compare.cs b/Aaru/Commands/Image/Compare.cs index c8694398c..e15a0e996 100644 --- a/Aaru/Commands/Image/Compare.cs +++ b/Aaru/Commands/Image/Compare.cs @@ -36,6 +36,7 @@ using System; using System.Collections.Generic; using System.CommandLine; using System.CommandLine.NamingConventionBinder; +using System.Globalization; using System.Linq; using System.Text; using Aaru.CommonTypes; @@ -275,10 +276,11 @@ sealed class CompareCommand : Command table.AddRow("Sector size", image1Info.SectorSize.ToString(), image2Info.SectorSize.ToString()); - table.AddRow("Creation time", image1Info.CreationTime.ToString(), image2Info.CreationTime.ToString()); + table.AddRow("Creation time", image1Info.CreationTime.ToString(CultureInfo.CurrentCulture), + image2Info.CreationTime.ToString(CultureInfo.CurrentCulture)); - table.AddRow("Last modification time", image1Info.LastModificationTime.ToString(), - image2Info.LastModificationTime.ToString()); + table.AddRow("Last modification time", image1Info.LastModificationTime.ToString(CultureInfo.CurrentCulture), + image2Info.LastModificationTime.ToString(CultureInfo.CurrentCulture)); table.AddRow("Disk type", image1Info.MediaType.ToString(), image2Info.MediaType.ToString()); diff --git a/Aaru/Commands/Image/Convert.cs b/Aaru/Commands/Image/Convert.cs index 6bbabe50a..3b010b8ec 100644 --- a/Aaru/Commands/Image/Convert.cs +++ b/Aaru/Commands/Image/Convert.cs @@ -630,7 +630,7 @@ sealed class ConvertImageCommand : Command foreach(MediaTagType mediaTag in inputFormat.Info.ReadableMediaTags.Where(mediaTag => !force || outputFormat.SupportedMediaTags.Contains(mediaTag))) { - ErrorNumber ErrorNumber = ErrorNumber.NoError; + ErrorNumber errorNumber = ErrorNumber.NoError; AnsiConsole.Progress().AutoClear(false).HideCompleted(false). Columns(new TaskDescriptionColumn(), new SpinnerColumn()).Start(ctx => @@ -646,7 +646,7 @@ sealed class ConvertImageCommand : Command { AaruConsole.ErrorWriteLine("Error {0} writing media tag, not continuing...", errno); - ErrorNumber = errno; + errorNumber = errno; } return; @@ -663,12 +663,12 @@ sealed class ConvertImageCommand : Command AaruConsole.ErrorWriteLine("Error {0} writing media tag, not continuing...", outputFormat.ErrorMessage); - ErrorNumber = ErrorNumber.WriteError; + errorNumber = ErrorNumber.WriteError; } }); - if(ErrorNumber != ErrorNumber.NoError) - return (int)ErrorNumber; + if(errorNumber != ErrorNumber.NoError) + return (int)errorNumber; } AaruConsole.WriteLine("{0} sectors to convert", inputFormat.Info.Sectors); diff --git a/Aaru/Commands/Image/Decode.cs b/Aaru/Commands/Image/Decode.cs index e46dfda31..43235dbee 100644 --- a/Aaru/Commands/Image/Decode.cs +++ b/Aaru/Commands/Image/Decode.cs @@ -362,7 +362,8 @@ sealed class DecodeCommand : Command { errno = inputFormat.ReadMediaTag(MediaTagType.CD_TOC, out byte[] toc); - if(toc == null) + if(toc == null || + errno != ErrorNumber.NoError) AaruConsole.WriteLine("Error reading CD TOC from disc image"); else { diff --git a/Aaru/Commands/Image/Print.cs b/Aaru/Commands/Image/Print.cs index f9a0a1de7..9482cbd75 100644 --- a/Aaru/Commands/Image/Print.cs +++ b/Aaru/Commands/Image/Print.cs @@ -207,7 +207,7 @@ sealed class PrintHexCommand : Command AaruConsole.WriteLine("[bold][italic]Sector {0}[/][/]", start + i); - if(blockImage?.Info.ReadableSectorTags == null) + if(blockImage.Info.ReadableSectorTags == null) { AaruConsole. WriteLine("Requested sectors with tags, unsupported by underlying image format, printing only user data.");