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); }