diff --git a/Aaru.Core/Devices/Dumping/ATA.cs b/Aaru.Core/Devices/Dumping/ATA.cs index 91924424b..62dbb83f3 100644 --- a/Aaru.Core/Devices/Dumping/ATA.cs +++ b/Aaru.Core/Devices/Dumping/ATA.cs @@ -637,10 +637,11 @@ namespace Aaru.Core.Devices.Dumping var filters = new FiltersList(); IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) + if(opened != ErrorNumber.NoError) { - StoppingErrorMessage?.Invoke("Could not open created image."); + StoppingErrorMessage?.Invoke($"Error {opened} opening created image."); return; } @@ -769,7 +770,7 @@ namespace Aaru.Core.Devices.Dumping _dumpLog.WriteLine("Average checksum speed {0:F3} KiB/sec.", blockSize * (double)(blocks + 1) / 1024 / (totalChkDuration / 1000)); - List<(ulong start, string type)> filesystems = new List<(ulong start, string type)>(); + List<(ulong start, string type)> filesystems = new(); if(sidecar.BlockMedia[0].FileSystemInformation != null) filesystems.AddRange(from partition in sidecar.BlockMedia[0].FileSystemInformation diff --git a/Aaru.Core/Devices/Dumping/Metadata.cs b/Aaru.Core/Devices/Dumping/Metadata.cs index 555b0dee5..e68e12ef2 100644 --- a/Aaru.Core/Devices/Dumping/Metadata.cs +++ b/Aaru.Core/Devices/Dumping/Metadata.cs @@ -64,10 +64,11 @@ namespace Aaru.Core.Devices.Dumping IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); totalChkDuration = 0; + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) + if(opened != ErrorNumber.NoError) { - StoppingErrorMessage?.Invoke("Could not open created image."); + StoppingErrorMessage?.Invoke($"Error {opened} opening created image."); return; } @@ -101,7 +102,7 @@ namespace Aaru.Core.Devices.Dumping sidecar = _preSidecar; } - List<(ulong start, string type)> filesystems = new List<(ulong start, string type)>(); + List<(ulong start, string type)> filesystems = new(); if(sidecar.OpticalDisc[0].Track != null) filesystems.AddRange(from xmlTrack in sidecar.OpticalDisc[0].Track diff --git a/Aaru.Core/Devices/Dumping/MiniDisc.cs b/Aaru.Core/Devices/Dumping/MiniDisc.cs index da110d700..5c2f363f4 100644 --- a/Aaru.Core/Devices/Dumping/MiniDisc.cs +++ b/Aaru.Core/Devices/Dumping/MiniDisc.cs @@ -69,7 +69,7 @@ namespace Aaru.Core.Devices.Dumping double minSpeed = double.MaxValue; byte[] readBuffer; Modes.DecodedMode? decMode = null; - Dictionary mediaTags = new Dictionary(); + Dictionary mediaTags = new(); byte[] cmdBuf; bool ret; @@ -694,10 +694,11 @@ namespace Aaru.Core.Devices.Dumping var filters = new FiltersList(); IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) + if(opened != ErrorNumber.NoError) { - StoppingErrorMessage?.Invoke("Could not open created image."); + StoppingErrorMessage?.Invoke($"Error {opened} opening created image."); return; } @@ -733,7 +734,7 @@ namespace Aaru.Core.Devices.Dumping sidecar = _preSidecar; } - List<(ulong start, string type)> filesystems = new List<(ulong start, string type)>(); + List<(ulong start, string type)> filesystems = new(); if(sidecar.BlockMedia[0].FileSystemInformation != null) filesystems.AddRange(from partition in sidecar.BlockMedia[0].FileSystemInformation diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs index b77a54051..69877a019 100644 --- a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs +++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs @@ -38,6 +38,7 @@ using System.IO; using System.Linq; using System.Xml.Serialization; using Aaru.CommonTypes; +using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Extents; using Aaru.CommonTypes.Interfaces; using Aaru.CommonTypes.Metadata; @@ -561,10 +562,11 @@ namespace Aaru.Core.Devices.Dumping var filters = new FiltersList(); IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) + if(opened != ErrorNumber.NoError) { - StoppingErrorMessage?.Invoke("Could not open created image."); + StoppingErrorMessage?.Invoke($"Error {opened} opening created image."); return; } @@ -600,7 +602,7 @@ namespace Aaru.Core.Devices.Dumping sidecar = _preSidecar; } - List<(ulong start, string type)> filesystems = new List<(ulong start, string type)>(); + List<(ulong start, string type)> filesystems = new(); if(sidecar.BlockMedia[0].FileSystemInformation != null) filesystems.AddRange(from partition in sidecar.BlockMedia[0].FileSystemInformation diff --git a/Aaru.Core/Devices/Dumping/SSC.cs b/Aaru.Core/Devices/Dumping/SSC.cs index 0dd4a02ab..e24a8491f 100644 --- a/Aaru.Core/Devices/Dumping/SSC.cs +++ b/Aaru.Core/Devices/Dumping/SSC.cs @@ -1315,10 +1315,11 @@ namespace Aaru.Core.Devices.Dumping var filters = new FiltersList(); IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) + if(opened != ErrorNumber.NoError) { - StoppingErrorMessage?.Invoke("Could not open created image."); + StoppingErrorMessage?.Invoke($"Error {opened} opening created image."); return; } @@ -1354,7 +1355,7 @@ namespace Aaru.Core.Devices.Dumping sidecar = _preSidecar; } - List<(ulong start, string type)> filesystems = new List<(ulong start, string type)>(); + List<(ulong start, string type)> filesystems = new(); if(sidecar.BlockMedia[0].FileSystemInformation != null) filesystems.AddRange(from partition in sidecar.BlockMedia[0].FileSystemInformation diff --git a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs index 21e06edb9..7f433bc2e 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs @@ -445,7 +445,7 @@ namespace Aaru.Core.Devices.Dumping UpdateStatus?.Invoke("Building track map..."); _dumpLog.WriteLine("Building track map..."); - List tracks = new List(); + List tracks = new(); for(ushort tno = discInformation.Value.FirstTrackNumber; tno <= discInformation?.LastTrackLastSession; tno++) @@ -476,14 +476,14 @@ namespace Aaru.Core.Devices.Dumping var track = new Track { - Sequence = trkInfo.LogicalTrackNumber, - Session = (ushort)(canStoreNotCdSessions ? trkInfo.SessionNumber : 1), - Type = TrackType.Data, - StartSector = trkInfo.LogicalTrackStartAddress, - EndSector = trkInfo.LogicalTrackSize + trkInfo.LogicalTrackStartAddress - 1, + Sequence = trkInfo.LogicalTrackNumber, + Session = (ushort)(canStoreNotCdSessions ? trkInfo.SessionNumber : 1), + Type = TrackType.Data, + StartSector = trkInfo.LogicalTrackStartAddress, + EndSector = trkInfo.LogicalTrackSize + trkInfo.LogicalTrackStartAddress - 1, RawBytesPerSector = (int)blockSize, - BytesPerSector = (int)blockSize, - SubchannelType = TrackSubchannelType.None + BytesPerSector = (int)blockSize, + SubchannelType = TrackSubchannelType.None }; if(track.EndSector >= blocks) @@ -547,7 +547,7 @@ namespace Aaru.Core.Devices.Dumping else opticalPlugin.SetTracks(new List { - new Track + new() { BytesPerSector = (int)blockSize, EndSector = blocks - 1, @@ -570,7 +570,7 @@ namespace Aaru.Core.Devices.Dumping opticalPlugin.SetTracks(new List { - new Track + new() { BytesPerSector = (int)blockSize, EndSector = blocks - 1, @@ -988,10 +988,11 @@ namespace Aaru.Core.Devices.Dumping var filters = new FiltersList(); IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) + if(opened != ErrorNumber.NoError) { - StoppingErrorMessage?.Invoke("Could not open created image."); + StoppingErrorMessage?.Invoke(string.Format("Error {0} opening created image.", opened)); return; } @@ -1162,7 +1163,7 @@ namespace Aaru.Core.Devices.Dumping } } - List<(ulong start, string type)> filesystems = new List<(ulong start, string type)>(); + List<(ulong start, string type)> filesystems = new(); if(sidecar.BlockMedia[0].FileSystemInformation != null) filesystems.AddRange(from partition in sidecar.BlockMedia[0].FileSystemInformation diff --git a/Aaru.Core/Devices/Dumping/SecureDigital.cs b/Aaru.Core/Devices/Dumping/SecureDigital.cs index a6e3559a5..78a186136 100644 --- a/Aaru.Core/Devices/Dumping/SecureDigital.cs +++ b/Aaru.Core/Devices/Dumping/SecureDigital.cs @@ -89,7 +89,7 @@ namespace Aaru.Core.Devices.Dumping uint[] response; bool supportsCmd23 = false; - Dictionary mediaTags = new Dictionary(); + Dictionary mediaTags = new(); switch(_dev.Type) { @@ -783,9 +783,10 @@ namespace Aaru.Core.Devices.Dumping var filters = new FiltersList(); IFilter filter = filters.GetFilter(_outputPath); IMediaImage inputPlugin = ImageFormat.Detect(filter); + ErrorNumber opened = inputPlugin.Open(filter); - if(!inputPlugin.Open(filter)) - StoppingErrorMessage?.Invoke("Could not open created image."); + if(opened != ErrorNumber.NoError) + StoppingErrorMessage?.Invoke($"Error {opened} opening created image."); DateTime chkStart = DateTime.UtcNow; _sidecarClass = new Sidecar(inputPlugin, _outputPath, filter.Id, _encoding); diff --git a/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs b/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs index f38e50791..c702a7094 100644 --- a/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MainWindowViewModel.cs @@ -537,9 +537,11 @@ namespace Aaru.Gui.ViewModels.Windows try { - if(!imageFormat.Open(inputFilter)) + ErrorNumber opened = imageFormat.Open(inputFilter); + + if(opened != ErrorNumber.NoError) { - MessageBoxManager.GetMessageBoxStandardWindow("Error", "Unable to open image format.", + MessageBoxManager.GetMessageBoxStandardWindow("Error", $"Error {opened} opening image format.", ButtonEnum.Ok, Icon.Error); AaruConsole.ErrorWriteLine("Unable to open image format"); diff --git a/Aaru.Images/AaruFormat/Read.cs b/Aaru.Images/AaruFormat/Read.cs index 273baaff8..8a4f27eee 100644 --- a/Aaru.Images/AaruFormat/Read.cs +++ b/Aaru.Images/AaruFormat/Read.cs @@ -60,7 +60,7 @@ namespace Aaru.DiscImages public sealed partial class AaruFormat { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { AaruConsole.DebugWriteLine("Aaru Format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false)); @@ -68,15 +68,18 @@ namespace Aaru.DiscImages _imageStream.Seek(0, SeekOrigin.Begin); if(_imageStream.Length < Marshal.SizeOf()) - return false; + return ErrorNumber.InvalidArgument; _structureBytes = new byte[Marshal.SizeOf()]; _imageStream.Read(_structureBytes, 0, _structureBytes.Length); _header = Marshal.ByteArrayToStructureLittleEndian(_structureBytes); if(_header.imageMajorVersion > AARUFMT_VERSION) - throw - new FeatureUnsupportedImageException($"Image version {_header.imageMajorVersion} not recognized."); + { + AaruConsole.ErrorWriteLine($"Image version {_header.imageMajorVersion} not recognized."); + + return ErrorNumber.NotSupported; + } _imageInfo.Application = _header.application; _imageInfo.ApplicationVersion = $"{_header.applicationMajorVersion}.{_header.applicationMinorVersion}"; @@ -93,7 +96,11 @@ namespace Aaru.DiscImages if(idxHeader.identifier != BlockType.Index && idxHeader.identifier != BlockType.Index2) - throw new FeatureUnsupportedImageException("Index not found!"); + { + AaruConsole.ErrorWriteLine("Index not found!"); + + return ErrorNumber.InvalidArgument; + } if(idxHeader.identifier == BlockType.Index2) { @@ -456,8 +463,10 @@ namespace Aaru.DiscImages break; default: - throw new - ImageNotSupportedException($"Found unsupported compression algorithm {(ushort)ddtHeader.compression}"); + AaruConsole. + ErrorWriteLine($"Found unsupported compression algorithm {(ushort)ddtHeader.compression}"); + + return ErrorNumber.NotSupported; } foundUserDataDdt = true; @@ -504,8 +513,10 @@ namespace Aaru.DiscImages break; default: - throw new - ImageNotSupportedException($"Found unsupported compression algorithm {(ushort)ddtHeader.compression}"); + AaruConsole. + ErrorWriteLine($"Found unsupported compression algorithm {(ushort)ddtHeader.compression}"); + + return ErrorNumber.NotSupported; } uint[] cdDdt = MemoryMarshal.Cast(decompressedDdt).ToArray(); @@ -1116,7 +1127,11 @@ namespace Aaru.DiscImages } if(!foundUserDataDdt) - throw new ImageNotSupportedException("Could not find user data deduplication table."); + { + AaruConsole.ErrorWriteLine("Could not find user data deduplication table."); + + return ErrorNumber.InvalidArgument; + } _imageInfo.CreationTime = DateTime.FromFileTimeUtc(_header.creationTime); AaruConsole.DebugWriteLine("Aaru Format plugin", "Image created on {0}", _imageInfo.CreationTime); @@ -1414,7 +1429,7 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("Aaru Format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false)); if(_imageInfo.XmlMediaType != XmlMediaType.OpticalDisc) - return true; + return ErrorNumber.NoError; if(_imageInfo.MediaType == MediaType.CD || _imageInfo.MediaType == MediaType.CDDA || @@ -1456,7 +1471,7 @@ namespace Aaru.DiscImages _imageInfo.MediaType == MediaType.VideoNowColor || _imageInfo.MediaType == MediaType.VideoNowXp || _imageInfo.MediaType == MediaType.CVD) - return true; + return ErrorNumber.NoError; { foreach(Track track in Tracks) @@ -1466,7 +1481,7 @@ namespace Aaru.DiscImages } } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/Alcohol120/Read.cs b/Aaru.Images/Alcohol120/Read.cs index 55e18717f..cfdd7100f 100644 --- a/Aaru.Images/Alcohol120/Read.cs +++ b/Aaru.Images/Alcohol120/Read.cs @@ -50,13 +50,13 @@ namespace Aaru.DiscImages public sealed partial class Alcohol120 { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < 88) - return false; + return ErrorNumber.InvalidArgument; _isDvd = false; byte[] hdr = new byte[88]; @@ -99,7 +99,7 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("Alcohol 120% plugin", "header.dpmOffset = {0}", _header.dpmOffset); if(_header.version[0] > MAXIMUM_SUPPORTED_VERSION) - return false; + return ErrorNumber.NotSupported; stream.Seek(_header.sessionOffset, SeekOrigin.Begin); _alcSessions = new Dictionary(); @@ -678,7 +678,11 @@ namespace Aaru.DiscImages _alcImage = filtersList.GetFilter(alcFile); if(_alcImage == null) - throw new Exception("Cannot open data file"); + { + AaruConsole.ErrorWriteLine("Cannot open data file"); + + return ErrorNumber.NoSuchFile; + } _imageInfo.ImageSize = (ulong)_alcImage.DataForkLength; _imageInfo.CreationTime = _alcImage.CreationTime; @@ -742,7 +746,7 @@ namespace Aaru.DiscImages AaruConsole. WriteLine("Incorrect Alcohol 120% image created by an old version of Aaru. Convert image to correct it."); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/Anex86/Read.cs b/Aaru.Images/Anex86/Read.cs index 13bb876e9..3d56ca52b 100644 --- a/Aaru.Images/Anex86/Read.cs +++ b/Aaru.Images/Anex86/Read.cs @@ -43,13 +43,13 @@ namespace Aaru.DiscImages public sealed partial class Anex86 { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < Marshal.SizeOf
()) - return false; + return ErrorNumber.InvalidArgument; byte[] hdrB = new byte[Marshal.SizeOf
()]; stream.Read(hdrB, 0, hdrB.Length); @@ -78,7 +78,7 @@ namespace Aaru.DiscImages _anexImageFilter = imageFilter; - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/Apple2MG/Read.cs b/Aaru.Images/Apple2MG/Read.cs index 1ecd6a3e3..981e0e506 100644 --- a/Aaru.Images/Apple2MG/Read.cs +++ b/Aaru.Images/Apple2MG/Read.cs @@ -45,7 +45,7 @@ namespace Aaru.DiscImages public sealed partial class Apple2Mg { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -100,7 +100,7 @@ namespace Aaru.DiscImages if(_imageHeader.DataSize == 0 && _imageHeader.Blocks == 0 && _imageHeader.ImageFormat != SectorOrder.ProDos) - return false; + return ErrorNumber.InvalidArgument; byte[] tmp; int[] offsets; @@ -298,7 +298,7 @@ namespace Aaru.DiscImages break; } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/AppleDOS/Read.cs b/Aaru.Images/AppleDOS/Read.cs index 8364531a7..8f1e12faf 100644 --- a/Aaru.Images/AppleDOS/Read.cs +++ b/Aaru.Images/AppleDOS/Read.cs @@ -41,7 +41,7 @@ namespace Aaru.DiscImages public sealed partial class AppleDos { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -92,7 +92,7 @@ namespace Aaru.DiscImages _imageInfo.Heads = 1; _imageInfo.SectorsPerTrack = _dos32 ? 13u : 16u; - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/AppleNIB/Read.cs b/Aaru.Images/AppleNIB/Read.cs index 731bd6015..7e61ee545 100644 --- a/Aaru.Images/AppleNIB/Read.cs +++ b/Aaru.Images/AppleNIB/Read.cs @@ -46,13 +46,13 @@ namespace Aaru.DiscImages public sealed partial class AppleNib { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < 512) - return false; + return ErrorNumber.InvalidArgument; byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); @@ -163,7 +163,7 @@ namespace Aaru.DiscImages break; } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/Apridisk/Read.cs b/Aaru.Images/Apridisk/Read.cs index 54e8bc538..e6f190321 100644 --- a/Aaru.Images/Apridisk/Read.cs +++ b/Aaru.Images/Apridisk/Read.cs @@ -44,7 +44,7 @@ namespace Aaru.DiscImages public sealed partial class Apridisk { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -227,7 +227,7 @@ namespace Aaru.DiscImages _imageInfo.Sectors = _imageInfo.Cylinders * _imageInfo.Heads * _imageInfo.SectorsPerTrack; _imageInfo.XmlMediaType = XmlMediaType.BlockMedia; - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/BLU/Read.cs b/Aaru.Images/BLU/Read.cs index f4f17a1f0..41cb63606 100644 --- a/Aaru.Images/BLU/Read.cs +++ b/Aaru.Images/BLU/Read.cs @@ -44,7 +44,7 @@ namespace Aaru.DiscImages public sealed partial class Blu { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -70,10 +70,10 @@ namespace Aaru.DiscImages for(int i = 0; i < 0xD; i++) if(_imageHeader.DeviceName[i] < 0x20) - return false; + return ErrorNumber.InvalidArgument; if((_imageHeader.BytesPerBlock & 0xFE00) != 0x200) - return false; + return ErrorNumber.InvalidArgument; stream.Seek(0, SeekOrigin.Begin); header = new byte[_imageHeader.BytesPerBlock]; @@ -149,7 +149,7 @@ namespace Aaru.DiscImages AaruConsole.VerboseWriteLine("BLU image contains a disk of type {0}", _imageInfo.MediaType); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/BlindWrite4/Read.cs b/Aaru.Images/BlindWrite4/Read.cs index d6a6e2e7e..d04c5f852 100644 --- a/Aaru.Images/BlindWrite4/Read.cs +++ b/Aaru.Images/BlindWrite4/Read.cs @@ -51,13 +51,13 @@ namespace Aaru.DiscImages public sealed partial class BlindWrite4 { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < 19) - return false; + return ErrorNumber.InvalidArgument; byte[] tmpArray = new byte[19]; byte[] tmpUShort = new byte[2]; @@ -67,7 +67,7 @@ namespace Aaru.DiscImages stream.Read(tmpArray, 0, 19); if(!_bw4Signature.SequenceEqual(tmpArray)) - return false; + return ErrorNumber.InvalidArgument; _header = new Header { @@ -442,10 +442,16 @@ namespace Aaru.DiscImages if(_dataFilter != null) break; - throw new ArgumentException($"Data file {_header.DataFile} not found"); + AaruConsole.ErrorWriteLine($"Data file {_header.DataFile} not found"); + + return ErrorNumber.NoSuchFile; } else - throw new ArgumentException("Unable to find data file"); + { + AaruConsole.ErrorWriteLine("Unable to find data file"); + + return ErrorNumber.NoSuchFile; + } if(!string.IsNullOrEmpty(_header.SubchannelFile)) { @@ -801,7 +807,7 @@ namespace Aaru.DiscImages if(!string.IsNullOrEmpty(_imageInfo.Comments)) AaruConsole.VerboseWriteLine("BlindWrite comments: {0}", _imageInfo.Comments); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/BlindWrite5/Read.cs b/Aaru.Images/BlindWrite5/Read.cs index 02acd6990..c56ebd7e4 100644 --- a/Aaru.Images/BlindWrite5/Read.cs +++ b/Aaru.Images/BlindWrite5/Read.cs @@ -57,13 +57,13 @@ namespace Aaru.DiscImages public sealed partial class BlindWrite5 { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < 276) - return false; + return ErrorNumber.InvalidArgument; byte[] hdr = new byte[260]; stream.Read(hdr, 0, 260); @@ -606,7 +606,7 @@ namespace Aaru.DiscImages AaruConsole.ErrorWriteLine("BlindWrite5 found unknown subchannel size: {0}", sectorSize - 2352); - return false; + return ErrorNumber.NotSupported; } else chars.Subchannel = TrackSubchannelType.None; @@ -953,7 +953,7 @@ namespace Aaru.DiscImages { AaruConsole.ErrorWriteLine("Could not find image for track {0}", trk.point); - return false; + return ErrorNumber.NoSuchFile; } var splitStream = new SplitJoinStream(); @@ -975,7 +975,7 @@ namespace Aaru.DiscImages { AaruConsole.ErrorWriteLine("Could not find image for track {0}", trk.point); - return false; + return ErrorNumber.NoSuchFile; } track.Filter = splitStream.Filter; @@ -1038,7 +1038,7 @@ namespace Aaru.DiscImages { AaruConsole.ErrorWriteLine("Could not find image for track {0}", trk.point); - return false; + return ErrorNumber.NoSuchFile; } track.Pregap = trk.pregap; @@ -1385,7 +1385,7 @@ namespace Aaru.DiscImages track.Indexes?.Clear(); } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/CDRDAO/Read.cs b/Aaru.Images/CDRDAO/Read.cs index a095cce02..8568370ab 100644 --- a/Aaru.Images/CDRDAO/Read.cs +++ b/Aaru.Images/CDRDAO/Read.cs @@ -50,10 +50,10 @@ namespace Aaru.DiscImages public sealed partial class Cdrdao { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { if(imageFilter == null) - return false; + return ErrorNumber.NoSuchFile; _cdrdaoFilter = imageFilter; @@ -133,7 +133,7 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("CDRDAO plugin", "Not a CDRDAO TOC or TOC type not in line {0}.", lineNumber); - return false; + return ErrorNumber.InvalidArgument; } break; @@ -284,8 +284,12 @@ namespace Aaru.DiscImages break; default: - throw new - NotSupportedException($"Track mode {matchTrack.Groups["type"].Value} is unsupported"); + { + AaruConsole. + ErrorWriteLine($"Track mode {matchTrack.Groups["type"].Value} is unsupported"); + + return ErrorNumber.NotSupported; + } } switch(matchTrack.Groups["subchan"].Value) @@ -299,8 +303,12 @@ namespace Aaru.DiscImages break; default: - throw new - NotSupportedException($"Track subchannel mode {matchTrack.Groups["subchan"].Value} is unsupported"); + { + AaruConsole. + ErrorWriteLine($"Track subchannel mode {matchTrack.Groups["subchan"].Value} is unsupported"); + + return ErrorNumber.NotSupported; + } } currentTrack.Tracktype = matchTrack.Groups["type"].Value; @@ -555,7 +563,8 @@ namespace Aaru.DiscImages /* else // Non-empty unknown field { - throw new FeatureUnsupportedImageException(string.Format("Found unknown field defined at line {0}: \"{1}\"", line, _line)); + AaruConsole.ErrorWriteLine(string.Format("Found unknown field defined at line {0}: \"{1}\"", line, _line)); + return ErrorNumber.NotSupported; } */ } @@ -708,7 +717,11 @@ namespace Aaru.DiscImages if(_discimage.Tracks[i].Sequence == 1 && i != 0) - throw new ImageNotSupportedException("Unordered tracks"); + { + AaruConsole.ErrorWriteLine("Unordered tracks"); + + return ErrorNumber.NotSupported; + } // Index 01 var partition = new Partition @@ -868,15 +881,14 @@ namespace Aaru.DiscImages _sectorBuilder = new SectorBuilder(); - return true; + return ErrorNumber.NoError; } catch(Exception ex) { AaruConsole.ErrorWriteLine("Exception trying to identify image file {0}", imageFilter); - AaruConsole.ErrorWriteLine("Exception: {0}", ex.Message); - AaruConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace); + AaruConsole.ErrorWriteLine("Exception: {0}", ex); - return false; + return ErrorNumber.UnexpectedException; } } diff --git a/Aaru.Images/CDRWin/Read.cs b/Aaru.Images/CDRWin/Read.cs index 851a22214..58becbbf5 100644 --- a/Aaru.Images/CDRWin/Read.cs +++ b/Aaru.Images/CDRWin/Read.cs @@ -52,10 +52,10 @@ namespace Aaru.DiscImages public sealed partial class CdrWin { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { if(imageFilter == null) - return false; + return ErrorNumber.InvalidArgument; _cdrwinFilter = imageFilter; @@ -814,13 +814,16 @@ namespace Aaru.DiscImages AaruConsole. ErrorWriteLine("This image from PowerISO is damaged beyond possible recovery. Will not open."); - return false; + return ErrorNumber.InvalidArgument; } else if(line == "") // Empty line, ignore it {} else // Non-empty unknown field - throw new - FeatureUnsupportedImageException($"Found unknown field defined at line {lineNumber}: \"{line}\""); + { + AaruConsole.ErrorWriteLine($"Found unknown field defined at line {lineNumber}: \"{line}\""); + + return ErrorNumber.NotSupported; + } } } @@ -847,7 +850,7 @@ namespace Aaru.DiscImages AaruConsole. ErrorWriteLine("The data files are not correct according to the cuesheet file, cannot continue with this file."); - return false; + return ErrorNumber.InvalidArgument; } cueTracks[0].Pregap = cueTracks[0].Indexes[1]; @@ -861,7 +864,7 @@ namespace Aaru.DiscImages AaruConsole. ErrorWriteLine("The data files are not correct according to the cuesheet file, cannot continue with this file."); - return false; + return ErrorNumber.InvalidArgument; } cueTracks[currentTrack.Sequence - 1].Sectors = @@ -1540,15 +1543,14 @@ namespace Aaru.DiscImages _discImage.Sessions = sessions.ToList(); } - return true; + return ErrorNumber.NoError; } catch(Exception ex) { AaruConsole.ErrorWriteLine("Exception trying to identify image file {0}", imageFilter.Filename); - AaruConsole.ErrorWriteLine("Exception: {0}", ex.Message); - AaruConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace); + AaruConsole.ErrorWriteLine("Exception: {0}", ex); - return false; + return ErrorNumber.UnexpectedException; } } diff --git a/Aaru.Images/CHD/Read.cs b/Aaru.Images/CHD/Read.cs index 77f282350..3d659baf7 100644 --- a/Aaru.Images/CHD/Read.cs +++ b/Aaru.Images/CHD/Read.cs @@ -54,7 +54,7 @@ namespace Aaru.DiscImages { /// [SuppressMessage("ReSharper", "UnusedVariable")] - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -62,7 +62,7 @@ namespace Aaru.DiscImages stream.Read(magic, 0, 8); if(!_chdTag.SequenceEqual(magic)) - return false; + return ErrorNumber.InvalidArgument; // Read length byte[] buffer = new byte[4]; @@ -337,7 +337,9 @@ namespace Aaru.DiscImages case 5: { // TODO: Check why reading is misaligned - throw new ImageNotSupportedException("CHD version 5 is not yet supported."); + AaruConsole.ErrorWriteLine("CHD version 5 is not yet supported."); + + return ErrorNumber.NotSupported; HeaderV5 hdrV5 = Marshal.ByteArrayToStructureBigEndian(buffer); @@ -417,7 +419,11 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("CHD plugin", "Took {0} seconds", (end - start).TotalSeconds); } else - throw new ImageNotSupportedException("Cannot read compressed CHD version 5"); + { + AaruConsole.ErrorWriteLine("Cannot read compressed CHD version 5"); + + return ErrorNumber.NotSupported; + } nextMetaOff = hdrV5.metaoffset; @@ -435,7 +441,10 @@ namespace Aaru.DiscImages break; } - default: throw new ImageNotSupportedException($"Unsupported CHD version {version}"); + default: + AaruConsole.ErrorWriteLine($"Unsupported CHD version {version}"); + + return ErrorNumber.NotSupported; } if(_mapVersion >= 3) @@ -468,8 +477,12 @@ namespace Aaru.DiscImages // "GDDD" case HARD_DISK_METADATA: if(_isCdrom || _isGdrom) - throw new - ImageNotSupportedException("Image cannot be a hard disk and a C/GD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a hard disk and a C/GD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } string gddd = StringHandlers.CToString(meta); var gdddRegEx = new Regex(REGEX_METADATA_HDD); @@ -489,12 +502,20 @@ namespace Aaru.DiscImages // "CHCD" case CDROM_OLD_METADATA: if(_isHdd) - throw new - ImageNotSupportedException("Image cannot be a hard disk and a CD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a hard disk and a CD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } if(_isGdrom) - throw new - ImageNotSupportedException("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } uint chdTracksNumber = BigEndianBitConverter.ToUInt32(meta, 0); @@ -564,7 +585,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported track type {chdTrack.type}"); + { + AaruConsole.ErrorWriteLine($"Unsupported track type {chdTrack.type}"); + + return ErrorNumber.NotSupported; + } } switch((SubTypeOld)chdTrack.subType) @@ -586,8 +611,11 @@ namespace Aaru.DiscImages break; default: - throw new - ImageNotSupportedException($"Unsupported subchannel type {chdTrack.type}"); + { + AaruConsole.ErrorWriteLine($"Unsupported subchannel type {chdTrack.type}"); + + return ErrorNumber.NotSupported; + } } aaruTrack.Description = $"Track {i + 1}"; @@ -614,12 +642,20 @@ namespace Aaru.DiscImages // "CHTR" case CDROM_TRACK_METADATA: if(_isHdd) - throw new - ImageNotSupportedException("Image cannot be a hard disk and a CD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a hard disk and a CD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } if(_isGdrom) - throw new - ImageNotSupportedException("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } string chtr = StringHandlers.CToString(meta); var chtrRegEx = new Regex(REGEX_METADATA_CDROM); @@ -635,7 +671,11 @@ namespace Aaru.DiscImages string tracktype = chtrMatch.Groups["track_type"].Value; if(trackNo != currentTrack) - throw new ImageNotSupportedException("Unsorted tracks, cannot proceed."); + { + AaruConsole.ErrorWriteLine("Unsorted tracks, cannot proceed."); + + return ErrorNumber.NotSupported; + } var aaruTrack = new Track(); @@ -691,7 +731,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported track type {tracktype}"); + { + AaruConsole.ErrorWriteLine($"Unsupported track type {tracktype}"); + + return ErrorNumber.NotSupported; + } } switch(subtype) @@ -713,7 +757,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported subchannel type {subtype}"); + { + AaruConsole.ErrorWriteLine($"Unsupported subchannel type {subtype}"); + + return ErrorNumber.NotSupported; + } } aaruTrack.Description = $"Track {trackNo}"; @@ -739,12 +787,20 @@ namespace Aaru.DiscImages // "CHT2" case CDROM_TRACK_METADATA2: if(_isHdd) - throw new - ImageNotSupportedException("Image cannot be a hard disk and a CD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a hard disk and a CD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } if(_isGdrom) - throw new - ImageNotSupportedException("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } string cht2 = StringHandlers.CToString(meta); var cht2RegEx = new Regex(REGEX_METADATA_CDROM2); @@ -774,7 +830,11 @@ namespace Aaru.DiscImages uint postgap = uint.Parse(cht2Match.Groups["postgap"].Value); if(trackNo != currentTrack) - throw new ImageNotSupportedException("Unsorted tracks, cannot proceed."); + { + AaruConsole.ErrorWriteLine("Unsorted tracks, cannot proceed."); + + return ErrorNumber.NotSupported; + } var aaruTrack = new Track(); @@ -830,7 +890,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported track type {trackType}"); + { + AaruConsole.ErrorWriteLine($"Unsupported track type {trackType}"); + + return ErrorNumber.NotSupported; + } } switch(subtype) @@ -852,7 +916,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported subchannel type {subtype}"); + { + AaruConsole.ErrorWriteLine($"Unsupported subchannel type {subtype}"); + + return ErrorNumber.NotSupported; + } } aaruTrack.Description = $"Track {trackNo}"; @@ -903,12 +971,20 @@ namespace Aaru.DiscImages // "CHGD" case GDROM_METADATA: if(_isHdd) - throw new - ImageNotSupportedException("Image cannot be a hard disk and a GD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a hard disk and a GD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } if(_isCdrom) - throw new - ImageNotSupportedException("Image cannot be a CD-ROM and a GD-ROM at the same time, aborting."); + { + AaruConsole. + ErrorWriteLine("Image cannot be a CD-ROM and a GD-ROM at the same time, aborting."); + + return ErrorNumber.NotSupported; + } string chgd = StringHandlers.CToString(meta); var chgdRegEx = new Regex(REGEX_METADATA_GDROM); @@ -931,7 +1007,11 @@ namespace Aaru.DiscImages uint pad = uint.Parse(chgdMatch.Groups["pad"].Value); if(trackNo != currentTrack) - throw new ImageNotSupportedException("Unsorted tracks, cannot proceed."); + { + AaruConsole.ErrorWriteLine("Unsorted tracks, cannot proceed."); + + return ErrorNumber.NotSupported; + } var aaruTrack = new Track(); @@ -987,7 +1067,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported track type {trackType}"); + { + AaruConsole.ErrorWriteLine($"Unsupported track type {trackType}"); + + return ErrorNumber.NotSupported; + } } switch(subtype) @@ -1009,7 +1093,11 @@ namespace Aaru.DiscImages break; default: - throw new ImageNotSupportedException($"Unsupported subchannel type {subtype}"); + { + AaruConsole.ErrorWriteLine($"Unsupported subchannel type {subtype}"); + + return ErrorNumber.NotSupported; + } } aaruTrack.Description = $"Track {trackNo}"; @@ -1126,7 +1214,11 @@ namespace Aaru.DiscImages _imageInfo.Sectors += aaruTrack.EndSector - aaruTrack.StartSector + 1; } else - throw new ImageNotSupportedException("Image does not represent a known media, aborting"); + { + AaruConsole.ErrorWriteLine("Image does not represent a known media, aborting"); + + return ErrorNumber.NotSupported; + } } if(_isCdrom || _isGdrom) @@ -1240,7 +1332,7 @@ namespace Aaru.DiscImages _sectorBuilder = new SectorBuilder(); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/CPCDSK/Read.cs b/Aaru.Images/CPCDSK/Read.cs index 089f95e4d..c7287b429 100644 --- a/Aaru.Images/CPCDSK/Read.cs +++ b/Aaru.Images/CPCDSK/Read.cs @@ -49,13 +49,13 @@ namespace Aaru.DiscImages public sealed partial class Cpcdsk { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < 512) - return false; + return ErrorNumber.InvalidArgument; byte[] headerB = new byte[256]; stream.Read(headerB, 0, 256); @@ -70,7 +70,7 @@ namespace Aaru.DiscImages } if(pos >= 254) - return false; + return ErrorNumber.InvalidArgument; string magic = Encoding.ASCII.GetString(headerB, 0, pos); @@ -82,7 +82,7 @@ namespace Aaru.DiscImages if(string.Compare(CPCDSK_ID, magic, StringComparison.InvariantCultureIgnoreCase) != 0 && string.Compare(EDSK_ID, magic, StringComparison.InvariantCultureIgnoreCase) != 0 && string.Compare(DU54_ID, magic, StringComparison.InvariantCultureIgnoreCase) != 0) - return false; + return ErrorNumber.InvalidArgument; _extended = string.Compare(EDSK_ID, magic, StringComparison.InvariantCultureIgnoreCase) == 0; AaruConsole.DebugWriteLine("CPCDSK plugin", "Extended = {0}", _extended); @@ -137,7 +137,7 @@ namespace Aaru.DiscImages { AaruConsole.ErrorWriteLine("Not the expected track info."); - return false; + return ErrorNumber.InvalidArgument; } AaruConsole.DebugWriteLine("CPCDSK plugin", "trackInfo[{1}:{2}].magic = \"{0}\"", @@ -285,7 +285,7 @@ namespace Aaru.DiscImages _imageInfo.Heads = header.sides; _imageInfo.SectorsPerTrack = (uint)(_imageInfo.Sectors / (_imageInfo.Cylinders * _imageInfo.Heads)); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/CisCopy/Read.cs b/Aaru.Images/CisCopy/Read.cs index 897ed188a..c2f0b3da5 100644 --- a/Aaru.Images/CisCopy/Read.cs +++ b/Aaru.Images/CisCopy/Read.cs @@ -44,7 +44,7 @@ namespace Aaru.DiscImages public sealed partial class CisCopy { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -197,7 +197,7 @@ namespace Aaru.DiscImages AaruConsole.VerboseWriteLine("CisCopy image contains a disk of type {0}", _imageInfo.MediaType); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/CloneCD/Read.cs b/Aaru.Images/CloneCD/Read.cs index 1e2ef7cf5..850e3fcbb 100644 --- a/Aaru.Images/CloneCD/Read.cs +++ b/Aaru.Images/CloneCD/Read.cs @@ -49,10 +49,10 @@ namespace Aaru.DiscImages public sealed partial class CloneCd { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { if(imageFilter == null) - return false; + return ErrorNumber.NoSuchFile; _ccdFilter = imageFilter; @@ -132,8 +132,11 @@ namespace Aaru.DiscImages inEntry || inTrack || inCdText) - throw new - FeatureUnsupportedImageException($"Found [CloneCD] out of order in line {lineNumber}"); + { + AaruConsole.ErrorWriteLine($"Found [CloneCD] out of order in line {lineNumber}"); + + return ErrorNumber.InvalidArgument; + } inCcd = true; inDisk = false; @@ -367,7 +370,11 @@ namespace Aaru.DiscImages entries.Add(currentEntry); if(entries.Count == 0) - throw new FeatureUnsupportedImageException("Did not find any track."); + { + AaruConsole.ErrorWriteLine("Did not find any track."); + + return ErrorNumber.InvalidArgument; + } FullTOC.CDFullTOC toc; toc.TrackDescriptors = entries.ToArray(); @@ -403,7 +410,11 @@ namespace Aaru.DiscImages _dataFilter = filtersList.GetFilter(dataFile); if(_dataFilter == null) - throw new Exception("Cannot open data file"); + { + AaruConsole.ErrorWriteLine("Cannot open data file"); + + return ErrorNumber.NoSuchFile; + } filtersList = new FiltersList(); _subFilter = filtersList.GetFilter(subFile); @@ -884,15 +895,14 @@ namespace Aaru.DiscImages _imageInfo.LastModificationTime = imageFilter.LastWriteTime; _imageInfo.XmlMediaType = XmlMediaType.OpticalDisc; - return true; + return ErrorNumber.NoError; } catch(Exception ex) { AaruConsole.ErrorWriteLine("Exception trying to identify image file {0}", imageFilter.Filename); - AaruConsole.ErrorWriteLine("Exception: {0}", ex.Message); - AaruConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace); + AaruConsole.ErrorWriteLine("Exception: {0}", ex); - return false; + return ErrorNumber.UnexpectedException; } } diff --git a/Aaru.Images/CopyQM/Read.cs b/Aaru.Images/CopyQM/Read.cs index e4d57dcde..c6ffe71fc 100644 --- a/Aaru.Images/CopyQM/Read.cs +++ b/Aaru.Images/CopyQM/Read.cs @@ -43,7 +43,7 @@ namespace Aaru.DiscImages public sealed partial class CopyQm { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -192,7 +192,7 @@ namespace Aaru.DiscImages _imageInfo.Cylinders = _header.totalCylinders; _imageInfo.SectorsPerTrack = _header.sectorsPerTrack; - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/CopyTape/Read.cs b/Aaru.Images/CopyTape/Read.cs index 208e77da0..eebbc9a7b 100644 --- a/Aaru.Images/CopyTape/Read.cs +++ b/Aaru.Images/CopyTape/Read.cs @@ -39,13 +39,14 @@ using Aaru.CommonTypes; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; using Aaru.CommonTypes.Structs; +using Aaru.Console; namespace Aaru.DiscImages { public sealed partial class CopyTape { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { List blockPositions = new(); var partialBlockRx = new Regex(PARTIAL_BLOCK_REGEX); @@ -54,7 +55,7 @@ namespace Aaru.DiscImages var eotRx = new Regex(END_OF_TAPE_REGEX); if(imageFilter.DataForkLength <= 16) - return false; + return ErrorNumber.InvalidArgument; _imageStream = imageFilter.GetDataForkStream(); _imageStream.Position = 0; @@ -97,7 +98,11 @@ namespace Aaru.DiscImages } if(!partialBlockMt.Success) - throw new ArgumentException("Found unhandled header, cannot open."); + { + AaruConsole.ErrorWriteLine("Found unhandled header, cannot open."); + + return ErrorNumber.InvalidArgument; + } _imageStream.Position -= 9; @@ -112,26 +117,46 @@ namespace Aaru.DiscImages Match blockMt = blockRx.Match(mark); if(!blockMt.Success) - throw new ArgumentException("Cannot decode block header, cannot open."); + { + AaruConsole.ErrorWriteLine("Cannot decode block header, cannot open."); + + return ErrorNumber.InvalidArgument; + } string blkSize = blockMt.Groups["blockSize"].Value; if(string.IsNullOrWhiteSpace(blkSize)) - throw new ArgumentException("Cannot decode block header, cannot open."); + { + AaruConsole.ErrorWriteLine("Cannot decode block header, cannot open."); + + return ErrorNumber.InvalidArgument; + } if(!uint.TryParse(blkSize, out uint blockSize)) - throw new ArgumentException("Cannot decode block header, cannot open."); + { + AaruConsole.ErrorWriteLine("Cannot decode block header, cannot open."); + + return ErrorNumber.InvalidArgument; + } if(blockSize == 0 || blockSize + 17 > imageFilter.DataForkLength) - throw new ArgumentException("Cannot decode block header, cannot open."); + { + AaruConsole.ErrorWriteLine("Cannot decode block header, cannot open."); + + return ErrorNumber.InvalidArgument; + } _imageStream.Position += blockSize; int newLine = _imageStream.ReadByte(); if(newLine != 0x0A) - throw new ArgumentException("Cannot decode block header, cannot open."); + { + AaruConsole.ErrorWriteLine("Cannot decode block header, cannot open."); + + return ErrorNumber.InvalidArgument; + } blockPositions.Add(_imageStream.Position - blockSize - 17); currentBlock++; @@ -161,7 +186,7 @@ namespace Aaru.DiscImages _imageInfo.XmlMediaType = XmlMediaType.BlockMedia; IsTape = true; - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/D88/Read.cs b/Aaru.Images/D88/Read.cs index e6147f946..afb2734ef 100644 --- a/Aaru.Images/D88/Read.cs +++ b/Aaru.Images/D88/Read.cs @@ -47,7 +47,7 @@ namespace Aaru.DiscImages public sealed partial class D88 { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -56,7 +56,7 @@ namespace Aaru.DiscImages var shiftjis = Encoding.GetEncoding("shift_jis"); if(stream.Length < Marshal.SizeOf
()) - return false; + return ErrorNumber.InvalidArgument; byte[] hdrB = new byte[Marshal.SizeOf
()]; stream.Read(hdrB, 0, hdrB.Length); @@ -76,15 +76,15 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("D88 plugin", "d88hdr.disk_size = {0}", hdr.disk_size); if(hdr.disk_size != stream.Length) - return false; + return ErrorNumber.InvalidArgument; if(hdr.disk_type != DiskType.D2 && hdr.disk_type != DiskType.Dd2 && hdr.disk_type != DiskType.Hd2) - return false; + return ErrorNumber.InvalidArgument; if(!hdr.reserved.SequenceEqual(_reservedEmpty)) - return false; + return ErrorNumber.InvalidArgument; int trkCounter = 0; @@ -95,13 +95,13 @@ namespace Aaru.DiscImages if(t < 0 || t > stream.Length) - return false; + return ErrorNumber.InvalidArgument; } AaruConsole.DebugWriteLine("D88 plugin", "{0} tracks", trkCounter); if(trkCounter == 0) - return false; + return ErrorNumber.InvalidArgument; hdrB = new byte[Marshal.SizeOf()]; stream.Seek(hdr.track_table[0], SeekOrigin.Begin); @@ -128,7 +128,7 @@ namespace Aaru.DiscImages { stream.Seek(hdr.track_table[i], SeekOrigin.Begin); stream.Read(hdrB, 0, hdrB.Length); - SortedDictionary sectors = new SortedDictionary(); + SortedDictionary sectors = new(); sechdr = Marshal.ByteArrayToStructureLittleEndian(hdrB); @@ -362,7 +362,7 @@ namespace Aaru.DiscImages break; } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/DART/Read.cs b/Aaru.Images/DART/Read.cs index 902f354c5..ed0bb5a9c 100644 --- a/Aaru.Images/DART/Read.cs +++ b/Aaru.Images/DART/Read.cs @@ -49,12 +49,12 @@ namespace Aaru.DiscImages public sealed partial class Dart { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); if(stream.Length < 84) - return false; + return ErrorNumber.InvalidArgument; stream.Seek(0, SeekOrigin.Begin); byte[] headerB = new byte[Marshal.SizeOf
()]; @@ -63,7 +63,7 @@ namespace Aaru.DiscImages Header header = Marshal.ByteArrayToStructureBigEndian
(headerB); if(header.srcCmp > COMPRESS_NONE) - return false; + return ErrorNumber.NotSupported; int expectedMaxSize = 84 + (header.srcSize * 2 * 524); @@ -72,43 +72,43 @@ namespace Aaru.DiscImages case DISK_MAC: if(header.srcSize != SIZE_MAC_SS && header.srcSize != SIZE_MAC) - return false; + return ErrorNumber.InvalidArgument; break; case DISK_LISA: if(header.srcSize != SIZE_LISA) - return false; + return ErrorNumber.InvalidArgument; break; case DISK_APPLE2: if(header.srcSize != DISK_APPLE2) - return false; + return ErrorNumber.InvalidArgument; break; case DISK_MAC_HD: if(header.srcSize != SIZE_MAC_HD) - return false; + return ErrorNumber.InvalidArgument; expectedMaxSize += 64; break; case DISK_DOS: if(header.srcSize != SIZE_DOS) - return false; + return ErrorNumber.InvalidArgument; break; case DISK_DOS_HD: if(header.srcSize != SIZE_DOS_HD) - return false; + return ErrorNumber.InvalidArgument; expectedMaxSize += 64; break; - default: return false; + default: return ErrorNumber.InvalidArgument; } if(stream.Length > expectedMaxSize) - return false; + return ErrorNumber.InvalidArgument; short[] bLength; @@ -320,7 +320,7 @@ namespace Aaru.DiscImages break; } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/DIM/Read.cs b/Aaru.Images/DIM/Read.cs index e1bb1833e..0e3b4d94b 100644 --- a/Aaru.Images/DIM/Read.cs +++ b/Aaru.Images/DIM/Read.cs @@ -45,13 +45,13 @@ namespace Aaru.DiscImages public sealed partial class Dim { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); if(stream.Length < DATA_OFFSET) - return false; + return ErrorNumber.InvalidArgument; long diskSize = stream.Length - DATA_OFFSET; @@ -65,7 +65,7 @@ namespace Aaru.DiscImages stream.Read(_comment, 0, 60); if(!_headerId.SequenceEqual(_hdrId)) - return false; + return ErrorNumber.InvalidArgument; _imageInfo.MediaType = MediaType.Unknown; @@ -78,7 +78,7 @@ namespace Aaru.DiscImages AaruConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 8 * 1024)); - return false; + return ErrorNumber.NotSupported; } if(diskSize / (2 * 8 * 1024) == 77) @@ -94,7 +94,7 @@ namespace Aaru.DiscImages { AaruConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 9 * 512)); - return false; + return ErrorNumber.NotSupported; } if(diskSize / (2 * 9 * 512) == 80) @@ -111,7 +111,7 @@ namespace Aaru.DiscImages AaruConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 15 * 512)); - return false; + return ErrorNumber.NotSupported; } if(diskSize / (2 * 15 * 512) == 80) @@ -127,7 +127,7 @@ namespace Aaru.DiscImages { AaruConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 9 * 512)); - return false; + return ErrorNumber.NotSupported; } if(diskSize / (2 * 9 * 512) == 80) @@ -144,7 +144,7 @@ namespace Aaru.DiscImages AaruConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 18 * 512)); - return false; + return ErrorNumber.NotSupported; } if(diskSize / (2 * 18 * 512) == 80) @@ -175,11 +175,11 @@ namespace Aaru.DiscImages AaruConsole.ErrorWriteLine("DIM shows unknown image with {0} tracks", diskSize / (2 * 26 * 256)); - return false; + return ErrorNumber.NotSupported; } break; - default: return false; + default: return ErrorNumber.InvalidArgument; } AaruConsole.VerboseWriteLine("DIM image contains a disk of type {0}", _imageInfo.MediaType); @@ -238,7 +238,7 @@ namespace Aaru.DiscImages break; } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/DiscFerret/Read.cs b/Aaru.Images/DiscFerret/Read.cs index 292784633..d52b84f61 100644 --- a/Aaru.Images/DiscFerret/Read.cs +++ b/Aaru.Images/DiscFerret/Read.cs @@ -43,7 +43,7 @@ namespace Aaru.DiscImages public sealed partial class DiscFerret { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { byte[] magicB = new byte[4]; Stream stream = imageFilter.GetDataForkStream(); @@ -52,7 +52,7 @@ namespace Aaru.DiscImages if(magic != DFI_MAGIC && magic != DFI_MAGIC2) - return false; + return ErrorNumber.InvalidArgument; TrackOffsets = new SortedDictionary(); TrackLengths = new SortedDictionary(); @@ -121,7 +121,9 @@ namespace Aaru.DiscImages _imageInfo.Application = "DiscFerret"; _imageInfo.ApplicationVersion = magic == DFI_MAGIC2 ? "2.0" : "1.0"; - throw new NotImplementedException("Flux decoding is not yet implemented."); + AaruConsole.ErrorWriteLine("Flux decoding is not yet implemented."); + + return ErrorNumber.NotImplemented; } /// diff --git a/Aaru.Images/DiscJuggler/Read.cs b/Aaru.Images/DiscJuggler/Read.cs index 4efa26b70..3e4862c01 100644 --- a/Aaru.Images/DiscJuggler/Read.cs +++ b/Aaru.Images/DiscJuggler/Read.cs @@ -50,7 +50,7 @@ namespace Aaru.DiscImages public sealed partial class DiscJuggler { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { _imageStream = imageFilter.GetDataForkStream(); @@ -61,7 +61,7 @@ namespace Aaru.DiscImages int dscLen = BitConverter.ToInt32(dscLenB, 0); if(dscLen >= _imageStream.Length) - return false; + return ErrorNumber.InvalidArgument; byte[] descriptor = new byte[dscLen]; _imageStream.Seek(-dscLen, SeekOrigin.End); @@ -70,7 +70,7 @@ namespace Aaru.DiscImages // Sessions if(descriptor[0] > 99 || descriptor[0] == 0) - return false; + return ErrorNumber.InvalidArgument; int position = 1; @@ -140,7 +140,7 @@ namespace Aaru.DiscImages } if(!nextFound) - return Tracks.Count > 0; + return Tracks.Count > 0 ? ErrorNumber.NoError : ErrorNumber.InvalidArgument; position += 15; @@ -149,7 +149,7 @@ namespace Aaru.DiscImages // Too many tracks if(descriptor[position + 1] > 99) - return false; + return ErrorNumber.InvalidArgument; byte maxT = descriptor[position + 1]; AaruConsole.DebugWriteLine("DiscJuggler plugin", "maxT = {0}", maxT); @@ -768,7 +768,7 @@ namespace Aaru.DiscImages _isCd = mediumType == 152; if(_isCd) - return true; + return ErrorNumber.NoError; foreach(Track track in Tracks) { @@ -786,7 +786,7 @@ namespace Aaru.DiscImages _imageInfo.ReadableSectorTags.Remove(SectorTagType.CdTrackFlags); _imageInfo.ReadableSectorTags.Remove(SectorTagType.CdTrackIsrc); - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/DiskCopy42/Read.cs b/Aaru.Images/DiskCopy42/Read.cs index 694bce87b..e481ecadf 100644 --- a/Aaru.Images/DiskCopy42/Read.cs +++ b/Aaru.Images/DiskCopy42/Read.cs @@ -48,7 +48,7 @@ namespace Aaru.DiscImages public sealed partial class DiskCopy42 { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -59,7 +59,7 @@ namespace Aaru.DiscImages // Incorrect pascal string length, not DC42 if(buffer[0] > 63) - return false; + return ErrorNumber.InvalidArgument; header = new Header(); @@ -86,7 +86,7 @@ namespace Aaru.DiscImages if(header.Valid != 1 || header.Reserved != 0) - return false; + return ErrorNumber.InvalidArgument; // Some versions seem to incorrectly create little endian fields if(header.DataSize + header.TagSize + 0x54 != imageFilter.DataForkLength && @@ -99,7 +99,7 @@ namespace Aaru.DiscImages if(header.DataSize + header.TagSize + 0x54 != imageFilter.DataForkLength && header.Format != kSigmaFormatTwiggy) - return false; + return ErrorNumber.InvalidArgument; } if(header.Format != kSonyFormat400K && @@ -112,7 +112,7 @@ namespace Aaru.DiscImages { AaruConsole.DebugWriteLine("DC42 plugin", "Unknown header.format = 0x{0:X2} value", header.Format); - return false; + return ErrorNumber.NotSupported; } if(header.FmtByte != kSonyFmtByte400K && @@ -127,14 +127,14 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.fmtByte = 0x{0:X2} value", header.FmtByte); - return false; + return ErrorNumber.NotSupported; } if(header.FmtByte == kInvalidFmtByte) { AaruConsole.DebugWriteLine("DC42 plugin", "Image says it's unformatted"); - return false; + return ErrorNumber.InvalidArgument; } dataOffset = 0x54; @@ -156,7 +156,7 @@ namespace Aaru.DiscImages { AaruConsole.DebugWriteLine("DC42 plugin", "Unknown tag size"); - return false; + return ErrorNumber.NotSupported; } imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag); @@ -464,7 +464,7 @@ namespace Aaru.DiscImages break; } - return true; + return ErrorNumber.NoError; } /// diff --git a/Aaru.Images/DiskDupe/Read.cs b/Aaru.Images/DiskDupe/Read.cs index b70c2f9a1..d65708e47 100644 --- a/Aaru.Images/DiskDupe/Read.cs +++ b/Aaru.Images/DiskDupe/Read.cs @@ -42,7 +42,7 @@ namespace Aaru.DiscImages { public sealed partial class DiskDupe { - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); @@ -51,9 +51,7 @@ namespace Aaru.DiscImages long[] trackOffsets = null; if(!TryReadHeader(stream, ref fHeader, ref trackMap, ref trackOffsets)) - { - return false; - } + return ErrorNumber.InvalidArgument; AaruConsole.DebugWriteLine("DiskDupe Plugin", "Detected DiskDupe DDI image with {0} tracks and {1} sectors per track.", @@ -82,7 +80,7 @@ namespace Aaru.DiscImages _trackMap = trackMap; _trackOffsets = trackOffsets; - return true; + return ErrorNumber.NoError; } public byte[] ReadSector(ulong sectorAddress) diff --git a/Aaru.Images/DriDiskCopy/Read.cs b/Aaru.Images/DriDiskCopy/Read.cs index 4c3fb292e..f8a6b1ef8 100644 --- a/Aaru.Images/DriDiskCopy/Read.cs +++ b/Aaru.Images/DriDiskCopy/Read.cs @@ -44,12 +44,12 @@ namespace Aaru.DiscImages public sealed partial class DriDiskCopy { /// - public bool Open(IFilter imageFilter) + public ErrorNumber Open(IFilter imageFilter) { Stream stream = imageFilter.GetDataForkStream(); if((stream.Length - Marshal.SizeOf