From d578ea40949eb28a6e9bd3f67057e9ab248ce08d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 13 Jan 2016 12:48:27 +0100 Subject: [PATCH] Implement MergedStream.Position properly --- OpenRA.Game/Primitives/MergedStream.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/OpenRA.Game/Primitives/MergedStream.cs b/OpenRA.Game/Primitives/MergedStream.cs index e196af559e..72bb2a5e65 100644 --- a/OpenRA.Game/Primitives/MergedStream.cs +++ b/OpenRA.Game/Primitives/MergedStream.cs @@ -18,6 +18,7 @@ namespace OpenRA.Primitives public Stream Stream2 { get; set; } long VirtualLength { get; set; } + long position; public MergedStream(Stream stream1, Stream stream2) { @@ -35,8 +36,6 @@ namespace OpenRA.Primitives public override long Seek(long offset, SeekOrigin origin) { - var position = Position; - switch (origin) { case SeekOrigin.Begin: @@ -52,9 +51,9 @@ namespace OpenRA.Primitives } if (position >= Stream1.Length) - Position = Stream1.Length + Stream2.Seek(offset - Stream1.Length, SeekOrigin.Begin); + position = Stream1.Length + Stream2.Seek(offset - Stream1.Length, SeekOrigin.Begin); else - Position = Stream1.Seek(offset, SeekOrigin.Begin); + position = Stream1.Seek(offset, SeekOrigin.Begin); return position; } @@ -68,7 +67,7 @@ namespace OpenRA.Primitives { int bytesRead; - if (Position >= Stream1.Length) + if (position >= Stream1.Length) bytesRead = Stream2.Read(buffer, offset, count); else if (count > Stream1.Length) { @@ -78,14 +77,14 @@ namespace OpenRA.Primitives else bytesRead = Stream1.Read(buffer, offset, count); - Position += bytesRead; + position += bytesRead; return bytesRead; } public override void Write(byte[] buffer, int offset, int count) { - if (Position >= Stream1.Length) + if (position >= Stream1.Length) Stream2.Write(buffer, offset - (int)Stream1.Length, count); else Stream1.Write(buffer, offset, count); @@ -111,6 +110,10 @@ namespace OpenRA.Primitives get { return VirtualLength; } } - public override long Position { get; set; } + public override long Position + { + get { return position; } + set { Seek(value, SeekOrigin.Begin); } + } } }