From ed3faba0c50b193379324e9fcfde36dc09005a89 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 4 Nov 2020 01:52:28 +0000 Subject: [PATCH] Fix disc size calculation in BlindWrite images. --- Aaru.Images/BlindWrite4/Read.cs | 148 ++++++++++++++------------------ Aaru.Images/BlindWrite5/Read.cs | 4 +- 2 files changed, 66 insertions(+), 86 deletions(-) diff --git a/Aaru.Images/BlindWrite4/Read.cs b/Aaru.Images/BlindWrite4/Read.cs index a22d68365..cf6573289 100644 --- a/Aaru.Images/BlindWrite4/Read.cs +++ b/Aaru.Images/BlindWrite4/Read.cs @@ -202,7 +202,7 @@ namespace Aaru.DiscImages // This is off by one track.lastSector--; - + stream.Read(tmpUInt, 0, 4); track.pregap = BitConverter.ToInt32(tmpUInt, 0); stream.Read(tmpUInt, 0, 4); @@ -399,54 +399,44 @@ namespace Aaru.DiscImages _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile.ToLower(CultureInfo. - CurrentCulture))); + CurrentCulture))); if(_dataFilter != null) break; _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile.ToUpper(CultureInfo. - CurrentCulture))); + CurrentCulture))); if(_dataFilter != null) break; - _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. - DataFile.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last())); + _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile. + Split(new[] + { + '\\' + }, StringSplitOptions.RemoveEmptyEntries). + Last())); if(_dataFilter != null) break; - _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. - DataFile.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last(). - ToLower(CultureInfo. - CurrentCulture))); + _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile. + Split(new[] + { + '\\' + }, StringSplitOptions.RemoveEmptyEntries). + Last().ToLower(CultureInfo.CurrentCulture))); if(_dataFilter != null) break; - _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. - DataFile.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last(). - ToUpper(CultureInfo. - CurrentCulture))); + _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile. + Split(new[] + { + '\\' + }, StringSplitOptions.RemoveEmptyEntries). + Last().ToUpper(CultureInfo.CurrentCulture))); if(_dataFilter != null) break; @@ -467,32 +457,21 @@ namespace Aaru.DiscImages ) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.SubchannelFile. ToUpper(CultureInfo.CurrentCulture)))) ?? - filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. - SubchannelFile.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last())) - ) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. - SubchannelFile.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last().ToLower(CultureInfo. - CurrentCulture))) - ) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. - SubchannelFile.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last().ToUpper(CultureInfo. - CurrentCulture))); + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.SubchannelFile. + Split(new[] + { + '\\' + }, StringSplitOptions.RemoveEmptyEntries).Last()))) ?? + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.SubchannelFile. + Split(new[] + { + '\\' + }, StringSplitOptions.RemoveEmptyEntries).Last(). + ToLower(CultureInfo.CurrentCulture)))) ?? + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.SubchannelFile.Split(new[] + { + '\\' + }, StringSplitOptions.RemoveEmptyEntries).Last().ToUpper(CultureInfo.CurrentCulture))); } Tracks = new List(); @@ -522,7 +501,7 @@ namespace Aaru.DiscImages track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), bwTrack.filename.ToLower(CultureInfo. - CurrentCulture))); + CurrentCulture))); if(track.TrackFilter != null) break; @@ -530,47 +509,45 @@ namespace Aaru.DiscImages track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), bwTrack.filename.ToUpper(CultureInfo. - CurrentCulture))); + CurrentCulture))); if(track.TrackFilter != null) break; track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - bwTrack.filename.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last())); + bwTrack.filename.Split(new[] + { + '\\' + }, + StringSplitOptions. + RemoveEmptyEntries). + Last())); if(track.TrackFilter != null) break; track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - bwTrack.filename.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last(). - ToLower(CultureInfo. - CurrentCulture))); + bwTrack.filename.Split(new[] + { + '\\' + }, + StringSplitOptions. + RemoveEmptyEntries). + Last(). + ToLower(CultureInfo.CurrentCulture))); if(track.TrackFilter != null) break; track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - bwTrack.filename.Split(new[] - { - '\\' - }, - StringSplitOptions. - RemoveEmptyEntries). - Last(). - ToUpper(CultureInfo. - CurrentCulture))); + bwTrack.filename.Split(new[] + { + '\\' + }, + StringSplitOptions. + RemoveEmptyEntries). + Last(). + ToUpper(CultureInfo.CurrentCulture))); track.TrackFilter = _dataFilter; } while(true); @@ -703,7 +680,8 @@ namespace Aaru.DiscImages if(!_trackFlags.ContainsKey(track.TrackSequence)) _trackFlags.Add(track.TrackSequence, (byte)(bwTrack.adrCtl & 0x0F)); - _imageInfo.Sectors += (ulong)((bwTrack.lastSector - bwTrack.startSector) + 1); + if(bwTrack.lastSector > _imageInfo.Sectors) + _imageInfo.Sectors = bwTrack.lastSector + 1; } else { diff --git a/Aaru.Images/BlindWrite5/Read.cs b/Aaru.Images/BlindWrite5/Read.cs index fb1c15c12..7ff3c191d 100644 --- a/Aaru.Images/BlindWrite5/Read.cs +++ b/Aaru.Images/BlindWrite5/Read.cs @@ -831,10 +831,12 @@ namespace Aaru.DiscImages if(track.TrackStartSector >= trk.pregap) track.TrackStartSector -= trk.pregap; + if(track.TrackEndSector > _imageInfo.Sectors) + _imageInfo.Sectors = track.TrackEndSector + 1; + Tracks.Add(track); Partitions.Add(partition); _offsetmap.Add(track.TrackSequence, track.TrackStartSector); - _imageInfo.Sectors += partition.Length; } }