mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix setting index sectors on multi-file CDRWin disc images. Fixes #643
This commit is contained in:
@@ -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<ushort, int> newIndexes = new Dictionary<ushort, int>();
|
||||
|
||||
foreach(KeyValuePair<ushort, int> 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<Partition>();
|
||||
|
||||
ulong partitionSequence = 0;
|
||||
ulong previousPartitionsSize = 0;
|
||||
string previousFile = _discImage.Tracks[0].TrackFile.DataFilter.GetBasePath();
|
||||
|
||||
_offsetMap = new Dictionary<uint, ulong>();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user