46 lines
1.0 KiB
C#
46 lines
1.0 KiB
C#
using System;
|
|
|
|
//I have an ff9 disc which is truncated
|
|
|
|
namespace BizHawk.Emulation.DiscSystem
|
|
{
|
|
public partial class Disc : IDisposable
|
|
{
|
|
internal sealed class Blob_ZeroPadAdapter : IBlob
|
|
{
|
|
IBlob srcBlob;
|
|
long srcBlobLength;
|
|
public Blob_ZeroPadAdapter(IBlob srcBlob, long srcBlobLength)
|
|
{
|
|
this.srcBlob = srcBlob;
|
|
this.srcBlobLength = srcBlobLength;
|
|
}
|
|
|
|
public int Read(long byte_pos, byte[] buffer, int offset, int count)
|
|
{
|
|
int todo = count;
|
|
long end = byte_pos + todo;
|
|
if (end > srcBlobLength)
|
|
{
|
|
long temp = (int)(srcBlobLength - byte_pos);
|
|
if (temp > int.MaxValue)
|
|
throw new InvalidOperationException();
|
|
todo = (int)temp;
|
|
|
|
//zero-fill the unused part (just for safety's sake)
|
|
Array.Clear(buffer, offset + todo, count - todo);
|
|
}
|
|
|
|
srcBlob.Read(byte_pos, buffer, offset, todo);
|
|
|
|
//since it's zero padded, this never fails and always reads the requested amount
|
|
return count;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
}
|
|
}
|
|
|
|
}
|
|
} |