Fix disc size calculation in BlindWrite images.

This commit is contained in:
2020-11-04 01:52:28 +00:00
parent 532b2adddc
commit ed3faba0c5
2 changed files with 66 additions and 86 deletions

View File

@@ -399,54 +399,44 @@ namespace Aaru.DiscImages
_dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
_header.DataFile.ToLower(CultureInfo. _header.DataFile.ToLower(CultureInfo.
CurrentCulture))); CurrentCulture)));
if(_dataFilter != null) if(_dataFilter != null)
break; break;
_dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
_header.DataFile.ToUpper(CultureInfo. _header.DataFile.ToUpper(CultureInfo.
CurrentCulture))); CurrentCulture)));
if(_dataFilter != null) if(_dataFilter != null)
break; break;
_dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile.
DataFile.Split(new[] Split(new[]
{ {
'\\' '\\'
}, }, StringSplitOptions.RemoveEmptyEntries).
StringSplitOptions. Last()));
RemoveEmptyEntries).
Last()));
if(_dataFilter != null) if(_dataFilter != null)
break; break;
_dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile.
DataFile.Split(new[] Split(new[]
{ {
'\\' '\\'
}, }, StringSplitOptions.RemoveEmptyEntries).
StringSplitOptions. Last().ToLower(CultureInfo.CurrentCulture)));
RemoveEmptyEntries).
Last().
ToLower(CultureInfo.
CurrentCulture)));
if(_dataFilter != null) if(_dataFilter != null)
break; break;
_dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. _dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.DataFile.
DataFile.Split(new[] Split(new[]
{ {
'\\' '\\'
}, }, StringSplitOptions.RemoveEmptyEntries).
StringSplitOptions. Last().ToUpper(CultureInfo.CurrentCulture)));
RemoveEmptyEntries).
Last().
ToUpper(CultureInfo.
CurrentCulture)));
if(_dataFilter != null) if(_dataFilter != null)
break; break;
@@ -467,32 +457,21 @@ namespace Aaru.DiscImages
) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), ) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
_header.SubchannelFile. _header.SubchannelFile.
ToUpper(CultureInfo.CurrentCulture)))) ?? ToUpper(CultureInfo.CurrentCulture)))) ??
filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header. filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.SubchannelFile.
SubchannelFile.Split(new[] Split(new[]
{ {
'\\' '\\'
}, }, StringSplitOptions.RemoveEmptyEntries).Last()))) ??
StringSplitOptions. filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.SubchannelFile.
RemoveEmptyEntries). Split(new[]
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). }, StringSplitOptions.RemoveEmptyEntries).Last().ToUpper(CultureInfo.CurrentCulture)));
Last().ToLower(CultureInfo.
CurrentCulture)))
) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), _header.
SubchannelFile.Split(new[]
{
'\\'
},
StringSplitOptions.
RemoveEmptyEntries).
Last().ToUpper(CultureInfo.
CurrentCulture)));
} }
Tracks = new List<Track>(); Tracks = new List<Track>();
@@ -522,7 +501,7 @@ namespace Aaru.DiscImages
track.TrackFilter = track.TrackFilter =
filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
bwTrack.filename.ToLower(CultureInfo. bwTrack.filename.ToLower(CultureInfo.
CurrentCulture))); CurrentCulture)));
if(track.TrackFilter != null) if(track.TrackFilter != null)
break; break;
@@ -530,47 +509,45 @@ namespace Aaru.DiscImages
track.TrackFilter = track.TrackFilter =
filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
bwTrack.filename.ToUpper(CultureInfo. bwTrack.filename.ToUpper(CultureInfo.
CurrentCulture))); CurrentCulture)));
if(track.TrackFilter != null) if(track.TrackFilter != null)
break; break;
track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
bwTrack.filename.Split(new[] bwTrack.filename.Split(new[]
{ {
'\\' '\\'
}, },
StringSplitOptions. StringSplitOptions.
RemoveEmptyEntries). RemoveEmptyEntries).
Last())); Last()));
if(track.TrackFilter != null) if(track.TrackFilter != null)
break; break;
track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
bwTrack.filename.Split(new[] bwTrack.filename.Split(new[]
{ {
'\\' '\\'
}, },
StringSplitOptions. StringSplitOptions.
RemoveEmptyEntries). RemoveEmptyEntries).
Last(). Last().
ToLower(CultureInfo. ToLower(CultureInfo.CurrentCulture)));
CurrentCulture)));
if(track.TrackFilter != null) if(track.TrackFilter != null)
break; break;
track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), track.TrackFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(),
bwTrack.filename.Split(new[] bwTrack.filename.Split(new[]
{ {
'\\' '\\'
}, },
StringSplitOptions. StringSplitOptions.
RemoveEmptyEntries). RemoveEmptyEntries).
Last(). Last().
ToUpper(CultureInfo. ToUpper(CultureInfo.CurrentCulture)));
CurrentCulture)));
track.TrackFilter = _dataFilter; track.TrackFilter = _dataFilter;
} while(true); } while(true);
@@ -703,7 +680,8 @@ namespace Aaru.DiscImages
if(!_trackFlags.ContainsKey(track.TrackSequence)) if(!_trackFlags.ContainsKey(track.TrackSequence))
_trackFlags.Add(track.TrackSequence, (byte)(bwTrack.adrCtl & 0x0F)); _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 else
{ {

View File

@@ -831,10 +831,12 @@ namespace Aaru.DiscImages
if(track.TrackStartSector >= trk.pregap) if(track.TrackStartSector >= trk.pregap)
track.TrackStartSector -= trk.pregap; track.TrackStartSector -= trk.pregap;
if(track.TrackEndSector > _imageInfo.Sectors)
_imageInfo.Sectors = track.TrackEndSector + 1;
Tracks.Add(track); Tracks.Add(track);
Partitions.Add(partition); Partitions.Add(partition);
_offsetmap.Add(track.TrackSequence, track.TrackStartSector); _offsetmap.Add(track.TrackSequence, track.TrackStartSector);
_imageInfo.Sectors += partition.Length;
} }
} }