From a5f5517007e9bbab7b79a5ca632a4a7f1473d1f0 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 12 Jul 2020 23:13:05 +0100 Subject: [PATCH] Do not calculate pregaps on non-CD optical disc images. Fixes #371 --- Aaru.Images/AaruFormat/Read.cs | 48 ++++++++++++++++++++++++++++ Aaru.Images/Alcohol120/Alcohol120.cs | 13 +++----- Aaru.Images/Alcohol120/Properties.cs | 8 +++++ Aaru.Images/Alcohol120/Read.cs | 2 +- Aaru.Images/BlindWrite5/Read.cs | 9 ++++++ Aaru.Images/CDRWin/Properties.cs | 44 +++++++++++++++++++++++++ Aaru.Images/DiscJuggler/Read.cs | 9 ++++++ Aaru.Images/Nero/Read.cs | 45 ++++++++++++++++++++++++++ 8 files changed, 169 insertions(+), 9 deletions(-) diff --git a/Aaru.Images/AaruFormat/Read.cs b/Aaru.Images/AaruFormat/Read.cs index 4bfbae3d3..9603b0e3f 100644 --- a/Aaru.Images/AaruFormat/Read.cs +++ b/Aaru.Images/AaruFormat/Read.cs @@ -1230,6 +1230,54 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("Aaru Format plugin", "Memory snapshot: {0} bytes", GC.GetTotalMemory(false)); + if(imageInfo.XmlMediaType != XmlMediaType.OpticalDisc) + return true; + + if(imageInfo.MediaType != MediaType.CD && + imageInfo.MediaType != MediaType.CDDA && + imageInfo.MediaType != MediaType.CDG && + imageInfo.MediaType != MediaType.CDEG && + imageInfo.MediaType != MediaType.CDI && + imageInfo.MediaType != MediaType.CDROM && + imageInfo.MediaType != MediaType.CDROMXA && + imageInfo.MediaType != MediaType.CDPLUS && + imageInfo.MediaType != MediaType.CDMO && + imageInfo.MediaType != MediaType.CDR && + imageInfo.MediaType != MediaType.CDRW && + imageInfo.MediaType != MediaType.CDMRW && + imageInfo.MediaType != MediaType.VCD && + imageInfo.MediaType != MediaType.SVCD && + imageInfo.MediaType != MediaType.PCD && + imageInfo.MediaType != MediaType.DTSCD && + imageInfo.MediaType != MediaType.CDMIDI && + imageInfo.MediaType != MediaType.CDV && + imageInfo.MediaType != MediaType.CDIREADY && + imageInfo.MediaType != MediaType.FMTOWNS && + imageInfo.MediaType != MediaType.PS1CD && + imageInfo.MediaType != MediaType.PS2CD && + imageInfo.MediaType != MediaType.MEGACD && + imageInfo.MediaType != MediaType.SATURNCD && + imageInfo.MediaType != MediaType.GDROM && + imageInfo.MediaType != MediaType.GDR && + imageInfo.MediaType != MediaType.MilCD && + imageInfo.MediaType != MediaType.SuperCDROM2 && + imageInfo.MediaType != MediaType.JaguarCD && + imageInfo.MediaType != MediaType.ThreeDO && + imageInfo.MediaType != MediaType.PCFX && + imageInfo.MediaType != MediaType.NeoGeoCD && + imageInfo.MediaType != MediaType.CDTV && + imageInfo.MediaType != MediaType.CD32 && + imageInfo.MediaType != MediaType.Playdia && + imageInfo.MediaType != MediaType.Pippin && + imageInfo.MediaType != MediaType.VideoNow && + imageInfo.MediaType != MediaType.VideoNowColor && + imageInfo.MediaType != MediaType.VideoNowXp) + foreach(Track track in Tracks) + { + track.TrackPregap = 0; + track.Indexes?.Clear(); + } + return true; } diff --git a/Aaru.Images/Alcohol120/Alcohol120.cs b/Aaru.Images/Alcohol120/Alcohol120.cs index 82fd3fec9..5cba02ed0 100644 --- a/Aaru.Images/Alcohol120/Alcohol120.cs +++ b/Aaru.Images/Alcohol120/Alcohol120.cs @@ -50,6 +50,7 @@ namespace Aaru.DiscImages FileStream descriptorStream; byte[] dmi; byte[] fullToc; + AlcoholHeader header; ImageInfo imageInfo; Stream imageStream; bool isDvd; @@ -61,14 +62,10 @@ namespace Aaru.DiscImages public Alcohol120() => imageInfo = new ImageInfo { ReadableSectorTags = new List(), ReadableMediaTags = new List(), - HasPartitions = true, HasSessions = true, Version = null, - Application = null, - ApplicationVersion = null, Creator = null, Comments = null, - MediaManufacturer = null, - MediaModel = null, MediaSerialNumber = null, MediaBarcode = null, - MediaPartNumber = null, - MediaSequence = 0, LastMediaSequence = 0, DriveManufacturer = null, - DriveModel = null, + HasPartitions = true, HasSessions = true, Version = null, Application = null, + ApplicationVersion = null, Creator = null, Comments = null, MediaManufacturer = null, + MediaModel = null, MediaSerialNumber = null, MediaBarcode = null, MediaPartNumber = null, + MediaSequence = 0, LastMediaSequence = 0, DriveManufacturer = null, DriveModel = null, DriveSerialNumber = null, DriveFirmwareRevision = null }; } diff --git a/Aaru.Images/Alcohol120/Properties.cs b/Aaru.Images/Alcohol120/Properties.cs index 44ef3d40d..5ee2c8cbb 100644 --- a/Aaru.Images/Alcohol120/Properties.cs +++ b/Aaru.Images/Alcohol120/Properties.cs @@ -108,6 +108,14 @@ namespace Aaru.DiscImages break; } + if(header.type != AlcoholMediumType.CD && + header.type != AlcoholMediumType.CDR && + header.type != AlcoholMediumType.CDRW) + { + aaruTrack.TrackPregap = 0; + aaruTrack.Indexes?.Clear(); + } + tracks.Add(aaruTrack); } diff --git a/Aaru.Images/Alcohol120/Read.cs b/Aaru.Images/Alcohol120/Read.cs index 3b74806a2..78b7908e8 100644 --- a/Aaru.Images/Alcohol120/Read.cs +++ b/Aaru.Images/Alcohol120/Read.cs @@ -62,7 +62,7 @@ namespace Aaru.DiscImages isDvd = false; byte[] hdr = new byte[88]; stream.Read(hdr, 0, 88); - AlcoholHeader header = Marshal.ByteArrayToStructureLittleEndian(hdr); + header = Marshal.ByteArrayToStructureLittleEndian(hdr); AaruConsole.DebugWriteLine("Alcohol 120% plugin", "header.signature = {0}", Encoding.ASCII.GetString(header.signature)); diff --git a/Aaru.Images/BlindWrite5/Read.cs b/Aaru.Images/BlindWrite5/Read.cs index d3f4f35dd..e3c61a6f3 100644 --- a/Aaru.Images/BlindWrite5/Read.cs +++ b/Aaru.Images/BlindWrite5/Read.cs @@ -1131,6 +1131,15 @@ namespace Aaru.DiscImages AaruConsole.VerboseWriteLine("BlindWrite image describes a disc of type {0}", imageInfo.MediaType); + if(header.profile != ProfileNumber.CDR && + header.profile != ProfileNumber.CDRW && + header.profile != ProfileNumber.CDROM) + foreach(Track track in Tracks) + { + track.TrackPregap = 0; + track.Indexes?.Clear(); + } + return true; } diff --git a/Aaru.Images/CDRWin/Properties.cs b/Aaru.Images/CDRWin/Properties.cs index ca6940dc5..f93c1d1cb 100644 --- a/Aaru.Images/CDRWin/Properties.cs +++ b/Aaru.Images/CDRWin/Properties.cs @@ -125,6 +125,50 @@ namespace Aaru.DiscImages else aaruTrack.TrackSubchannelType = TrackSubchannelType.None; + if(_imageInfo.MediaType != MediaType.CD && + _imageInfo.MediaType != MediaType.CDDA && + _imageInfo.MediaType != MediaType.CDG && + _imageInfo.MediaType != MediaType.CDEG && + _imageInfo.MediaType != MediaType.CDI && + _imageInfo.MediaType != MediaType.CDROM && + _imageInfo.MediaType != MediaType.CDROMXA && + _imageInfo.MediaType != MediaType.CDPLUS && + _imageInfo.MediaType != MediaType.CDMO && + _imageInfo.MediaType != MediaType.CDR && + _imageInfo.MediaType != MediaType.CDRW && + _imageInfo.MediaType != MediaType.CDMRW && + _imageInfo.MediaType != MediaType.VCD && + _imageInfo.MediaType != MediaType.SVCD && + _imageInfo.MediaType != MediaType.PCD && + _imageInfo.MediaType != MediaType.DTSCD && + _imageInfo.MediaType != MediaType.CDMIDI && + _imageInfo.MediaType != MediaType.CDV && + _imageInfo.MediaType != MediaType.CDIREADY && + _imageInfo.MediaType != MediaType.FMTOWNS && + _imageInfo.MediaType != MediaType.PS1CD && + _imageInfo.MediaType != MediaType.PS2CD && + _imageInfo.MediaType != MediaType.MEGACD && + _imageInfo.MediaType != MediaType.SATURNCD && + _imageInfo.MediaType != MediaType.GDROM && + _imageInfo.MediaType != MediaType.GDR && + _imageInfo.MediaType != MediaType.MilCD && + _imageInfo.MediaType != MediaType.SuperCDROM2 && + _imageInfo.MediaType != MediaType.JaguarCD && + _imageInfo.MediaType != MediaType.ThreeDO && + _imageInfo.MediaType != MediaType.PCFX && + _imageInfo.MediaType != MediaType.NeoGeoCD && + _imageInfo.MediaType != MediaType.CDTV && + _imageInfo.MediaType != MediaType.CD32 && + _imageInfo.MediaType != MediaType.Playdia && + _imageInfo.MediaType != MediaType.Pippin && + _imageInfo.MediaType != MediaType.VideoNow && + _imageInfo.MediaType != MediaType.VideoNowColor && + _imageInfo.MediaType != MediaType.VideoNowXp) + { + aaruTrack.TrackPregap = 0; + aaruTrack.Indexes?.Clear(); + } + tracks.Add(aaruTrack); previousStartSector = aaruTrack.TrackEndSector + 1; } diff --git a/Aaru.Images/DiscJuggler/Read.cs b/Aaru.Images/DiscJuggler/Read.cs index 7c2925345..934fa31cd 100644 --- a/Aaru.Images/DiscJuggler/Read.cs +++ b/Aaru.Images/DiscJuggler/Read.cs @@ -657,6 +657,8 @@ namespace Aaru.DiscImages AaruConsole.DebugWriteLine("DiscJuggler plugin", "End position = {0}", position); + imageInfo.MediaType = DecodeCdiMediumType(mediumType); + if(imageInfo.MediaType == MediaType.CDROM) { bool data = false; @@ -714,6 +716,13 @@ namespace Aaru.DiscImages _sectorBuilder = new SectorBuilder(); + if(mediumType != 152) + foreach(Track track in Tracks) + { + track.TrackPregap = 0; + track.Indexes?.Clear(); + } + return true; } diff --git a/Aaru.Images/Nero/Read.cs b/Aaru.Images/Nero/Read.cs index 910f6c258..83b3d6eeb 100644 --- a/Aaru.Images/Nero/Read.cs +++ b/Aaru.Images/Nero/Read.cs @@ -1090,6 +1090,51 @@ namespace Aaru.DiscImages _sectorBuilder = new SectorBuilder(); + if(imageInfo.MediaType != MediaType.CD && + imageInfo.MediaType != MediaType.CDDA && + imageInfo.MediaType != MediaType.CDG && + imageInfo.MediaType != MediaType.CDEG && + imageInfo.MediaType != MediaType.CDI && + imageInfo.MediaType != MediaType.CDROM && + imageInfo.MediaType != MediaType.CDROMXA && + imageInfo.MediaType != MediaType.CDPLUS && + imageInfo.MediaType != MediaType.CDMO && + imageInfo.MediaType != MediaType.CDR && + imageInfo.MediaType != MediaType.CDRW && + imageInfo.MediaType != MediaType.CDMRW && + imageInfo.MediaType != MediaType.VCD && + imageInfo.MediaType != MediaType.SVCD && + imageInfo.MediaType != MediaType.PCD && + imageInfo.MediaType != MediaType.DTSCD && + imageInfo.MediaType != MediaType.CDMIDI && + imageInfo.MediaType != MediaType.CDV && + imageInfo.MediaType != MediaType.CDIREADY && + imageInfo.MediaType != MediaType.FMTOWNS && + imageInfo.MediaType != MediaType.PS1CD && + imageInfo.MediaType != MediaType.PS2CD && + imageInfo.MediaType != MediaType.MEGACD && + imageInfo.MediaType != MediaType.SATURNCD && + imageInfo.MediaType != MediaType.GDROM && + imageInfo.MediaType != MediaType.GDR && + imageInfo.MediaType != MediaType.MilCD && + imageInfo.MediaType != MediaType.SuperCDROM2 && + imageInfo.MediaType != MediaType.JaguarCD && + imageInfo.MediaType != MediaType.ThreeDO && + imageInfo.MediaType != MediaType.PCFX && + imageInfo.MediaType != MediaType.NeoGeoCD && + imageInfo.MediaType != MediaType.CDTV && + imageInfo.MediaType != MediaType.CD32 && + imageInfo.MediaType != MediaType.Playdia && + imageInfo.MediaType != MediaType.Pippin && + imageInfo.MediaType != MediaType.VideoNow && + imageInfo.MediaType != MediaType.VideoNowColor && + imageInfo.MediaType != MediaType.VideoNowXp) + foreach(Track track in Tracks) + { + track.TrackPregap = 0; + track.Indexes?.Clear(); + } + return true; } catch