diff --git a/crypto/src/util/zlib/ZOutputStream.cs b/crypto/src/util/zlib/ZOutputStream.cs
index a1482a07f..dcb93f97b 100644
--- a/crypto/src/util/zlib/ZOutputStream.cs
+++ b/crypto/src/util/zlib/ZOutputStream.cs
@@ -37,11 +37,13 @@ using System;
using System.Diagnostics;
using System.IO;
+using Org.BouncyCastle.Utilities.IO;
+
namespace Org.BouncyCastle.Utilities.Zlib
{
- public class ZOutputStream
- : Stream
- {
+ public class ZOutputStream
+ : BaseOutputStream
+ {
private static ZStream GetDefaultZStream(bool nowrap)
{
ZStream z = new ZStream();
@@ -51,30 +53,30 @@ namespace Org.BouncyCastle.Utilities.Zlib
private const int BufferSize = 4096;
- protected ZStream z;
- protected int flushLevel = JZlib.Z_NO_FLUSH;
- // TODO Allow custom buf
- protected byte[] buf = new byte[BufferSize];
- protected byte[] buf1 = new byte[1];
- protected bool compress;
+ protected ZStream z;
+ protected int flushLevel = JZlib.Z_NO_FLUSH;
+ // TODO Allow custom buf
+ protected byte[] buf = new byte[BufferSize];
+ protected byte[] buf1 = new byte[1];
+ protected bool compress;
- protected Stream output;
- protected bool closed;
+ protected Stream output;
+ protected bool closed;
public ZOutputStream(Stream output)
: this(output, false)
- {
- }
+ {
+ }
public ZOutputStream(Stream output, bool nowrap)
: this(output, GetDefaultZStream(nowrap))
- {
- }
+ {
+ }
public ZOutputStream(Stream output, ZStream z)
- : base()
- {
- Debug.Assert(output.CanWrite);
+ : base()
+ {
+ Debug.Assert(output.CanWrite);
if (z == null)
{
@@ -89,27 +91,23 @@ namespace Org.BouncyCastle.Utilities.Zlib
this.output = output;
this.compress = (z.istate == null);
this.z = z;
- }
+ }
public ZOutputStream(Stream output, int level)
- : this(output, level, false)
- {
- }
+ : this(output, level, false)
+ {
+ }
- public ZOutputStream(Stream output, int level, bool nowrap)
- : base()
- {
- Debug.Assert(output.CanWrite);
+ public ZOutputStream(Stream output, int level, bool nowrap)
+ : base()
+ {
+ Debug.Assert(output.CanWrite);
- this.output = output;
+ this.output = output;
this.compress = true;
this.z = new ZStream();
- this.z.deflateInit(level, nowrap);
- }
-
- public sealed override bool CanRead { get { return false; } }
- public sealed override bool CanSeek { get { return false; } }
- public sealed override bool CanWrite { get { return !closed; } }
+ this.z.deflateInit(level, nowrap);
+ }
#if PORTABLE
protected override void Dispose(bool disposing)
@@ -124,14 +122,14 @@ namespace Org.BouncyCastle.Utilities.Zlib
base.Dispose(disposing);
}
#else
- public override void Close()
- {
- if (closed)
- return;
+ public override void Close()
+ {
+ if (closed)
+ return;
DoClose();
base.Close();
- }
+ }
#endif
private void DoClose()
@@ -157,109 +155,101 @@ namespace Org.BouncyCastle.Utilities.Zlib
}
public virtual void End()
- {
- if (z == null)
- return;
- if (compress)
- z.deflateEnd();
- else
- z.inflateEnd();
- z.free();
- z = null;
- }
-
- public virtual void Finish()
- {
- do
- {
- z.next_out = buf;
- z.next_out_index = 0;
- z.avail_out = buf.Length;
-
- int err = compress
- ? z.deflate(JZlib.Z_FINISH)
- : z.inflate(JZlib.Z_FINISH);
-
- if (err != JZlib.Z_STREAM_END && err != JZlib.Z_OK)
- // TODO
-// throw new ZStreamException((compress?"de":"in")+"flating: "+z.msg);
- throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
-
- int count = buf.Length - z.avail_out;
- if (count > 0)
- {
- output.Write(buf, 0, count);
- }
- }
- while (z.avail_in > 0 || z.avail_out == 0);
-
- Flush();
- }
-
- public override void Flush()
- {
- output.Flush();
- }
-
- public virtual int FlushMode
- {
- get { return flushLevel; }
- set { this.flushLevel = value; }
- }
-
- public sealed override long Length { get { throw new NotSupportedException(); } }
- public sealed override long Position
{
- get { throw new NotSupportedException(); }
- set { throw new NotSupportedException(); }
+ if (z == null)
+ return;
+ if (compress)
+ z.deflateEnd();
+ else
+ z.inflateEnd();
+ z.free();
+ z = null;
+ }
+
+ public virtual void Finish()
+ {
+ do
+ {
+ z.next_out = buf;
+ z.next_out_index = 0;
+ z.avail_out = buf.Length;
+
+ int err = compress
+ ? z.deflate(JZlib.Z_FINISH)
+ : z.inflate(JZlib.Z_FINISH);
+
+ if (err != JZlib.Z_STREAM_END && err != JZlib.Z_OK)
+ // TODO
+ //throw new ZStreamException((compress?"de":"in")+"flating: "+z.msg);
+ throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
+
+ int count = buf.Length - z.avail_out;
+ if (count > 0)
+ {
+ output.Write(buf, 0, count);
+ }
+ }
+ while (z.avail_in > 0 || z.avail_out == 0);
+
+ Flush();
+ }
+
+ public override void Flush()
+ {
+ output.Flush();
+ }
+
+ public virtual int FlushMode
+ {
+ get { return flushLevel; }
+ set { this.flushLevel = value; }
+ }
+
+ public virtual long TotalIn
+ {
+ get { return z.total_in; }
+ }
+
+ public virtual long TotalOut
+ {
+ get { return z.total_out; }
+ }
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ Streams.ValidateBufferArguments(buffer, offset, count);
+
+ if (count == 0)
+ return;
+
+ z.next_in = buffer;
+ z.next_in_index = offset;
+ z.avail_in = count;
+
+ do
+ {
+ z.next_out = buf;
+ z.next_out_index = 0;
+ z.avail_out = buf.Length;
+
+ int err = compress
+ ? z.deflate(flushLevel)
+ : z.inflate(flushLevel);
+
+ if (err != JZlib.Z_OK)
+ // TODO
+ //throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg);
+ throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
+
+ output.Write(buf, 0, buf.Length - z.avail_out);
+ }
+ while (z.avail_in > 0 || z.avail_out == 0);
+ }
+
+ public override void WriteByte(byte value)
+ {
+ buf1[0] = value;
+ Write(buf1, 0, 1);
}
- public sealed override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException(); }
- public sealed override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); }
- public sealed override void SetLength(long value) { throw new NotSupportedException(); }
-
- public virtual long TotalIn
- {
- get { return z.total_in; }
- }
-
- public virtual long TotalOut
- {
- get { return z.total_out; }
- }
-
- public override void Write(byte[] b, int off, int len)
- {
- if (len == 0)
- return;
-
- z.next_in = b;
- z.next_in_index = off;
- z.avail_in = len;
-
- do
- {
- z.next_out = buf;
- z.next_out_index = 0;
- z.avail_out = buf.Length;
-
- int err = compress
- ? z.deflate(flushLevel)
- : z.inflate(flushLevel);
-
- if (err != JZlib.Z_OK)
- // TODO
-// throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg);
- throw new IOException((compress ? "de" : "in") + "flating: " + z.msg);
-
- output.Write(buf, 0, buf.Length - z.avail_out);
- }
- while (z.avail_in > 0 || z.avail_out == 0);
- }
-
- public override void WriteByte(byte b)
- {
- buf1[0] = b;
- Write(buf1, 0, 1);
- }
- }
+ }
}
|