aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/HomebrewRomFsStream.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/HomebrewRomFsStream.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/HomebrewRomFsStream.cs77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/HomebrewRomFsStream.cs b/src/Ryujinx.HLE/HOS/HomebrewRomFsStream.cs
new file mode 100644
index 00000000..59bc881f
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/HomebrewRomFsStream.cs
@@ -0,0 +1,77 @@
+using System;
+using System.IO;
+
+namespace Ryujinx.HLE.HOS
+{
+ class HomebrewRomFsStream : Stream
+ {
+ private Stream _baseStream;
+ private long _positionOffset;
+
+ public HomebrewRomFsStream(Stream baseStream, long positionOffset)
+ {
+ _baseStream = baseStream;
+ _positionOffset = positionOffset;
+
+ _baseStream.Position = _positionOffset;
+ }
+
+ public override bool CanRead => _baseStream.CanRead;
+
+ public override bool CanSeek => _baseStream.CanSeek;
+
+ public override bool CanWrite => false;
+
+ public override long Length => _baseStream.Length - _positionOffset;
+
+ public override long Position
+ {
+ get
+ {
+ return _baseStream.Position - _positionOffset;
+ }
+ set
+ {
+ _baseStream.Position = value + _positionOffset;
+ }
+ }
+
+ public override void Flush()
+ {
+ _baseStream.Flush();
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ return _baseStream.Read(buffer, offset, count);
+ }
+
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ if (origin == SeekOrigin.Begin)
+ {
+ offset += _positionOffset;
+ }
+
+ return _baseStream.Seek(offset, origin);
+ }
+
+ public override void SetLength(long value)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ _baseStream.Dispose();
+ }
+ }
+ }
+}