From 75e5487535f64657f29c2a13dbd3846f54155fbe Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 11 Jul 2021 19:23:18 +0100 Subject: [PATCH] Fix file offsets when reading multisession CloneCD disc images. --- Aaru.Images/CloneCD/Read.cs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Aaru.Images/CloneCD/Read.cs b/Aaru.Images/CloneCD/Read.cs index e4eb1b536..32239b91d 100644 --- a/Aaru.Images/CloneCD/Read.cs +++ b/Aaru.Images/CloneCD/Read.cs @@ -547,13 +547,30 @@ namespace Aaru.DiscImages { tmpTrack.TrackFileOffset = currentDataOffset; - currentDataOffset += 2352 * (tmpTrack.TrackEndSector - tmpTrack.TrackStartSector + 1); + currentDataOffset += 2352 * (tmpTrack.TrackEndSector - (ulong)tmpTrack.Indexes[1] + 1); if(_subFilter != null) { tmpTrack.TrackSubchannelOffset = currentSubchannelOffset; - currentSubchannelOffset += 96 * (tmpTrack.TrackEndSector - tmpTrack.TrackStartSector + 1); + currentSubchannelOffset += 96 * (tmpTrack.TrackEndSector - (ulong)tmpTrack.Indexes[1] + 1); + } + + if(tmpTrack.Indexes.TryGetValue(0, out int idx0)) + { + if(idx0 < 0) + { + tmpTrack.TrackFileOffset = 0; + tmpTrack.TrackSubchannelOffset = 0; + } + else + { + int indexDifference = tmpTrack.Indexes[1] - idx0; + tmpTrack.TrackFileOffset -= (ulong)(2352 * indexDifference); + + if(_subFilter != null) + tmpTrack.TrackSubchannelOffset -= (ulong)(96 * indexDifference); + } } if(tmpTrack.TrackType == TrackType.Data)