diff options
Diffstat (limited to 'Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs')
| -rw-r--r-- | Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs b/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs new file mode 100644 index 000000000..ef2993fa6 --- /dev/null +++ b/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs @@ -0,0 +1,139 @@ +using System; +using System.IO; + +namespace SharpCifs.Util.Sharpen +{ + internal class WrappedSystemStream : Stream + { + private InputStream _ist; + private OutputStream _ost; + int _position; + int _markedPosition; + + public WrappedSystemStream (InputStream ist) + { + this._ist = ist; + } + + public WrappedSystemStream (OutputStream ost) + { + this._ost = ost; + } + + public InputStream InputStream { + get { return _ist; } + } + + public OutputStream OutputStream { + get { return _ost; } + } + + public void Close() //remove `override` + { + if (_ist != null) { + //Stream.`Close` method deleted + //_ist.Close (); + _ist.Dispose(); + } + if (_ost != null) { + //Stream.`Close` method deleted + //_ost.Close (); + _ost.Dispose(); + } + } + + public override void Flush () + { + _ost.Flush (); + } + + public override int Read (byte[] buffer, int offset, int count) + { + int res = _ist.Read (buffer, offset, count); + if (res != -1) { + _position += res; + return res; + } + return 0; + } + + public override int ReadByte () + { + int res = _ist.Read (); + if (res != -1) + _position++; + return res; + } + + public override long Seek (long offset, SeekOrigin origin) + { + if (origin == SeekOrigin.Begin) + Position = offset; + else if (origin == SeekOrigin.Current) + Position = Position + offset; + else if (origin == SeekOrigin.End) + Position = Length + offset; + return Position; + } + + public override void SetLength (long value) + { + throw new NotSupportedException (); + } + + public override void Write (byte[] buffer, int offset, int count) + { + _ost.Write (buffer, offset, count); + _position += count; + } + + public override void WriteByte (byte value) + { + _ost.Write (value); + _position++; + } + + public override bool CanRead { + get { return (_ist != null); } + } + + public override bool CanSeek { + get { return true; } + } + + public override bool CanWrite { + get { return (_ost != null); } + } + + public override long Length { + get { return _ist.Length; } + } + + internal void OnMark (int nb) + { + _markedPosition = _position; + _ist.Mark (nb); + } + + public override long Position { + get + { + if (_ist != null && _ist.CanSeek ()) + return _ist.Position; + return _position; + } + set + { + if (value == _position) + return; + if (value == _markedPosition) + _ist.Reset (); + else if (_ist != null && _ist.CanSeek ()) { + _ist.Position = value; + } + else + throw new NotSupportedException (); + } + } + } +} |
