🐛Fix writing subchannel on Alcohol and CDRDAO.

This commit is contained in:
2018-01-25 23:29:54 +00:00
parent 9dff1f8a54
commit 8dc2c5043f
2 changed files with 49 additions and 30 deletions

View File

@@ -1615,16 +1615,9 @@ namespace DiscImageChef.DiscImages
return false;
}
if(track.TrackSubchannelType != TrackSubchannelType.None)
{
ErrorMessage = "Invalid subchannel mode for this sector";
return false;
}
imageStream.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)track.TrackRawBytesPerSector),
SeekOrigin.Begin);
imageStream.Write(data, 0, data.Length);
return true;
}
@@ -1664,17 +1657,33 @@ namespace DiscImageChef.DiscImages
return false;
}
if(track.TrackSubchannelType != TrackSubchannelType.None)
switch(track.TrackSubchannelType)
{
ErrorMessage = "Invalid subchannel mode for this sector";
return false;
}
imageStream.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)track.TrackRawBytesPerSector),
case TrackSubchannelType.None:
imageStream
.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)track.TrackRawBytesPerSector),
SeekOrigin.Begin);
imageStream.Write(data, 0, data.Length);
ErrorMessage = "";
return true;
case TrackSubchannelType.Raw:
case TrackSubchannelType.RawInterleaved:
imageStream
.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)(track.TrackRawBytesPerSector + 96)),
SeekOrigin.Begin);
for(uint i = 0; i < length; i++)
{
imageStream.Write(data, (int)(i * track.TrackRawBytesPerSector), track.TrackRawBytesPerSector);
imageStream.Position += 96;
}
ErrorMessage = "";
return true;
default:
ErrorMessage = "Invalid subchannel mode for this sector";
return false;
}
}
public bool WriteSectorLong(byte[] data, ulong sectorAddress)

View File

@@ -1610,12 +1610,6 @@ namespace DiscImageChef.DiscImages
return false;
}
if(track.TrackSubchannelType != TrackSubchannelType.None)
{
ErrorMessage = "Invalid subchannel mode for this sector";
return false;
}
trackStream.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)track.TrackRawBytesPerSector),
SeekOrigin.Begin);
trackStream.Write(data, 0, data.Length);
@@ -1667,17 +1661,33 @@ namespace DiscImageChef.DiscImages
return false;
}
if(track.TrackSubchannelType != TrackSubchannelType.None)
switch(track.TrackSubchannelType)
{
ErrorMessage = "Invalid subchannel mode for this sector";
return false;
}
trackStream.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)track.TrackRawBytesPerSector),
case TrackSubchannelType.None:
trackStream
.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)track.TrackRawBytesPerSector),
SeekOrigin.Begin);
trackStream.Write(data, 0, data.Length);
ErrorMessage = "";
return true;
case TrackSubchannelType.Raw:
case TrackSubchannelType.RawInterleaved:
trackStream
.Seek((long)(track.TrackFileOffset + (sectorAddress - track.TrackStartSector) * (ulong)(track.TrackRawBytesPerSector + 96)),
SeekOrigin.Begin);
for(uint i = 0; i < length; i++)
{
trackStream.Write(data, (int)(i * track.TrackRawBytesPerSector), track.TrackRawBytesPerSector);
trackStream.Position += 96;
}
ErrorMessage = "";
return true;
default:
ErrorMessage = "Invalid subchannel mode for this sector";
return false;
}
}
public bool WriteSectorLong(byte[] data, ulong sectorAddress)