From b197bb77fd353c50dd3405989bd3611e250fe7e3 Mon Sep 17 00:00:00 2001 From: morkt Date: Sun, 16 Oct 2016 16:15:13 +0400 Subject: [PATCH] (IBinaryStream.Name): added setter. --- GameRes/BinaryStream.cs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/GameRes/BinaryStream.cs b/GameRes/BinaryStream.cs index 0706dbec..0ba56cc3 100644 --- a/GameRes/BinaryStream.cs +++ b/GameRes/BinaryStream.cs @@ -37,7 +37,7 @@ namespace GameRes /// /// Name of the stream (could be name of the underlying file) or an empty string. /// - string Name { get; } + string Name { get; get; } /// /// First 4 bytes of the stream as a little-endian integer. /// @@ -115,14 +115,10 @@ namespace GameRes byte[] m_header; int m_header_size; - public string Name { get; private set; } + public string Name { get; set; } public uint Signature { get { return m_signature.Value; } } public Stream AsStream { get { return this; } } -// public BinaryStream (Stream input, bool leave_open = false) : this (input, "", leave_open) -// { -// } - public BinaryStream (Stream input, string name, bool leave_open = false) { m_buffer = new byte[0x10]; @@ -160,9 +156,12 @@ namespace GameRes public static IBinaryStream FromStream (Stream input, string filename) { - if (input is IBinaryStream) - return input as IBinaryStream; - return new BinaryStream (input, filename); + var bin = input as IBinaryStream; + if (null == bin) + bin = new BinaryStream (input, filename); + else + bin.Name = filename; + return bin; } uint ReadSignature () @@ -339,15 +338,16 @@ namespace GameRes { var buffer = new byte[count]; int pos = 0; - int cached = m_buffer_end - m_buffer_pos; + int cached = Math.Min (m_buffer_end - m_buffer_pos, count); if (cached > 0) { Buffer.BlockCopy (m_buffer, m_buffer_pos, buffer, 0, cached); pos = cached; - m_buffer_end = m_buffer_pos = 0; + m_buffer_pos += cached; count -= cached; } - pos += m_source.Read (buffer, pos, count); + if (count > 0) + pos += m_source.Read (buffer, pos, count); if (pos < buffer.Length) { var copy = new byte[pos]; @@ -367,8 +367,8 @@ namespace GameRes get { return m_source.Position - (m_buffer_end - m_buffer_pos); } set { - m_source.Position = value; m_buffer_end = m_buffer_pos = 0; + m_source.Position = value; } } @@ -456,7 +456,7 @@ namespace GameRes int m_position; uint m_signature; - public string Name { get; private set; } + public string Name { get; set; } public uint Signature { get { return m_signature; } } public Stream AsStream { get { return this; } }