From 09a89fa51c3e339fb33cf06d64eadd24dd12aa2f Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 23 Jul 2021 12:02:20 +0100 Subject: [PATCH] Fix setting index sectors on multi-file CDRWin disc images. Fixes #643 --- Aaru.Images/CDRWin/Read.cs | 40 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/Aaru.Images/CDRWin/Read.cs b/Aaru.Images/CDRWin/Read.cs index 21db94a8c..b5957cd4d 100644 --- a/Aaru.Images/CDRWin/Read.cs +++ b/Aaru.Images/CDRWin/Read.cs @@ -1238,6 +1238,28 @@ namespace Aaru.DiscImages foreach(CdrWinTrack track in _discImage.Tracks) _imageInfo.ImageSize += track.Bps * track.Sectors; + int currentSector = 0; + int currentFileStartSector = 0; + string currentFilePath = ""; + + foreach(CdrWinTrack track in _discImage.Tracks) + { + if(track.TrackFile.DataFilter.GetBasePath() != currentFilePath) + { + currentFileStartSector = currentSector; + currentFilePath = track.TrackFile.DataFilter.GetBasePath(); + } + + Dictionary newIndexes = new Dictionary(); + + foreach(KeyValuePair index in track.Indexes) + newIndexes[index.Key] = index.Value + currentFileStartSector; + + track.Indexes = newIndexes; + + currentSector += (int)track.Sectors; + } + for(int s = 0; s < sessions.Length; s++) { if(!_discImage.Tracks[(int)sessions[s].StartTrack - 1].Indexes. @@ -1287,8 +1309,6 @@ namespace Aaru.DiscImages Partitions = new List(); ulong partitionSequence = 0; - ulong previousPartitionsSize = 0; - string previousFile = _discImage.Tracks[0].TrackFile.DataFilter.GetBasePath(); _offsetMap = new Dictionary(); @@ -1315,27 +1335,17 @@ namespace Aaru.DiscImages partitionSequence++; - if(_discImage.Tracks[i].TrackFile.DataFilter.GetBasePath() != previousFile) - { - previousPartitionsSize += _discImage.Tracks[i - 1].Sectors; - previousFile = _discImage.Tracks[i].TrackFile.DataFilter.GetBasePath(); - } - if(_discImage.Tracks[i].Indexes.TryGetValue(0, out int idx0)) - _offsetMap.Add(_discImage.Tracks[i].Sequence, (ulong)idx0 + previousPartitionsSize); + _offsetMap.Add(_discImage.Tracks[i].Sequence, (ulong)idx0); else if(_discImage.IsRedumpGigadisc && _discImage.Tracks[i].Sequence == 3) - { _offsetMap.Add(_discImage.Tracks[i].Sequence, gdRomSession2Offset); - previousPartitionsSize = gdRomSession2Offset; - } else if(_discImage.Tracks[i].Sequence > 1) _offsetMap.Add(_discImage.Tracks[i].Sequence, - (ulong)(_discImage.Tracks[i].Indexes[1] - _discImage.Tracks[i].Pregap) + - previousPartitionsSize); + (ulong)(_discImage.Tracks[i].Indexes[1] - _discImage.Tracks[i].Pregap)); else _offsetMap.Add(_discImage.Tracks[i].Sequence, - (ulong)_discImage.Tracks[i].Indexes[1] + previousPartitionsSize); + (ulong)_discImage.Tracks[i].Indexes[1]); Partitions.Add(partition); }