// workitem 7813 - totally unnecessary // public override void WriteByte(byte b) // { // _buf1[0] = (byte)b; // // workitem 7159 // if (crc != null) // crc.SlurpBlock(_buf1, 0, 1); // Write(_buf1, 0, 1); // } public override void Write(System.Byte[] buffer, int offset, int count) { // workitem 7159 // calculate the CRC on the unccompressed data (before writing) if (crc != null) { crc.SlurpBlock(buffer, offset, count); } if (_streamMode == StreamMode.Undefined) { _streamMode = StreamMode.Writer; } else if (_streamMode != StreamMode.Writer) { throw new ZlibException("Cannot Write after Reading."); } if (count == 0) { return; } // first reference of z property will initialize the private var _z z.InputBuffer = buffer; _z.NextIn = offset; _z.AvailableBytesIn = count; bool done = false; do { _z.OutputBuffer = workingBuffer; _z.NextOut = 0; _z.AvailableBytesOut = _workingBuffer.Length; //int rc = (_wantCompress) // ? _z.Deflate(_flushMode) // : _z.Inflate(_flushMode); int rc = _z.Inflate(_flushMode); if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) { throw new ZlibException("inflating: " + _z.Message); } _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; // If GZIP and de-compress, we're done when 8 bytes remain. if (_flavor == ZlibStreamFlavor.GZIP) { done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); } }while (!done); }