1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-21 09:27:59 +02:00

Substream fixes

This commit is contained in:
Brian Fiete 2021-01-31 05:26:09 -08:00
parent 0576e74d58
commit 9c473dc269

View file

@ -8,16 +8,18 @@ namespace System.IO
Stream mChildStream ~ { if (mOwnsStream) delete _; };
int64 mOffset;
int64 mLength;
int64 mPosition;
public override int64 Position
{
get
{
return mChildStream.Position + mOffset;
return mPosition;
}
set
{
mPosition = value;
mChildStream.Position = value + mOffset;
}
}
@ -50,6 +52,7 @@ namespace System.IO
public this(Stream childStream, int64 offset, int64 length, bool ownsStream = false)
{
mChildStream = childStream;
mChildStream.Position = offset;
mOffset = offset;
mLength = length;
mOwnsStream = ownsStream;
@ -57,12 +60,38 @@ namespace System.IO
public override Result<int> TryRead(Span<uint8> data)
{
return mChildStream.TryRead(data);
var tryData = data;
if (mPosition + data.Length > mLength)
{
tryData.Length = mLength - mPosition;
}
switch (mChildStream.TryRead(tryData))
{
case .Ok(let len):
mPosition += len;
return .Ok(len);
case .Err(let err):
return .Err(err);
}
}
public override Result<int> TryWrite(Span<uint8> data)
{
return mChildStream.TryWrite(data);
var tryData = data;
if (mPosition + data.Length > mLength)
{
tryData.Length = mLength - mPosition;
}
switch (mChildStream.TryWrite(tryData))
{
case .Ok(let len):
mPosition += len;
return .Ok(len);
case .Err(let err):
return .Err(err);
}
}
public override void Close()