From 38cc4c32a9c356caa552ba74d0fde5fe64990df5 Mon Sep 17 00:00:00 2001 From: morkt Date: Sat, 8 Oct 2016 05:02:48 +0400 Subject: [PATCH] (XoredStream): moved to CommonStreams. --- ArcFormats/CommonStreams.cs | 51 ++++++++++++++++ ArcFormats/ScenePlayer/ImagePMP.cs | 97 ------------------------------ 2 files changed, 51 insertions(+), 97 deletions(-) diff --git a/ArcFormats/CommonStreams.cs b/ArcFormats/CommonStreams.cs index fdc0523c..57f094ba 100644 --- a/ArcFormats/CommonStreams.cs +++ b/ArcFormats/CommonStreams.cs @@ -393,4 +393,55 @@ namespace GameRes.Formats } #endregion } + + public class XoredStream : ProxyStream + { + private byte m_key; + + public XoredStream (Stream stream, byte key, bool leave_open = false) + : base (stream, leave_open) + { + m_key = key; + } + + #region System.IO.Stream methods + public override int Read (byte[] buffer, int offset, int count) + { + int read = BaseStream.Read (buffer, offset, count); + for (int i = 0; i < read; ++i) + { + buffer[offset+i] ^= m_key; + } + return read; + } + + public override int ReadByte () + { + int b = BaseStream.ReadByte(); + if (-1 != b) + { + b ^= m_key; + } + return b; + } + + byte[] write_buf; + + public override void Write (byte[] buffer, int offset, int count) + { + if (null == write_buf || write_buf.Length < count) + write_buf = new byte[count]; + for (int i = 0; i < count; ++i) + { + write_buf[i] = (byte)(buffer[offset+i] ^ m_key); + } + BaseStream.Write (write_buf, 0, count); + } + + public override void WriteByte (byte value) + { + BaseStream.WriteByte ((byte)(value ^ m_key)); + } + #endregion + } } diff --git a/ArcFormats/ScenePlayer/ImagePMP.cs b/ArcFormats/ScenePlayer/ImagePMP.cs index 870d3f42..0b204c8d 100644 --- a/ArcFormats/ScenePlayer/ImagePMP.cs +++ b/ArcFormats/ScenePlayer/ImagePMP.cs @@ -64,101 +64,4 @@ namespace GameRes.Formats.ScenePlayer return base.Read (zstream, info); } } - - public class XoredStream : Stream - { - private Stream m_stream; - private byte m_key; - private bool m_should_dispose; - - public Stream BaseStream { get { return m_stream; } } - - public override bool CanRead { get { return m_stream.CanRead; } } - public override bool CanSeek { get { return m_stream.CanSeek; } } - public override bool CanWrite { get { return m_stream.CanWrite; } } - public override long Length { get { return m_stream.Length; } } - public override long Position - { - get { return m_stream.Position; } - set { m_stream.Position = value; } - } - - public XoredStream (Stream stream, byte key, bool leave_open = false) - { - m_stream = stream; - m_key = key; - m_should_dispose = !leave_open; - } - - #region System.IO.Stream methods - public override void Flush() - { - m_stream.Flush(); - } - - public override long Seek (long offset, SeekOrigin origin) - { - return m_stream.Seek (offset, origin); - } - - public override void SetLength (long length) - { - m_stream.SetLength (length); - } - - public override int Read (byte[] buffer, int offset, int count) - { - int read = m_stream.Read (buffer, offset, count); - for (int i = 0; i < read; ++i) - { - buffer[offset+i] ^= m_key; - } - return read; - } - - public override int ReadByte () - { - int b = m_stream.ReadByte(); - if (-1 != b) - { - b ^= m_key; - } - return b; - } - - byte[] write_buf; - - public override void Write (byte[] buffer, int offset, int count) - { - if (null == write_buf || write_buf.Length < count) - write_buf = new byte[count]; - for (int i = 0; i < count; ++i) - { - write_buf[i] = (byte)(buffer[offset+i] ^ m_key); - } - m_stream.Write (write_buf, 0, count); - } - - public override void WriteByte (byte value) - { - m_stream.WriteByte ((byte)(value ^ m_key)); - } - #endregion - - #region IDisposable Members - bool disposed = false; - protected override void Dispose (bool disposing) - { - if (!disposed) - { - if (disposing && m_should_dispose) - { - m_stream.Dispose(); - } - disposed = true; - base.Dispose (disposing); - } - } - #endregion - } }