From b69dad87b2a6b5926c33e3c69a821e8da13e8ba0 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 14 Dec 2022 02:24:02 +0000 Subject: [PATCH] [CompactDisc dumping] Correct offset fixing when trimming or re-reading errored audio sectors. Fixes #792 --- Aaru.Core/Devices/Dumping/CompactDisc/Error.cs | 11 ++++++++--- Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs index 021783245..e31a9d254 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Error.cs @@ -243,10 +243,15 @@ partial class Dump audioExtents.Contains(badSector) && offsetBytes != 0) { - if(offsetBytes > 0) - badSectorToReRead -= (uint)sectorsForOffset; + if(offsetBytes < 0) + { + if(badSectorToReRead == 0) + badSectorToReRead = uint.MaxValue - (uint)(sectorsForOffset - 1); // -1 + else + badSectorToReRead -= (uint)sectorsForOffset; + } - sectorsToReRead = (byte)(sectorsForOffset + 1); + sectorsToReRead += (byte)sectorsForOffset; } if(_supportsPlextorD8 && audioExtents.Contains(badSector)) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs index dbd090c7b..74e1551ac 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Trim.cs @@ -137,10 +137,15 @@ partial class Dump audioExtents.Contains(badSector) && offsetBytes != 0) { - if(offsetBytes > 0) - badSectorToRead -= (uint)sectorsForOffset; + if(offsetBytes < 0) + { + if(badSectorToRead == 0) + badSectorToRead = uint.MaxValue - (uint)(sectorsForOffset - 1); // -1 + else + badSectorToRead -= (uint)sectorsForOffset; + } - sectorsToTrim = (byte)(sectorsForOffset + 1); + sectorsToTrim += (byte)sectorsForOffset; } if(_supportsPlextorD8 && audioExtents.Contains(badSector))