mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix multisession BlindWrite 5/6 images.
This commit is contained in:
@@ -615,6 +615,7 @@ namespace Aaru.DiscImages
|
||||
chars.SectorSize = sectorSize;
|
||||
chars.StartLba = dataFile.StartLba;
|
||||
chars.Sectors = dataFile.Sectors;
|
||||
chars.Offset = dataFile.Offset;
|
||||
|
||||
filePaths.Add(chars);
|
||||
}
|
||||
@@ -778,7 +779,8 @@ namespace Aaru.DiscImages
|
||||
track.TrackFile = chars.FileFilter.GetFilename();
|
||||
|
||||
if(trk.startLba >= 0)
|
||||
track.TrackFileOffset = (ulong)((trk.startLba - chars.StartLba) * chars.SectorSize);
|
||||
track.TrackFileOffset =
|
||||
(ulong)((trk.startLba - chars.StartLba) * chars.SectorSize) + chars.Offset;
|
||||
else
|
||||
track.TrackFileOffset = (ulong)(trk.startLba * -1 * chars.SectorSize);
|
||||
|
||||
@@ -828,6 +830,9 @@ namespace Aaru.DiscImages
|
||||
|
||||
offsetBytes += partition.Size;
|
||||
|
||||
if(track.TrackStartSector >= trk.pregap)
|
||||
track.TrackStartSector -= trk.pregap;
|
||||
|
||||
Tracks.Add(track);
|
||||
Partitions.Add(partition);
|
||||
offsetmap.Add(track.TrackSequence, track.TrackStartSector);
|
||||
@@ -1230,7 +1235,6 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
// TODO: Cross data files
|
||||
var aaruTrack = new Track();
|
||||
var chars = new DataFileCharacteristics();
|
||||
|
||||
aaruTrack.TrackSequence = 0;
|
||||
|
||||
@@ -1248,16 +1252,12 @@ namespace Aaru.DiscImages
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
$"Requested more sectors ({length + sectorAddress}) than present in track ({aaruTrack.TrackEndSector}), won't cross tracks");
|
||||
|
||||
foreach(DataFileCharacteristics characteristics in filePaths.Where(characteristics =>
|
||||
(long)sectorAddress >=
|
||||
characteristics.StartLba &&
|
||||
length < (ulong)characteristics.
|
||||
Sectors - sectorAddress))
|
||||
{
|
||||
chars = characteristics;
|
||||
|
||||
break;
|
||||
}
|
||||
DataFileCharacteristics chars = (from characteristics in filePaths let firstSector =
|
||||
characteristics.StartLba let lastSector =
|
||||
(firstSector + characteristics.Sectors) - 1 let wantedSector =
|
||||
(int)(sectorAddress + aaruTrack.TrackStartSector)
|
||||
where wantedSector >= firstSector && wantedSector <= lastSector
|
||||
select characteristics).FirstOrDefault();
|
||||
|
||||
if(string.IsNullOrEmpty(chars.FilePath) ||
|
||||
chars.FileFilter == null)
|
||||
@@ -1369,7 +1369,6 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
// TODO: Cross data files
|
||||
var aaruTrack = new Track();
|
||||
var chars = new DataFileCharacteristics();
|
||||
|
||||
aaruTrack.TrackSequence = 0;
|
||||
|
||||
@@ -1387,16 +1386,12 @@ namespace Aaru.DiscImages
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
$"Requested more sectors ({length + sectorAddress}) than present in track ({aaruTrack.TrackEndSector}), won't cross tracks");
|
||||
|
||||
foreach(DataFileCharacteristics characteristics in filePaths.Where(characteristics =>
|
||||
(long)sectorAddress >=
|
||||
characteristics.StartLba &&
|
||||
length < (ulong)characteristics.
|
||||
Sectors - sectorAddress))
|
||||
{
|
||||
chars = characteristics;
|
||||
|
||||
break;
|
||||
}
|
||||
DataFileCharacteristics chars = (from characteristics in filePaths let firstSector =
|
||||
characteristics.StartLba let lastSector =
|
||||
(firstSector + characteristics.Sectors) - 1 let wantedSector =
|
||||
(int)(sectorAddress + aaruTrack.TrackStartSector)
|
||||
where wantedSector >= firstSector && wantedSector <= lastSector
|
||||
select characteristics).FirstOrDefault();
|
||||
|
||||
if(string.IsNullOrEmpty(chars.FilePath) ||
|
||||
chars.FileFilter == null)
|
||||
@@ -1706,7 +1701,6 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
// TODO: Cross data files
|
||||
var aaruTrack = new Track();
|
||||
var chars = new DataFileCharacteristics();
|
||||
|
||||
aaruTrack.TrackSequence = 0;
|
||||
|
||||
@@ -1724,16 +1718,12 @@ namespace Aaru.DiscImages
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
$"Requested more sectors ({length + sectorAddress}) than present in track ({aaruTrack.TrackEndSector}), won't cross tracks");
|
||||
|
||||
foreach(DataFileCharacteristics characteristics in filePaths.Where(characteristics =>
|
||||
(long)sectorAddress >=
|
||||
characteristics.StartLba &&
|
||||
length < (ulong)characteristics.
|
||||
Sectors - sectorAddress))
|
||||
{
|
||||
chars = characteristics;
|
||||
|
||||
break;
|
||||
}
|
||||
DataFileCharacteristics chars = (from characteristics in filePaths let firstSector =
|
||||
characteristics.StartLba let lastSector =
|
||||
(firstSector + characteristics.Sectors) - 1 let wantedSector =
|
||||
(int)(sectorAddress + aaruTrack.TrackStartSector)
|
||||
where wantedSector >= firstSector && wantedSector <= lastSector
|
||||
select characteristics).FirstOrDefault();
|
||||
|
||||
if(string.IsNullOrEmpty(chars.FilePath) ||
|
||||
chars.FileFilter == null)
|
||||
|
||||
@@ -162,6 +162,7 @@ namespace Aaru.DiscImages
|
||||
public long SectorSize;
|
||||
public int StartLba;
|
||||
public int Sectors;
|
||||
public uint Offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user