From bcf78a20978d76f64b7cd46d1a4d7a79a578c77b Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Fri, 9 Sep 2011 22:36:31 -0700 Subject: zlib 0.71 --- zlib.h | 604 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 604 insertions(+) create mode 100644 zlib.h (limited to 'zlib.h') diff --git a/zlib.h b/zlib.h new file mode 100644 index 0000000..d1f2ca9 --- /dev/null +++ b/zlib.h @@ -0,0 +1,604 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 0.7 April 14th, 1995. + + Copyright (C) 1995 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + gzip@prep.ai.mit.edu madler@cco.caltech.edu + */ + +#ifndef _ZLIB_H +#define _ZLIB_H + +#include "zconf.h" + +#define ZLIB_VERSION "0.7" + +/* + 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 may be added later and will have the same + stream interface. + + For compression the application must provide the output buffer and + may optionally provide the input buffer for optimization. For decompression, + the application must provide the input buffer and may optionally provide + the output buffer for optimization. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), 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. +*/ + +typedef voidp (*alloc_func) __P((voidp opaque, uInt items, uInt size)); +typedef void (*free_func) __P((voidp opaque, voidp address)); + +struct internal_state; + +typedef struct z_stream_s { + Byte *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Byte *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidp opaque; /* private data object passed to zalloc and zfree */ + + Byte data_type; /* best guess about the data type: ascii or binary */ + +} z_stream; + +/* + 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. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be require to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). + + 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 */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_FULL_FLUSH 2 +#define Z_FINISH 4 +/* See deflate() below for the usage of these constants */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +/* error codes for the compression/decompression functions */ + +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_DEFAULT_STRATEGY 0 + +#define Z_BINARY 0 +#define Z_ASCII 1 +#define Z_UNKNOWN 2 +/* Used to set the data_type field */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +extern char *zlib_version; +/* The application can compare zlib_version and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + */ + + /* basic functions */ + +extern int deflateInit __P((z_stream *strm, int level)); +/* + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 1 and 9: + 1 gives best speed, 9 gives best compression. Z_DEFAULT_COMPRESSION requests + a default compromise between speed and compression (currently equivalent + to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the stream state was inconsistent (such + as zalloc being NULL). msg is set to null if there is no error message. + deflateInit does not perform any compression: this will be done by + deflate(). */ + + +extern int deflate __P((z_stream *strm, int flush)); +/* + Performs one or both of the following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly. + The application can consume the compressed output when the output + buffer is full (avail_out == 0), or after each call of deflate(). + + If the parameter flush is set to Z_PARTIAL_FLUSH, the current compression + block is byte aligned and flushed to the output buffer so that the + decompressor can get all input data available so far; if the compression + method is 8 (deflate without partial flush capability), the current block + is terminated. If flush is set to Z_FULL_FLUSH, the compression block is + terminated, a special marker is output and the compression dictionary is + discarded; this is useful to allow the decompressor to synchronize if one + compressed block has been damaged. + Flushing degrades compression and so should be used only when necessary. + Using Z_FULL_FLUSH too often can seriously degrade the compression. + + If the parameter flush is set to Z_FINISH, all pending input is + processed and all pending output is flushed. The next operation on this + stream must be another call of deflate with Z_FINISH but no more input data + (unchanged avail_in) if this call returned with avail_out equal to zero, + or a call of deflateEnd to deallocate the compression state. Z_FINISH can + be used immediately after deflateInit if all the compression is to be + done in a single step. In this case, avail_out must be at least 0.1% + larger than avail_in plus 8 bytes. + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() return Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_ERROR if the stream state was + inconsistent (for example if next_in or next_out was NULL), Z_BUF_ERROR if + no progress is possible or if there was not enough room in the output buffer + when Z_FINISH is used. +*/ + + +extern int deflateEnd __P((z_stream *strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent. In the error case, msg may be set + but then points to a static string (which must not be deallocated). +*/ + + +extern int inflateInit __P((z_stream *strm)); +/* + Initializes the internal stream state for decompression. The fields + zalloc and zfree must be initialized before by the caller. If zalloc and + zfree are set to Z_NULL, deflateInit updates them to use default allocation + functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the stream state was inconsistent (such + as zalloc being NULL). msg is set to null if there is no error message. + inflateInit does not perform any decompression: this will be done by + inflate(). +*/ + + +extern int inflate __P((z_stream *strm, int flush)); +/* + Performs one or both of the following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() always provides as much output as possible + (until no more input data or no more space in the output buffer). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when the output + buffer is full (avail_out == 0), or after each call of inflate(). + + If the parameter flush is set to Z_PARTIAL_FLUSH, inflate flushes as much + output as possible to the output buffer. The flushing behavior of inflate is + not specified for values of the flush paramater other than Z_PARTIAL_FLUSH + and Z_FINISH, but the current implementation actually flushes as much output + as possible anyway. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. + + inflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if the end of the + compressed data has been reached, Z_DATA_ERROR if the input data was + corrupted, Z_STREAM_ERROR if the stream structure was inconsistent (for + example if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if no progress is possible or if there was not enough + room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, + the application may then call inflateSync to look for a good compression + block. +*/ + + +extern int inflateEnd __P((z_stream *strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +extern int deflateInit2 __P((z_stream *strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); +/* + This is another version of deflateInit with more compression options. The + fields next_in, zalloc and zfree must be initialized before by the caller. + + The method parameter is the compression method. It must be 8 in this + version of the library. (Method 9 will allow a 64K history buffer and + partial block flushes.) + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library (the value 16 will be allowed soon). Larger values + of this parameter result in better compression at the expense of memory + usage. The default value is 15 if deflateInit is used instead. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. + + The strategy parameter is used to tune the compression algorithm. Use + the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data + produced by a filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman + encoding only (no string match). Filtered data consists mostly of small + values with a somewhat random distribution. In this case, the + compression algorithm is tuned to compress them better. The strategy + parameter only affects the compression ratio but not the correctness of + the compressed output even if it is not set appropriately. + + If next_in is not null, the library will use this buffer to hold also + some history information; the buffer must either hold the entire input + data, or have at least (1<