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