a3dc7b3f48
hondacrx: - Initial commit: Switch to .Net Core 2.0 - Fix build and removed not needed files Fabi: - Updated solution platforms. - Changed folder structure. - Change library target framework to netstandard2.0. - Updated solution platforms again... - Removed windows specific kernel32 function usage (Ctrl-C handler).
171 lines
6.7 KiB
C#
171 lines
6.7 KiB
C#
// zlib.cs -- interface of the 'zlib' general purpose compression library
|
|
// Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
|
|
// Copyright (C) 2007-2011 by the Authors
|
|
// For conditions of distribution and use, see copyright notice in License.txt
|
|
|
|
|
|
namespace Framework.IO
|
|
{
|
|
public static partial class ZLib
|
|
{
|
|
// Maximum value for memLevel in deflateInit2
|
|
private const int MAX_MEM_LEVEL=9;
|
|
|
|
// Maximum value for windowBits in deflateInit2 and inflateInit2.
|
|
private const int MAX_WBITS=15; // 32K LZ77 window
|
|
private const int DEF_WBITS=MAX_WBITS; // default windowBits for decompression. MAX_WBITS is for compression only
|
|
|
|
// The memory requirements for deflate are (in bytes):
|
|
// (1 << (windowBits+2)) + (1 << (memLevel+9))
|
|
// that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
|
|
// plus a few kilobytes for small objects. For example, if you want to reduce
|
|
// the default memory requirements from 256K to 128K, compile with
|
|
// make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
|
|
// Of course this will generally degrade compression (there's no free lunch).
|
|
|
|
// The memory requirements for inflate are (in bytes) 1 << windowBits
|
|
// that is, 32K for windowBits=15 (default value) plus a few kilobytes
|
|
// for small objects.
|
|
|
|
private const int DEF_MEM_LEVEL=8; // default memLevel
|
|
|
|
// The three kinds of block type
|
|
private const int STORED_BLOCK=0;
|
|
private const int STATIC_TREES=1;
|
|
private const int DYN_TREES=2;
|
|
|
|
// The minimum and maximum match lengths
|
|
private const int MIN_MATCH=3;
|
|
private const int MAX_MATCH=258;
|
|
|
|
public const string ZLIB_VERSION="1.2.5";
|
|
public const uint ZLIB_VERNUM=0x1250;
|
|
|
|
// The 'zlib' compression library provides in-memory compression and
|
|
// decompression functions, including integrity checks of the uncompressed
|
|
// data. This version of the library supports only one compression method
|
|
// (deflation) but other algorithms will be added later and will have the same
|
|
// stream interface.
|
|
//
|
|
// Compression can be done in a single step if the buffers are large enough,
|
|
// or can be done by repeated calls of the compression function. In the latter
|
|
// case, the application must provide more input and/or consume the output
|
|
// (providing more output space) before each call.
|
|
//
|
|
// The compressed data format used by default by the in-memory functions is
|
|
// the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
|
|
// around a deflate stream, which is itself documented in RFC 1951.
|
|
//
|
|
// The zlib format was designed to be compact and fast for use in memory
|
|
// and on communications channels.
|
|
//
|
|
// The library does not install any signal handler. The decoder checks
|
|
// the consistency of the compressed data, so the library should never crash
|
|
// even in case of corrupted input.
|
|
|
|
public class z_stream
|
|
{
|
|
public byte[] in_buf; // input buffer
|
|
public uint next_in; // next input byte index
|
|
public uint avail_in; // number of bytes available at next_in
|
|
public uint total_in; // total nb of input bytes read so far
|
|
|
|
public byte[] out_buf; // output buffer
|
|
public int next_out; // next output byte should be put there
|
|
public uint avail_out; // remaining free space at next_out
|
|
public uint total_out; // total nb of bytes output so far
|
|
|
|
public string msg; // last error message, NULL if no error
|
|
public object state; // not visible by applications
|
|
|
|
public uint adler; // adler32 value of the uncompressed data
|
|
|
|
public void CopyTo(z_stream s)
|
|
{
|
|
s.adler=adler;
|
|
s.avail_in=avail_in;
|
|
s.avail_out=avail_out;
|
|
s.in_buf=in_buf;
|
|
s.msg=msg;
|
|
s.next_in=next_in;
|
|
s.next_out=next_out;
|
|
s.out_buf=out_buf;
|
|
s.state=state;
|
|
s.total_in=total_in;
|
|
s.total_out=total_out;
|
|
}
|
|
}
|
|
|
|
// gzip header information passed to and from zlib routines. See RFC 1952
|
|
// for more details on the meanings of these fields.
|
|
public class gz_header
|
|
{
|
|
public int text; // true if compressed data believed to be text
|
|
public uint time; // modification time
|
|
public int xflags; // extra flags (not used when writing a gzip file)
|
|
public int os; // operating system
|
|
public byte[] extra; // pointer to extra field or Z_NULL if none
|
|
public uint extra_len; // extra field length (valid if extra != Z_NULL)
|
|
public uint extra_max; // space at extra (only when reading header)
|
|
public byte[] name; // pointer to zero-terminated file name or Z_NULL
|
|
public uint name_max; // space at name (only when reading header)
|
|
public byte[] comment; // pointer to zero-terminated comment or Z_NULL
|
|
public uint comm_max; // space at comment (only when reading header)
|
|
public int hcrc; // true if there was or will be a header crc
|
|
public int done; // true when done reading gzip header (not used when writing a gzip file)
|
|
}
|
|
|
|
// The application must update next_in and avail_in when avail_in has
|
|
// dropped to zero. It must update next_out and avail_out when avail_out
|
|
// has dropped to zero. All other fields are set by the
|
|
// compression library and must not be updated by the application.
|
|
//
|
|
// The fields total_in and total_out can be used for statistics or
|
|
// progress reports. After compression, total_in holds the total size of
|
|
// the uncompressed data and may be saved for use in the decompressor
|
|
// (particularly if the decompressor wants to decompress everything in
|
|
// a single step).
|
|
|
|
// constants
|
|
|
|
// Allowed flush values; see deflate() and inflate() below for details
|
|
public const int Z_NO_FLUSH=0;
|
|
public const int Z_PARTIAL_FLUSH=1;
|
|
public const int Z_SYNC_FLUSH=2;
|
|
public const int Z_FULL_FLUSH=3;
|
|
public const int Z_FINISH=4;
|
|
public const int Z_BLOCK=5;
|
|
public const int Z_TREES=6;
|
|
|
|
// Return codes for the compression/decompression functions. Negative
|
|
// values are errors, positive values are used for special but normal events.
|
|
public const int Z_OK=0;
|
|
public const int Z_STREAM_END=1;
|
|
public const int Z_NEED_DICT=2;
|
|
public const int Z_ERRNO=-1;
|
|
public const int Z_STREAM_ERROR=-2;
|
|
public const int Z_DATA_ERROR=-3;
|
|
public const int Z_MEM_ERROR=-4;
|
|
public const int Z_BUF_ERROR=-5;
|
|
public const int Z_VERSION_ERROR=-6;
|
|
|
|
// compression levels
|
|
public const int Z_NO_COMPRESSION=0;
|
|
public const int Z_BEST_SPEED=1;
|
|
public const int Z_BEST_COMPRESSION=9;
|
|
public const int Z_DEFAULT_COMPRESSION=(-1);
|
|
|
|
// compression strategy; see deflateInit2() below for details
|
|
public const int Z_FILTERED=1;
|
|
public const int Z_HUFFMAN_ONLY=2;
|
|
public const int Z_RLE=3;
|
|
public const int Z_FIXED=4;
|
|
public const int Z_DEFAULT_STRATEGY=0;
|
|
|
|
// The deflate compression method (the only one supported in this version)
|
|
public const int Z_DEFLATED=8;
|
|
|
|
public const string zlib_version=ZLIB_VERSION; // for compatibility with versions < 1.0.2
|
|
}
|
|
}
|