1d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* zlib.h -- interface of the 'zlib' general purpose compression library 277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com version 1.2.8, April 28th, 2013 3d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler 5d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 6d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This software is provided 'as-is', without any express or implied 7d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis warranty. In no event will the authors be held liable for any damages 8d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis arising from the use of this software. 9d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 10d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Permission is granted to anyone to use this software for any purpose, 11d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis including commercial applications, and to alter it and redistribute it 12d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis freely, subject to the following restrictions: 13d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 14d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1. The origin of this software must not be misrepresented; you must not 15d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis claim that you wrote the original software. If you use this software 16d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis in a product, an acknowledgment in the product documentation would be 17d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis appreciated but is not required. 18d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 2. Altered source versions must be plainly marked as such, and must not be 19d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis misrepresented as being the original software. 20d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 3. This notice may not be removed or altered from any source distribution. 21d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 22d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Jean-loup Gailly Mark Adler 23d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis jloup@gzip.org madler@alumni.caltech.edu 24d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 25d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 26d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The data format used by the zlib library is described by RFCs (Request for 2777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 2877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). 29d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 30d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 31d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#ifndef ZLIB_H 32d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define ZLIB_H 33d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 34d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#include "zconf.h" 35d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 36d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#ifdef __cplusplus 37d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwisextern "C" { 38d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#endif 39d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 4077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define ZLIB_VERSION "1.2.8" 4177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define ZLIB_VERNUM 0x1280 4277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define ZLIB_VER_MAJOR 1 4377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define ZLIB_VER_MINOR 2 4477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define ZLIB_VER_REVISION 8 4577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define ZLIB_VER_SUBREVISION 0 46d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 47d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 4877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The 'zlib' compression library provides in-memory compression and 4977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com decompression functions, including integrity checks of the uncompressed data. 5077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This version of the library supports only one compression method (deflation) 5177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com but other algorithms will be added later and will have the same stream 5277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com interface. 5377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 5477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Compression can be done in a single step if the buffers are large enough, 5577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com or can be done by repeated calls of the compression function. In the latter 5677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com case, the application must provide more input and/or consume the output 57d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis (providing more output space) before each call. 58d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 5977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The compressed data format used by default by the in-memory functions is 60d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped 61d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis around a deflate stream, which is itself documented in RFC 1951. 62d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 6377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The library also supports reading and writing files in gzip (.gz) format 64d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis with an interface similar to that of stdio using the functions that start 65d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis with "gz". The gzip format is different from the zlib format. gzip is a 66d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. 67d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 6877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This library can optionally read and write gzip streams in memory as well. 69d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 7077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The zlib format was designed to be compact and fast for use in memory 71d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis and on communications channels. The gzip format was designed for single- 72d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis file compression on file systems, has a larger header than zlib to maintain 73d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis directory information, and uses a different, slower check method than zlib. 74d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 7577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The library does not install any signal handler. The decoder checks 7677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the consistency of the compressed data, so the library should never crash 7777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com even in case of corrupted input. 78d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 79d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 80d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); 81d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef void (*free_func) OF((voidpf opaque, voidpf address)); 82d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 83d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwisstruct internal_state; 84d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 85d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef struct z_stream_s { 8677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com z_const Bytef *next_in; /* next input byte */ 87d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt avail_in; /* number of bytes available at next_in */ 8877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uLong total_in; /* total number of input bytes read so far */ 89d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 90d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Bytef *next_out; /* next output byte should be put there */ 91d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt avail_out; /* remaining free space at next_out */ 9277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uLong total_out; /* total number of bytes output so far */ 93d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 9477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com z_const char *msg; /* last error message, NULL if no error */ 95d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis struct internal_state FAR *state; /* not visible by applications */ 96d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 97d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis alloc_func zalloc; /* used to allocate the internal state */ 98d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis free_func zfree; /* used to free the internal state */ 99d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis voidpf opaque; /* private data object passed to zalloc and zfree */ 100d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 101d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int data_type; /* best guess about the data type: binary or text */ 102d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uLong adler; /* adler32 value of the uncompressed data */ 103d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uLong reserved; /* reserved for future use */ 104d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis} z_stream; 105d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 106d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef z_stream FAR *z_streamp; 107d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 108d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 109d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gzip header information passed to and from zlib routines. See RFC 1952 110d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis for more details on the meanings of these fields. 111d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 112d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef struct gz_header_s { 113d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int text; /* true if compressed data believed to be text */ 114d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uLong time; /* modification time */ 115d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int xflags; /* extra flags (not used when writing a gzip file) */ 116d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int os; /* operating system */ 117d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Bytef *extra; /* pointer to extra field or Z_NULL if none */ 118d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ 119d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt extra_max; /* space at extra (only when reading header) */ 120d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ 121d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt name_max; /* space at name (only when reading header) */ 122d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ 123d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt comm_max; /* space at comment (only when reading header) */ 124d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int hcrc; /* true if there was or will be a header crc */ 125d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int done; /* true when done reading gzip header (not used 126d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis when writing a gzip file) */ 127d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis} gz_header; 128d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 129d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef gz_header FAR *gz_headerp; 130d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 131d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 13277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The application must update next_in and avail_in when avail_in has dropped 13377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to zero. It must update next_out and avail_out when avail_out has dropped 13477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to zero. The application must initialize zalloc, zfree and opaque before 13577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com calling the init function. All other fields are set by the compression 13677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com library and must not be updated by the application. 13777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 13877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The opaque value provided by the application will be passed as the first 13977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com parameter for calls of zalloc and zfree. This can be useful for custom 14077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com memory management. The compression library attaches no meaning to the 141d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis opaque value. 142d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 14377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zalloc must return Z_NULL if there is not enough memory for the object. 144d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If zlib is used in a multi-threaded application, zalloc and zfree must be 145d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis thread safe. 146d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 14777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com On 16-bit systems, the functions zalloc and zfree must be able to allocate 14877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com exactly 65536 bytes, but will not be required to allocate more than this if 14977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers 15077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com returned by zalloc for objects of exactly 65536 bytes *must* have their 15177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com offset normalized to zero. The default allocation function provided by this 15277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com library ensures this (see zutil.c). To reduce memory requirements and avoid 15377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com any allocation of 64K objects, at the expense of compression ratio, compile 15477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the library with -DMAX_WBITS=14 (see zconf.h). 15577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 15677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The fields total_in and total_out can be used for statistics or progress 15777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com reports. After compression, total_in holds the total size of the 15877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uncompressed data and may be saved for use in the decompressor (particularly 15977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com if the decompressor wants to decompress everything in a single step). 160d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 161d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 162d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis /* constants */ 163d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 164d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_NO_FLUSH 0 16577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define Z_PARTIAL_FLUSH 1 166d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_SYNC_FLUSH 2 167d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_FULL_FLUSH 3 168d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_FINISH 4 169d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_BLOCK 5 17077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#define Z_TREES 6 171d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* Allowed flush values; see deflate() and inflate() below for details */ 172d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 173d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_OK 0 174d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_STREAM_END 1 175d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_NEED_DICT 2 176d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_ERRNO (-1) 177d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_STREAM_ERROR (-2) 178d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_DATA_ERROR (-3) 179d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_MEM_ERROR (-4) 180d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_BUF_ERROR (-5) 181d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_VERSION_ERROR (-6) 18277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* Return codes for the compression/decompression functions. Negative values 18377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * are errors, positive values are used for special but normal events. 184d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis */ 185d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 186d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_NO_COMPRESSION 0 187d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_BEST_SPEED 1 188d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_BEST_COMPRESSION 9 189d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_DEFAULT_COMPRESSION (-1) 190d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* compression levels */ 191d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 192d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_FILTERED 1 193d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_HUFFMAN_ONLY 2 194d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_RLE 3 195d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_FIXED 4 196d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_DEFAULT_STRATEGY 0 197d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* compression strategy; see deflateInit2() below for details */ 198d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 199d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_BINARY 0 200d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_TEXT 1 201d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ 202d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_UNKNOWN 2 203d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* Possible values of the data_type field (though see inflate()) */ 204d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 205d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_DEFLATED 8 206d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* The deflate compression method (the only one supported in this version) */ 207d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 208d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ 209d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 210d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define zlib_version zlibVersion() 211d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* for compatibility with versions < 1.0.2 */ 212d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 21377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 214d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis /* basic functions */ 215d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 216d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN const char * ZEXPORT zlibVersion OF((void)); 217d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* The application can compare zlibVersion and ZLIB_VERSION for consistency. 21877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If the first character differs, the library code actually used is not 21977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compatible with the zlib.h header file used by the application. This check 22077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is automatically made by deflateInit and inflateInit. 221d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis */ 222d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 223d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 224d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); 225d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 22677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Initializes the internal stream state for compression. The fields 22777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zalloc, zfree and opaque must be initialized before by the caller. If 22877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zalloc and zfree are set to Z_NULL, deflateInit updates them to use default 22977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com allocation functions. 230d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 231d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 23277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1 gives best speed, 9 gives best compression, 0 gives no compression at all 23377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION 23477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com requests a default compromise between speed and compression (currently 23577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com equivalent to level 6). 236d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 23777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough 23877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com memory, Z_STREAM_ERROR if level is not a valid compression level, or 239d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible 24077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com with the version assumed by the caller (ZLIB_VERSION). msg is set to null 24177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com if there is no error message. deflateInit does not perform any compression: 24277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com this will be done by deflate(). 243d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 244d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 245d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 246d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); 247d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 248d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate compresses as much data as possible, and stops when the input 24977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer becomes empty or the output buffer becomes full. It may introduce 25077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com some output latency (reading input without producing any output) except when 251d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis forced to flush. 252d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 25377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The detailed semantics are as follows. deflate performs one or both of the 254d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis following actions: 255d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 256d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis - Compress more input starting at next_in and update next_in and avail_in 25777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com accordingly. If not all input can be processed (because there is not 258d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis enough room in the output buffer), next_in and avail_in are updated and 259d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis processing will resume at this point for the next call of deflate(). 260d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 261d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis - Provide more output starting at next_out and update next_out and avail_out 26277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com accordingly. This action is forced if the parameter flush is non zero. 263d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Forcing flush frequently degrades the compression ratio, so this parameter 26477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com should be set only when necessary (in interactive applications). Some 26577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output may be provided even if flush is not set. 26677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 26777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Before the call of deflate(), the application should ensure that at least 26877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com one of the actions is possible, by providing more input and/or consuming more 26977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output, and updating avail_in or avail_out accordingly; avail_out should 27077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com never be zero before the call. The application can consume the compressed 27177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output when it wants, for example when the output buffer is full (avail_out 27277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com == 0), or after each call of deflate(). If deflate returns Z_OK and with 27377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zero avail_out, it must be called again after making room in the output 27477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer because there might be more output pending. 275d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 276d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to 27777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com decide how much data to accumulate before producing output, in order to 278d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis maximize compression. 279d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 280d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If the parameter flush is set to Z_SYNC_FLUSH, all pending output is 281d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis flushed to the output buffer and the output is aligned on a byte boundary, so 28277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that the decompressor can get all input data available so far. (In 28377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com particular avail_in is zero after the call if enough output space has been 28477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com provided before the call.) Flushing may degrade compression for some 28577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression algorithms and so it should be used only when necessary. This 28677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com completes the current deflate block and follows it with an empty stored block 28777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that is three bits plus filler bits to the next byte, followed by four bytes 28877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (00 00 ff ff). 28977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 29077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the 29177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output buffer, but the output is not aligned to a byte boundary. All of the 29277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. 29377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This completes the current deflate block and follows it with an empty fixed 29477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com codes block that is 10 bits long. This assures that enough bytes are output 29577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com in order for the decompressor to finish the block before the empty fixed code 29677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com block. 29777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 29877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If flush is set to Z_BLOCK, a deflate block is completed and emitted, as 29977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to 30077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com seven bits of the current block are held to be written as the next byte after 30177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the next deflate block is completed. In this case, the decompressor may not 30277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com be provided enough bits at this point in order to complete decompression of 30377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the data provided so far to the compressor. It may need to wait for the next 30477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com block to be emitted. This is for advanced applications that need to control 30577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the emission of deflate blocks. 306d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 307d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If flush is set to Z_FULL_FLUSH, all output is flushed as with 308d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_SYNC_FLUSH, and the compression state is reset so that decompression can 309d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis restart from this point if previous compressed data has been damaged or if 31077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com random access is desired. Using Z_FULL_FLUSH too often can seriously degrade 311d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compression. 312d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 313d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If deflate returns with avail_out == 0, this function must be called again 314d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis with the same value of the flush parameter and more output space (updated 315d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis avail_out), until the flush is complete (deflate returns with non-zero 31677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that 317d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis avail_out is greater than six to avoid repeated flush markers due to 318d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis avail_out == 0 on return. 319d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 320d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If the parameter flush is set to Z_FINISH, pending input is processed, 32177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com pending output is flushed and deflate returns with Z_STREAM_END if there was 32277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com enough output space; if deflate returns with Z_OK, this function must be 323d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis called again with Z_FINISH and more output space (updated avail_out) but no 32477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com more input data, until it returns with Z_STREAM_END or an error. After 32577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflate has returned Z_STREAM_END, the only possible operations on the stream 32677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com are deflateReset or deflateEnd. 327d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 328d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_FINISH can be used immediately after deflateInit if all the compression 32977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is to be done in a single step. In this case, avail_out must be at least the 33077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com value returned by deflateBound (see below). Then deflate is guaranteed to 33177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com return Z_STREAM_END. If not enough output space is provided, deflate will 33277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com not return Z_STREAM_END, and it must be called again as described above. 333d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 334d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate() sets strm->adler to the adler32 checksum of all input read 335d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis so far (that is, total_in bytes). 336d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 337d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate() may update strm->data_type if it can make a good guess about 33877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered 33977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com binary. This field is only for information purposes and does not affect the 34077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression algorithm in any manner. 341d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 342d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate() returns Z_OK if some progress has been made (more input 343d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis processed or more output produced), Z_STREAM_END if all input has been 344d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis consumed and all output has been produced (only when flush is set to 345d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example 34677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible 34777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not 348d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis fatal, and deflate() can be called again with more input and more output 349d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis space to continue compressing. 350d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 351d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 352d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 353d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); 354d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 355d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis All dynamically allocated data structures for this stream are freed. 35677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This function discards any unprocessed input and does not flush any pending 35777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output. 358d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 359d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the 360d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis stream state was inconsistent, Z_DATA_ERROR if the stream was freed 36177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com prematurely (some input or output was discarded). In the error case, msg 36277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com may be set but then points to a static string (which must not be 363d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deallocated). 364d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 365d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 366d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 367d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 368d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); 369d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 37077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Initializes the internal stream state for decompression. The fields 371d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis next_in, avail_in, zalloc, zfree and opaque must be initialized before by 37277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the caller. If next_in is not Z_NULL and avail_in is large enough (the 37377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com exact value depends on the compression method), inflateInit determines the 374d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compression method from the zlib header and allocates all data structures 375d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis accordingly; otherwise the allocation will be deferred to the first call of 376d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to 377d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis use default allocation functions. 378d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 379d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough 380d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis memory, Z_VERSION_ERROR if the zlib library version is incompatible with the 38177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com version assumed by the caller, or Z_STREAM_ERROR if the parameters are 38277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com invalid, such as a null pointer to the structure. msg is set to null if 38377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com there is no error message. inflateInit does not perform any decompression 38477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com apart from possibly reading the zlib header if present: actual decompression 38577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will be done by inflate(). (So next_in and avail_in may be modified, but 38677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com next_out and avail_out are unused and unchanged.) The current implementation 38777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of inflateInit() does not process any header information -- that is deferred 38877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com until inflate() is called. 389d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 390d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 391d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 392d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); 393d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 394d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflate decompresses as much data as possible, and stops when the input 39577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer becomes empty or the output buffer becomes full. It may introduce 396d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis some output latency (reading input without producing any output) except when 397d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis forced to flush. 398d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 39977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The detailed semantics are as follows. inflate performs one or both of the 400d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis following actions: 401d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 402d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis - Decompress more input starting at next_in and update next_in and avail_in 40377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com accordingly. If not all input can be processed (because there is not 40477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com enough room in the output buffer), next_in is updated and processing will 40577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com resume at this point for the next call of inflate(). 406d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 407d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis - Provide more output starting at next_out and update next_out and avail_out 40877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com accordingly. inflate() provides as much output as possible, until there is 40977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com no more input data or no more space in the output buffer (see below about 41077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the flush parameter). 41177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 41277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Before the call of inflate(), the application should ensure that at least 41377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com one of the actions is possible, by providing more input and/or consuming more 41477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output, and updating the next_* and avail_* values accordingly. The 41577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com application can consume the uncompressed output when it wants, for example 41677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com when the output buffer is full (avail_out == 0), or after each call of 41777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflate(). If inflate returns Z_OK and with zero avail_out, it must be 41877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com called again after making room in the output buffer because there might be 41977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com more output pending. 42077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 42177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, 42277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much 42377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output as possible to the output buffer. Z_BLOCK requests that inflate() 42477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stop if and when it gets to the next deflate block boundary. When decoding 42577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the zlib or gzip format, this will cause inflate() to return immediately 42677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com after the header and before the first block. When doing a raw inflate, 42777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflate() will go ahead and process the first block, and will return when it 42877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gets to the end of that block, or when it runs out of data. 429d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 430d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The Z_BLOCK option assists in appending to or combining deflate streams. 431d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Also to assist in this, on return inflate() will set strm->data_type to the 43277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com number of unused bits in the last byte taken from strm->next_in, plus 64 if 43377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflate() is currently decoding the last block in the deflate stream, plus 43477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 128 if inflate() returned immediately after decoding an end-of-block code or 43577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com decoding the complete header up to just before the first byte of the deflate 43677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream. The end-of-block will not be indicated until all of the uncompressed 43777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com data from that block has been written to strm->next_out. The number of 43877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com unused bits may in general be greater than seven, except when bit 7 of 43977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com data_type is set, in which case the number of unused bits will be less than 44077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com eight. data_type is set as noted here every time inflate() returns for all 44177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com flush options, and so can be used to determine the amount of currently 44277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com consumed input in bits. 44377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 44477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The Z_TREES option behaves as Z_BLOCK does, but it also returns when the 44577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com end of each deflate block header is reached, before any actual data in that 44677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com block is decoded. This allows the caller to determine the length of the 44777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflate block header for later use in random access within a deflate block. 44877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 256 is added to the value of strm->data_type when inflate() returns 44977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com immediately after reaching the end of the deflate block header. 450d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 451d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflate() should normally be called until it returns Z_STREAM_END or an 45277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com error. However if all decompression is to be performed in a single step (a 45377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com single call of inflate), the parameter flush should be set to Z_FINISH. In 45477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com this case all pending input is processed and all pending output is flushed; 45577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com avail_out must be large enough to hold all of the uncompressed data for the 45677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com operation to complete. (The size of the uncompressed data may have been 45777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com saved by the compressor for this purpose.) The use of Z_FINISH is not 45877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com required to perform an inflation in one step. However it may be used to 45977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inform inflate that a faster approach can be used for the single inflate() 46077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com call. Z_FINISH also informs inflate to not maintain a sliding window if the 46177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream completes, which reduces inflate's memory footprint. If the stream 46277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com does not complete, either because not all of the stream is provided or not 46377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com enough output space is provided, then a sliding window will be allocated and 46477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflate() can be called again to continue the operation as if Z_NO_FLUSH had 46577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com been used. 466d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 467d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis In this implementation, inflate() always flushes as much output as 468d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis possible to the output buffer, and always uses the faster approach on the 46977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com first call. So the effects of the flush parameter in this implementation are 47077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com on the return value of inflate() as noted below, when inflate() returns early 47177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of 47277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com memory for a sliding window when Z_FINISH is used. 473d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 474d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If a preset dictionary is needed after this call (see inflateSetDictionary 47577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com below), inflate sets strm->adler to the Adler-32 checksum of the dictionary 476d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis chosen by the compressor and returns Z_NEED_DICT; otherwise it sets 47777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com strm->adler to the Adler-32 checksum of all output produced so far (that is, 478d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described 47977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com below. At the end of the stream, inflate() checks that its computed adler32 480d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis checksum is equal to that saved by the compressor and returns Z_STREAM_END 481d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis only if the checksum is correct. 482d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 48377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflate() can decompress and check either zlib-wrapped or gzip-wrapped 48477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflate data. The header type is detected automatically, if requested when 48577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com initializing with inflateInit2(). Any information contained in the gzip 48677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com header is not retained, so applications that need that information should 48777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com instead use raw inflate, see inflateInit2() below, or inflateBack() and 48877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com perform their own processing of the gzip header and trailer. When processing 48977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output 49077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com producted so far. The CRC-32 is checked against the gzip trailer. 491d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 492d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflate() returns Z_OK if some progress has been made (more input processed 493d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis or more output produced), Z_STREAM_END if the end of the compressed data has 494d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis been reached and all uncompressed output has been produced, Z_NEED_DICT if a 495d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis preset dictionary is needed at this point, Z_DATA_ERROR if the input data was 496d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis corrupted (input stream not conforming to the zlib format or incorrect check 497d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis value), Z_STREAM_ERROR if the stream structure was inconsistent (for example 49877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, 499d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_BUF_ERROR if no progress is possible or if there was not enough room in the 50077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and 501d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflate() can be called again with more input and more output space to 50277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com continue decompressing. If Z_DATA_ERROR is returned, the application may 50377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com then call inflateSync() to look for a good compression block if a partial 50477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com recovery of the data is desired. 505d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 506d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 507d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 508d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); 509d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 510d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis All dynamically allocated data structures for this stream are freed. 51177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This function discards any unprocessed input and does not flush any pending 51277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output. 513d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 514d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state 51577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com was inconsistent. In the error case, msg may be set but then points to a 516d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis static string (which must not be deallocated). 517d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 518d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 51977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 520d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis /* Advanced functions */ 521d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 522d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 523d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The following functions are needed only in some special applications. 524d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 525d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 526d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 527d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, 528d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int level, 529d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int method, 530d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int windowBits, 531d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int memLevel, 532d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int strategy)); 533d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 53477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This is another version of deflateInit with more compression options. The 53577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com fields next_in, zalloc, zfree and opaque must be initialized before by the 53677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com caller. 537d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 53877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The method parameter is the compression method. It must be Z_DEFLATED in 539d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis this version of the library. 540d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 541d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The windowBits parameter is the base two logarithm of the window size 54277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (the size of the history buffer). It should be in the range 8..15 for this 54377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com version of the library. Larger values of this parameter result in better 54477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression at the expense of memory usage. The default value is 15 if 545d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateInit is used instead. 546d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 54777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com windowBits can also be -8..-15 for raw deflate. In this case, -windowBits 54877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com determines the window size. deflate() will then generate raw deflate data 549d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis with no zlib header or trailer, and will not compute an adler32 check value. 550d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 55177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com windowBits can also be greater than 15 for optional gzip encoding. Add 552d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 16 to windowBits to write a simple gzip header and trailer around the 55377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressed data instead of a zlib wrapper. The gzip header will have no 55477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com file name, no extra data, no comment, no modification time (set to zero), no 55577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com header crc, and the operating system will be set to 255 (unknown). If a 556d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gzip stream is being written, strm->adler is a crc32 instead of an adler32. 557d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 558d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The memLevel parameter specifies how much memory should be allocated 55977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com for the internal compression state. memLevel=1 uses minimum memory but is 56077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com slow and reduces compression ratio; memLevel=9 uses maximum memory for 56177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com optimal speed. The default value is 8. See zconf.h for total memory usage 56277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com as a function of windowBits and memLevel. 563d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 56477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The strategy parameter is used to tune the compression algorithm. Use the 565d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a 566d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no 567d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis string match), or Z_RLE to limit match distances to one (run-length 56877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com encoding). Filtered data consists mostly of small values with a somewhat 56977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com random distribution. In this case, the compression algorithm is tuned to 57077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compress them better. The effect of Z_FILTERED is to force more Huffman 571d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis coding and less string matching; it is somewhat intermediate between 57277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as 57377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The 57477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com strategy parameter only affects the compression ratio but not the 57577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com correctness of the compressed output even if it is not set appropriately. 57677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler 57777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com decoder for special applications. 57877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 57977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough 58077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid 58177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is 58277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com incompatible with the version assumed by the caller (ZLIB_VERSION). msg is 58377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com set to null if there is no error message. deflateInit2 does not perform any 58477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression: this will be done by deflate(). 585d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 586d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 587d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, 588d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const Bytef *dictionary, 589d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt dictLength)); 590d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 591d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Initializes the compression dictionary from the given byte sequence 59277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com without producing any compressed output. When using the zlib format, this 59377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com function must be called immediately after deflateInit, deflateInit2 or 59477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateReset, and before any call of deflate. When doing raw deflate, this 59577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com function must be called either before any call of deflate, or immediately 59677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com after the completion of a deflate block, i.e. after all input has been 59777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com consumed and all output has been delivered when using any of the flush 59877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The 59977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressor and decompressor must use exactly the same dictionary (see 60077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateSetDictionary). 601d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 602d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The dictionary should consist of strings (byte sequences) that are likely 603d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis to be encountered later in the data to be compressed, with the most commonly 60477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com used strings preferably put towards the end of the dictionary. Using a 605d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis dictionary is most useful when the data to be compressed is short and can be 606d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis predicted with good accuracy; the data can then be compressed better than 607d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis with the default empty dictionary. 608d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 609d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Depending on the size of the compression data structures selected by 610d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateInit or deflateInit2, a part of the dictionary may in effect be 61177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com discarded, for example if the dictionary is larger than the window size 61277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com provided in deflateInit or deflateInit2. Thus the strings most likely to be 61377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com useful should be put at the end of the dictionary, not at the front. In 61477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com addition, the current implementation of deflate will use at most the window 61577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com size minus 262 bytes of the provided dictionary. 616d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 617d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Upon return of this function, strm->adler is set to the adler32 value 618d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis of the dictionary; the decompressor may later use this value to determine 61977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com which dictionary has been used by the compressor. (The adler32 value 620d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis applies to the whole dictionary even if only a subset of the dictionary is 621d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis actually used by the compressor.) If a raw deflate was requested, then the 622d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis adler32 value is not computed and strm->adler is not set. 623d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 624d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a 62577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is 626d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inconsistent (for example if deflate has already been called for this stream 62777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com or if not at a block boundary for raw deflate). deflateSetDictionary does 62877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com not perform any compression: this will be done by deflate(). 629d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 630d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 631d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, 632d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis z_streamp source)); 633d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 634d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Sets the destination stream as a complete copy of the source stream. 635d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 636d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This function can be useful when several compression strategies will be 637d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis tried, for example when there are several ways of pre-processing the input 63877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com data with a filter. The streams that will be discarded should then be freed 639d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis by calling deflateEnd. Note that deflateCopy duplicates the internal 64077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression state which can be quite large, so this strategy is slow and can 64177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com consume lots of memory. 642d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 643d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not 644d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis enough memory, Z_STREAM_ERROR if the source stream state was inconsistent 64577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (such as zalloc being Z_NULL). msg is left unchanged in both source and 646d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis destination. 647d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 648d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 649d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); 650d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 651d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This function is equivalent to deflateEnd followed by deflateInit, 65277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com but does not free and reallocate all the internal compression state. The 65377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream will keep the same compression level and any other attributes that 65477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com may have been set by deflateInit2. 655d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 65677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source 65777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream state was inconsistent (such as zalloc or state being Z_NULL). 658d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 659d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 660d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, 661d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int level, 662d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int strategy)); 663d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 664d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Dynamically update the compression level and compression strategy. The 665d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis interpretation of level and strategy is as in deflateInit2. This can be 666d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis used to switch between compression and straight copy of the input data, or 66777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to switch to a different kind of input data requiring a different strategy. 66877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If the compression level is changed, the input available so far is 66977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressed with the old level (and may be flushed); the new level will take 67077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com effect only at the next call of deflate(). 671d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 672d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Before the call of deflateParams, the stream state must be set as for 67377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com a call of deflate(), since the currently available input may have to be 67477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressed and flushed. In particular, strm->avail_out must be non-zero. 675d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 676d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source 67777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if 67877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com strm->avail_out was zero. 679d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 680d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 681d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, 682d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int good_length, 683d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int max_lazy, 684d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int nice_length, 685d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int max_chain)); 686d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 687d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Fine tune deflate's internal compression parameters. This should only be 688d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis used by someone who understands the algorithm used by zlib's deflate for 689d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis searching for the best matching string, and even then only by the most 690d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis fanatic optimizer trying to squeeze out the last compressed bit for their 691d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis specific input data. Read the deflate.c source code for the meaning of the 692d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis max_lazy, good_length, nice_length, and max_chain parameters. 693d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 694d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateTune() can be called after deflateInit() or deflateInit2(), and 695d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. 696d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis */ 697d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 698d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, 699d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uLong sourceLen)); 700d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 701d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateBound() returns an upper bound on the compressed size after 70277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflation of sourceLen bytes. It must be called after deflateInit() or 70377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateInit2(), and after deflateSetHeader(), if used. This would be used 70477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to allocate an output buffer for deflation in a single pass, and so would be 70577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com called before deflate(). If that first deflate() call is provided the 70677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com sourceLen input bytes, an output buffer allocated to the size returned by 70777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed 70877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to return Z_STREAM_END. Note that it is possible for the compressed size to 70977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com be larger than the value returned by deflateBound() if flush options other 71077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com than Z_FINISH or Z_NO_FLUSH are used. 711d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 712d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 71377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, 71477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com unsigned *pending, 71577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com int *bits)); 71677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 71777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflatePending() returns the number of bytes and bits of output that have 71877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com been generated, but not yet provided in the available output. The bytes not 71977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com provided would be due to the available output space having being consumed. 72077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The number of bits of output not provided are between 0 and 7, where they 72177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com await more bits to join them in order to fill out a full byte. If pending 72277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com or bits are Z_NULL, then those values are not set. 72377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 72477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source 72577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream state was inconsistent. 72677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com */ 72777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 728d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, 729d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int bits, 730d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int value)); 731d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 732d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflatePrime() inserts bits in the deflate output stream. The intent 73377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is that this function is used to start off the deflate output with the bits 73477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com leftover from a previous deflate stream when appending to it. As such, this 73577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com function can only be used for raw deflate, and must be used before the first 73677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflate() call after a deflateInit2() or deflateReset(). bits must be less 73777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com than or equal to 16, and that many of the least significant bits of value 73877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will be inserted in the output. 73977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 74077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough 74177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the 74277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com source stream state was inconsistent. 743d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 744d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 745d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, 746d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gz_headerp head)); 747d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 74877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateSetHeader() provides gzip header information for when a gzip 749d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis stream is requested by deflateInit2(). deflateSetHeader() may be called 750d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis after deflateInit2() or deflateReset() and before the first call of 751d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate(). The text, time, os, extra field, name, and comment information 752d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis in the provided gz_header structure are written to the gzip header (xflag is 753d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis ignored -- the extra flags are set according to the compression level). The 754d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis caller must assure that, if not Z_NULL, name and comment are terminated with 755d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis a zero byte, and that if extra is not Z_NULL, that extra_len bytes are 756d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis available there. If hcrc is true, a gzip header crc is included. Note that 757d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the current versions of the command-line version of gzip (up through version 758d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1.3.x) do not support header crc's, and will report that it is a "multi-part 759d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gzip file" and give up. 760d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 76177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If deflateSetHeader is not used, the default gzip header has text false, 762d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the time set to zero, and os set to 255, with no extra, name, or comment 763d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis fields. The gzip header is returned to the default state by deflateReset(). 764d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 76577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source 766d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis stream state was inconsistent. 767d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 768d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 769d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 770d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, 771d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int windowBits)); 772d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 77377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This is another version of inflateInit with an extra parameter. The 774d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis fields next_in, avail_in, zalloc, zfree and opaque must be initialized 775d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis before by the caller. 776d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 777d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The windowBits parameter is the base two logarithm of the maximum window 778d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis size (the size of the history buffer). It should be in the range 8..15 for 77977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com this version of the library. The default value is 15 if inflateInit is used 78077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com instead. windowBits must be greater than or equal to the windowBits value 781d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis provided to deflateInit2() while compressing, or it must be equal to 15 if 78277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateInit2() was not used. If a compressed stream with a larger window 783d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis size is given as input, inflate() will return with the error code 784d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_DATA_ERROR instead of trying to allocate a larger window. 785d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 78677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com windowBits can also be zero to request that inflate use the window size in 78777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the zlib header of the compressed stream. 78877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 78977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com windowBits can also be -8..-15 for raw inflate. In this case, -windowBits 79077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com determines the window size. inflate() will then process raw deflate data, 791d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis not looking for a zlib or gzip header, not generating a check value, and not 79277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com looking for any check values for comparison at the end of the stream. This 793d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis is for use with other formats that use the deflate compressed data format 79477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com such as zip. Those formats provide their own check values. If a custom 795d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis format is developed using the raw deflate format for compressed data, it is 796d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis recommended that a check value such as an adler32 or a crc32 be applied to 797d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the uncompressed data as is done in the zlib, gzip, and zip formats. For 79877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com most applications, the zlib format should be used as is. Note that comments 799d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis above on the use in deflateInit2() applies to the magnitude of windowBits. 800d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 80177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com windowBits can also be greater than 15 for optional gzip decoding. Add 802d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 32 to windowBits to enable zlib and gzip decoding with automatic header 803d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis detection, or add 16 to decode only the gzip format (the zlib format will 80477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a 80577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com crc32 instead of an adler32. 806d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 807d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough 80877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com memory, Z_VERSION_ERROR if the zlib library version is incompatible with the 80977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com version assumed by the caller, or Z_STREAM_ERROR if the parameters are 81077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com invalid, such as a null pointer to the structure. msg is set to null if 81177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com there is no error message. inflateInit2 does not perform any decompression 81277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com apart from possibly reading the zlib header if present: actual decompression 81377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will be done by inflate(). (So next_in and avail_in may be modified, but 81477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com next_out and avail_out are unused and unchanged.) The current implementation 81577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of inflateInit2() does not process any header information -- that is 81677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deferred until inflate() is called. 817d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 818d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 819d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, 820d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const Bytef *dictionary, 821d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uInt dictLength)); 822d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 823d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Initializes the decompression dictionary from the given uncompressed byte 82477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com sequence. This function must be called immediately after a call of inflate, 82577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com if that call returned Z_NEED_DICT. The dictionary chosen by the compressor 826d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis can be determined from the adler32 value returned by that call of inflate. 827d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The compressor and decompressor must use exactly the same dictionary (see 82877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateSetDictionary). For raw inflate, this function can be called at any 82977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com time to set the dictionary. If the provided dictionary is smaller than the 83077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com window and there is already data in the window, then the provided dictionary 83177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will amend what's there. The application must insure that the dictionary 83277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that was used for compression is provided. 833d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 834d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a 83577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is 836d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the 83777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com expected one (incorrect adler32 value). inflateSetDictionary does not 838d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis perform any decompression: this will be done by subsequent calls of 839d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflate(). 840d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 841d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 84277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, 84377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Bytef *dictionary, 84477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uInt *dictLength)); 845d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 84677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Returns the sliding dictionary being maintained by inflate. dictLength is 84777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com set to the number of bytes in the dictionary, and that many bytes are copied 84877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to dictionary. dictionary must have enough space, where 32768 bytes is 84977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com always enough. If inflateGetDictionary() is called with dictionary equal to 85077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Z_NULL, then only the dictionary length is returned, and nothing is copied. 85177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Similary, if dictLength is Z_NULL, then it is not set. 85277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 85377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the 85477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream state is inconsistent. 85577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 856d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 85777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); 85877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 85977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Skips invalid compressed data until a possible full flush point (see above 86077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com for the description of deflate with Z_FULL_FLUSH) can be found, or until all 86177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com available input is skipped. No output is provided. 86277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 86377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateSync searches for a 00 00 FF FF pattern in the compressed data. 86477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com All full flush points have this pattern, but not all occurrences of this 86577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com pattern are full flush points. 86677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 86777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateSync returns Z_OK if a possible full flush point has been found, 86877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point 86977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. 87077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com In the success case, the application may save the current current value of 87177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com total_in which indicates where valid compressed data was found. In the 87277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com error case, the application may repeatedly call inflateSync, providing more 87377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com input each time, until success or end of the input data. 874d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 875d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 876d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, 877d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis z_streamp source)); 878d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 879d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Sets the destination stream as a complete copy of the source stream. 880d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 881d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This function can be useful when randomly accessing a large stream. The 882d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis first pass through the stream can periodically record the inflate state, 883d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis allowing restarting inflate at those points when randomly accessing the 884d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis stream. 885d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 886d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not 887d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis enough memory, Z_STREAM_ERROR if the source stream state was inconsistent 88877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (such as zalloc being Z_NULL). msg is left unchanged in both source and 889d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis destination. 890d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 891d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 892d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); 893d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 894d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This function is equivalent to inflateEnd followed by inflateInit, 89577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com but does not free and reallocate all the internal decompression state. The 89677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream will keep attributes that may have been set by inflateInit2. 897d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 89877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source 89977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream state was inconsistent (such as zalloc or state being Z_NULL). 90077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 90177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 90277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, 90377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com int windowBits)); 90477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 90577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This function is the same as inflateReset, but it also permits changing 90677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the wrap and window size requests. The windowBits parameter is interpreted 90777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the same as it is for inflateInit2. 90877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 90977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source 91077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream state was inconsistent (such as zalloc or state being Z_NULL), or if 91177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the windowBits parameter is invalid. 912d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 913d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 914d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, 915d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int bits, 916d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int value)); 917d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 918d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This function inserts bits in the inflate input stream. The intent is 91977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that this function is used to start inflating at a bit position in the 92077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com middle of a byte. The provided bits will be used before any bytes are used 92177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com from next_in. This function should only be used with raw inflate, and 92277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com should be used before the first inflate() call after inflateInit2() or 92377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateReset(). bits must be less than or equal to 16, and that many of the 92477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com least significant bits of value will be inserted in the input. 92577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 92677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If bits is negative, then the input stream bit buffer is emptied. Then 92777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflatePrime() can be called again to put bits in the buffer. This is used 92877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to clear out bits leftover after feeding inflate a block description prior 92977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to feeding inflate codes. 93077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 93177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source 932d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis stream state was inconsistent. 933d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 934d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 93577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); 93677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 93777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This function returns two values, one in the lower 16 bits of the return 93877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com value, and the other in the remaining upper bits, obtained by shifting the 93977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com return value down 16 bits. If the upper value is -1 and the lower value is 94077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zero, then inflate() is currently decoding information outside of a block. 94177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If the upper value is -1 and the lower value is non-zero, then inflate is in 94277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the middle of a stored block, with the lower value equaling the number of 94377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com bytes from the input remaining to copy. If the upper value is not -1, then 94477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com it is the number of bits back from the current bit position in the input of 94577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the code (literal or length/distance pair) currently being processed. In 94677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that case the lower value is the number of bytes already emitted for that 94777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com code. 94877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 94977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com A code is being processed if inflate is waiting for more input to complete 95077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com decoding of the code, or if it has completed decoding but is waiting for 95177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com more output space to write the literal or match data. 95277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 95377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateMark() is used to mark locations in the input data for random 95477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com access, which may be at bit positions, and to note those cases where the 95577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output of a code may span boundaries of random access blocks. The current 95677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com location in the input stream can be determined from avail_in and data_type 95777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com as noted in the description for the Z_BLOCK flush parameter for inflate. 95877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 95977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateMark returns the value noted above or -1 << 16 if the provided 96077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com source stream state was inconsistent. 96177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 96277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 963d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, 964d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gz_headerp head)); 965d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 96677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateGetHeader() requests that gzip header information be stored in the 967d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis provided gz_header structure. inflateGetHeader() may be called after 968d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateInit2() or inflateReset(), and before the first call of inflate(). 969d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis As inflate() processes the gzip stream, head->done is zero until the header 970d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis is completed, at which time head->done is set to one. If a zlib stream is 971d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis being decoded, then head->done is set to -1 to indicate that there will be 97277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be 97377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com used to force inflate() to return immediately after header processing is 97477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com complete and before any actual data is decompressed. 975d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 97677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The text, time, xflags, and os fields are filled in with the gzip header 977d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis contents. hcrc is set to true if there is a header CRC. (The header CRC 97877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com was valid if done is set to one.) If extra is not Z_NULL, then extra_max 979d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis contains the maximum number of bytes to write to extra. Once done is true, 980d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis extra_len contains the actual extra field length, and extra contains the 981d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis extra field, or that field truncated if extra_max is less than extra_len. 982d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If name is not Z_NULL, then up to name_max characters are written there, 983d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis terminated with a zero unless the length is greater than name_max. If 984d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis comment is not Z_NULL, then up to comm_max characters are written there, 98577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com terminated with a zero unless the length is greater than comm_max. When any 98677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of extra, name, or comment are not Z_NULL and the respective field is not 98777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com present in the header, then that field is set to Z_NULL to signal its 988d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis absence. This allows the use of deflateSetHeader() with the returned 989d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis structure to duplicate the header. However if those fields are set to 990d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis allocated memory, then the application will need to save those pointers 991d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis elsewhere so that they can be eventually freed. 992d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 99377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If inflateGetHeader is not used, then the header information is simply 994d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis discarded. The header is always checked for validity, including the header 995d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis CRC if present. inflateReset() will reset the process to discard the header 996d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis information. The application would need to call inflateGetHeader() again to 997d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis retrieve the header from the next gzip stream. 998d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 99977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source 1000d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis stream state was inconsistent. 1001d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1002d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1003d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1004d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, 1005d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis unsigned char FAR *window)); 1006d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1007d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Initialize the internal stream state for decompression using inflateBack() 1008d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis calls. The fields zalloc, zfree and opaque in strm must be initialized 1009d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis before the call. If zalloc and zfree are Z_NULL, then the default library- 1010d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis derived memory allocation routines are used. windowBits is the base two 1011d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis logarithm of the window size, in the range 8..15. window is a caller 1012d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis supplied buffer of that size. Except for special applications where it is 1013d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis assured that deflate was used with small window sizes, windowBits must be 15 1014d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis and a 32K byte window must be supplied to be able to decompress general 1015d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate streams. 1016d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1017d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis See inflateBack() for the usage of these routines. 1018d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1019d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of 102077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the parameters are invalid, Z_MEM_ERROR if the internal state could not be 102177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com allocated, or Z_VERSION_ERROR if the version of the library does not match 102277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the version of the header file. 1023d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1024d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 102577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comtypedef unsigned (*in_func) OF((void FAR *, 102677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com z_const unsigned char FAR * FAR *)); 1027d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwistypedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); 1028d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1029d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, 1030d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis in_func in, void FAR *in_desc, 1031d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis out_func out, void FAR *out_desc)); 1032d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1033d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBack() does a raw inflate with a single call using a call-back 103477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com interface for input and output. This is potentially more efficient than 103577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflate() for file i/o applications, in that it avoids copying between the 103677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output and the sliding window by simply making the window itself the output 103777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer. inflate() can be faster on modern CPUs when used with large 103877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffers. inflateBack() trusts the application to not change the output 103977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer passed by the output function, at least until inflateBack() returns. 1040d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1041d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBackInit() must be called first to allocate the internal state 1042d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis and to initialize the state with the user-provided window buffer. 1043d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBack() may then be used multiple times to inflate a complete, raw 104477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflate stream with each call. inflateBackEnd() is then called to free the 104577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com allocated state. 1046d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1047d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis A raw deflate stream is one with no zlib or gzip header or trailer. 1048d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis This routine would normally be used in a utility that reads zip or gzip 1049d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis files and writes out uncompressed files. The utility would decode the 105077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com header and process the trailer on its own, hence this routine expects only 105177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the raw deflate stream to decompress. This is different from the normal 105277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com behavior of inflate(), which expects either a zlib or gzip header and 1053d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis trailer around the deflate stream. 1054d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1055d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBack() uses two subroutines supplied by the caller that are then 1056d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis called by inflateBack() for input and output. inflateBack() calls those 1057d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis routines until it reads a complete deflate stream and writes out all of the 1058d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uncompressed data, or until it encounters an error. The function's 1059d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis parameters and return types are defined above in the in_func and out_func 1060d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis typedefs. inflateBack() will call in(in_desc, &buf) which should return the 1061d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis number of bytes of provided input, and a pointer to that input in buf. If 1062d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis there is no input available, in() must return zero--buf is ignored in that 1063d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis case--and inflateBack() will return a buffer error. inflateBack() will call 1064d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() 1065d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis should return zero on success, or non-zero on failure. If out() returns 1066d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis non-zero, inflateBack() will return with an error. Neither in() nor out() 1067d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis are permitted to change the contents of the window provided to 1068d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBackInit(), which is also the buffer that out() uses to write from. 1069d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The length written by out() will be at most the window size. Any non-zero 1070d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis amount of input may be provided by in(). 1071d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1072d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis For convenience, inflateBack() can be provided input on the first call by 1073d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis setting strm->next_in and strm->avail_in. If that input is exhausted, then 1074d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis in() will be called. Therefore strm->next_in must be initialized before 1075d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called 1076d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in 1077d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis must also be initialized, and then if strm->avail_in is not zero, input will 107877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com initially be taken from strm->next_in[0 .. strm->avail_in - 1]. 1079d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1080d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The in_desc and out_desc parameters of inflateBack() is passed as the 1081d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis first parameter of in() and out() respectively when they are called. These 1082d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis descriptors can be optionally used to pass any information that the caller- 1083d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis supplied in() and out() functions need to do their job. 1084d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1085d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis On return, inflateBack() will set strm->next_in and strm->avail_in to 1086d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis pass back any unused input that was provided by the last in() call. The 1087d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR 108877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com if in() or out() returned an error, Z_DATA_ERROR if there was a format error 108977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com in the deflate stream (in which case strm->msg is set to indicate the nature 109077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of the error), or Z_STREAM_ERROR if the stream was not properly initialized. 109177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com In the case of Z_BUF_ERROR, an input or output error can be distinguished 109277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com using strm->next_in which will be Z_NULL only if in() returned an error. If 109377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning 109477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com non-zero. (in() will always be called before out(), so strm->next_in is 109577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com assured to be defined if out() returns non-zero.) Note that inflateBack() 109677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com cannot return Z_OK. 1097d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1098d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1099d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); 1100d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1101d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis All memory allocated by inflateBackInit() is freed. 1102d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1103d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream 1104d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis state was inconsistent. 1105d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1106d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1107d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); 1108d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* Return flags indicating compile-time options. 1109d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1110d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: 1111d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1.0: size of uInt 1112d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 3.2: size of uLong 1113d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 5.4: size of voidpf (pointer) 1114d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 7.6: size of z_off_t 1115d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1116d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Compiler, assembler, and debug options: 1117d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 8: DEBUG 1118d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 9: ASMV or ASMINF -- use ASM code 1119d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention 1120d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 11: 0 (reserved) 1121d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1122d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis One-time table building (smaller code, but not thread-safe if true): 1123d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 12: BUILDFIXED -- build static block decoding tables when needed 1124d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed 1125d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 14,15: 0 (reserved) 1126d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1127d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Library content (indicates missing functionality): 1128d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking 1129d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflate code when not needed) 1130d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect 1131d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis and decode gzip streams (to avoid linking crc code) 1132d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 18-19: 0 (reserved) 1133d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1134d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Operation variations (changes in library functionality): 1135d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate 1136d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 21: FASTEST -- deflate algorithm with only one, lowest compression level 1137d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 22,23: 0 (reserved) 1138d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1139d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis The sprintf variant used by gzprintf (zero is best): 1140d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format 1141d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! 1142d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 26: 0 = returns value, 1 = void -- 1 means inferred string length returned 1143d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1144d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Remainder: 1145d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 27-31: 0 (reserved) 1146d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis */ 1147d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 114877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#ifndef Z_SOLO 1149d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1150d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis /* utility functions */ 1151d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1152d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 115377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The following utility functions are implemented on top of the basic 115477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream-oriented functions. To simplify the interface, some default options 115577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com are assumed (compression level and memory usage, standard memory allocation 115677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com functions). The source code of these utility functions can be modified if 115777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com you need special options. 1158d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1159d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1160d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, 1161d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const Bytef *source, uLong sourceLen)); 1162d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1163d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Compresses the source buffer into the destination buffer. sourceLen is 116477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the byte length of the source buffer. Upon entry, destLen is the total size 116577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of the destination buffer, which must be at least the value returned by 116677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressBound(sourceLen). Upon exit, destLen is the actual size of the 1167d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compressed buffer. 116877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1169d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compress returns Z_OK if success, Z_MEM_ERROR if there was not 1170d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis enough memory, Z_BUF_ERROR if there was not enough room in the output 1171d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis buffer. 1172d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1173d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1174d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, 1175d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const Bytef *source, uLong sourceLen, 1176d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int level)); 1177d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 117877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Compresses the source buffer into the destination buffer. The level 1179d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis parameter has the same meaning as in deflateInit. sourceLen is the byte 118077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com length of the source buffer. Upon entry, destLen is the total size of the 1181d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis destination buffer, which must be at least the value returned by 118277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressBound(sourceLen). Upon exit, destLen is the actual size of the 1183d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compressed buffer. 1184d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1185d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough 1186d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis memory, Z_BUF_ERROR if there was not enough room in the output buffer, 1187d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Z_STREAM_ERROR if the level parameter is invalid. 1188d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1189d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1190d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); 1191d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1192d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis compressBound() returns an upper bound on the compressed size after 119377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compress() or compress2() on sourceLen bytes. It would be used before a 119477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compress() or compress2() call to allocate the destination buffer. 1195d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1196d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1197d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, 1198d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const Bytef *source, uLong sourceLen)); 1199d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1200d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Decompresses the source buffer into the destination buffer. sourceLen is 120177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the byte length of the source buffer. Upon entry, destLen is the total size 120277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of the destination buffer, which must be large enough to hold the entire 120377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uncompressed data. (The size of the uncompressed data must have been saved 120477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com previously by the compressor and transmitted to the decompressor by some 120577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com mechanism outside the scope of this compression library.) Upon exit, destLen 120677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is the actual size of the uncompressed buffer. 1207d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1208d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uncompress returns Z_OK if success, Z_MEM_ERROR if there was not 1209d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis enough memory, Z_BUF_ERROR if there was not enough room in the output 121077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In 121177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the case where there is not enough room, uncompress() will fill the output 121277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buffer with the uncompressed data up to that point. 1213d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1214d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 121577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com /* gzip file access functions */ 1216d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 121777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 121877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com This library supports reading and writing files in gzip (.gz) format with 121977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com an interface similar to that of stdio, using the functions that start with 122077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com "gz". The gzip format is different from the zlib format. gzip is a gzip 122177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com wrapper, documented in RFC 1952, wrapped around a deflate stream. 122277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 122377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 122477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comtypedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ 1225d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1226d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 122777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); 122877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 122977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Opens a gzip (.gz) file for reading or writing. The mode parameter is as 123077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com in fopen ("rb" or "wb") but can also include a compression level ("wb9") or 123177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only 123277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' 123377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com for fixed code compression as in "wb9F". (See the description of 123477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateInit2 for more information about the strategy parameter.) 'T' will 123577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com request transparent writing or appending with no compression and not using 123677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the gzip format. 123777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 123877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com "a" can be used instead of "w" to request that the gzip stream that will 123977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com be written be appended to the file. "+" will result in an error, since 124077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com reading and writing to the same gzip file is not supported. The addition of 124177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com "x" when writing will create the file exclusively, which fails if the file 124277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com already exists. On systems that support it, the addition of "e" when 124377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com reading or writing will set the flag to close the file on an execve() call. 124477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 124577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com These functions, as well as gzip, will read and decode a sequence of gzip 124677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com streams in a file. The append function of gzopen() can be used to create 124777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com such a file. (Also see gzflush() for another way to do this.) When 124877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com appending, gzopen does not test whether the file begins with a gzip stream, 124977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com nor does it look for the end of the gzip streams to begin appending. gzopen 125077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will simply append a gzip stream to the existing file. 1251d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1252d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gzopen can be used to read a file which is not in gzip format; in this 125377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com case gzread will directly read from the file without decompression. When 125477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com reading, this will be detected automatically by looking for the magic two- 125577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com byte gzip header. 125677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 125777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzopen returns NULL if the file could not be opened, if there was 125877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com insufficient memory to allocate the gzFile state, or if an invalid mode was 125977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). 126077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com errno can be checked to determine if the reason gzopen failed was that the 126177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com file could not be opened. 126277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 1263d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 126477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); 126577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 126677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzdopen associates a gzFile with the file descriptor fd. File descriptors 126777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com are obtained from calls like open, dup, creat, pipe or fileno (if the file 126877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com has been previously opened with fopen). The mode parameter is as in gzopen. 126977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 127077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The next call of gzclose on the returned gzFile will also close the file 127177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor 127277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, 127377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com mode);. The duplicated descriptor should be saved to avoid a leak, since 127477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzdopen does not close fd if it fails. If you are using fileno() to get the 127577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com file descriptor from a FILE *, then you will have to use dup() to avoid 127677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com double-close()ing the file descriptor. Both gzclose() and fclose() will 127777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com close the associated file descriptor, so they need to have different file 127877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com descriptors. 127977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 128077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzdopen returns NULL if there was insufficient memory to allocate the 128177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not 128277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com provided, or '+' was provided), or if fd is -1. The file descriptor is not 128377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com used until the next gz* read, write, seek, or close operation, so gzdopen 128477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will not detect if fd is invalid (unless fd is -1). 128577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 1286d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 128777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); 1288d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 128977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Set the internal buffer size used by this library's functions. The 129077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com default buffer size is 8192 bytes. This function must be called after 129177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzopen() or gzdopen(), and before any other calls that read or write the 129277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com file. The buffer memory allocation is always deferred to the first read or 129377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com write. Two buffers are allocated, either both of the specified size when 129477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com writing, or one of the specified size and the other twice that size when 129577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com reading. A larger buffer size of, for example, 64K or 128K bytes will 129677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com noticeably increase the speed of decompression (reading). 129777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 129877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The new buffer size also affects the maximum length for gzprintf(). 129977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 130077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzbuffer() returns 0 on success, or -1 on failure, such as being called 130177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com too late. 1302d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1303d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1304d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); 1305d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 130677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Dynamically update the compression level or strategy. See the description 1307d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis of deflateInit2 for the meaning of these parameters. 130877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1309d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not 1310d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis opened for writing. 1311d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1312d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 131377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); 1314d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 131577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Reads the given number of uncompressed bytes from the compressed file. If 131677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the input file is not in gzip format, gzread copies the given number of 131777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com bytes into the buffer directly from the file. 131877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 131977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com After reaching the end of a gzip stream in the input, gzread will continue 132077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to read, looking for another gzip stream. Any number of gzip streams may be 132177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com concatenated in the input file, and will all be decompressed by gzread(). 132277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If something other than a gzip stream is encountered after a gzip stream, 132377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that remaining trailing garbage is ignored (and no error is returned). 132477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 132577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzread can be used to read a gzip file that is being concurrently written. 132677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Upon reaching the end of the input, gzread will return with the available 132777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then 132877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzclearerr can be used to clear the end of file indicator in order to permit 132977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzread to be tried again. Z_OK indicates that a gzip stream was completed 133077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com on the last gzread. Z_BUF_ERROR indicates that the input file ended in the 133177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com middle of a gzip stream. Note that gzread does not return -1 in the event 133277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com of an incomplete gzip stream. This error is deferred until gzclose(), which 133377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip 133477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com stream. Alternatively, gzerror can be used before gzclose to detect this 133577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com case. 133677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 133777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzread returns the number of uncompressed bytes actually read, less than 133877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com len for end of file, or -1 for error. 133977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 1340d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 134177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzwrite OF((gzFile file, 134277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com voidpc buf, unsigned len)); 1343d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1344d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Writes the given number of uncompressed bytes into the compressed file. 134577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzwrite returns the number of uncompressed bytes written or 0 in case of 134677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com error. 1347d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1348d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 134977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); 1350d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 135177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Converts, formats, and writes the arguments to the compressed file under 135277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com control of the format string, as in fprintf. gzprintf returns the number of 135377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uncompressed bytes actually written, or 0 in case of error. The number of 135477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uncompressed bytes written is limited to 8191, or one less than the buffer 135577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com size given to gzbuffer(). The caller should assure that this limit is not 135677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com exceeded. If it is exceeded, then gzprintf() will return an error (0) with 135777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com nothing written. In this case, there may also be a buffer overflow with 135877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com unpredictable consequences, which is possible only if zlib was compiled with 135977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com the insecure functions sprintf() or vsprintf() because the secure snprintf() 136077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com or vsnprintf() functions were not available. This can be determined using 136177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zlibCompileFlags(). 1362d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1363d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1364d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); 1365d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 136677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Writes the given null-terminated string to the compressed file, excluding 1367d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the terminating null character. 136877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 136977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzputs returns the number of characters written, or -1 in case of error. 1370d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1371d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1372d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); 1373d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 137477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Reads bytes from the compressed file until len-1 characters are read, or a 137577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com newline character is read and transferred to buf, or an end-of-file 137677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com condition is encountered. If any characters are read or if len == 1, the 137777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com string is terminated with a null character. If no characters are read due 137877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com to an end-of-file or len < 1, then the buffer is left untouched. 137977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 138077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzgets returns buf which is a null-terminated string, or it returns NULL 138177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com for end-of-file or in case of error. If there was an error, the contents at 138277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com buf are indeterminate. 1383d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1384d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 138577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); 1386d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 138777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Writes c, converted to an unsigned char, into the compressed file. gzputc 138877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com returns the value that was written, or -1 in case of error. 1389d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1390d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 139177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzgetc OF((gzFile file)); 1392d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 139377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Reads one byte from the compressed file. gzgetc returns this byte or -1 139477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com in case of end of file or error. This is implemented as a macro for speed. 139577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com As such, it does not do all of the checking the other functions do. I.e. 139677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com it does not check to see if file is NULL, nor whether the structure file 139777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com points to has been clobbered or not. 1398d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1399d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 140077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); 1401d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 140277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Push one character back onto the stream to be read as the first character 140377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com on the next read. At least one character of push-back is allowed. 140477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzungetc() returns the character pushed, or -1 on failure. gzungetc() will 140577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com fail if c is -1, and may fail if a character has been pushed but not read 140677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com yet. If gzungetc is used immediately after gzopen or gzdopen, at least the 140777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com output buffer size of pushed characters is allowed. (See gzbuffer above.) 140877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The pushed character will be discarded if the stream is repositioned with 140977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzseek() or gzrewind(). 1410d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1411d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 141277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); 1413d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 141477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Flushes all pending output into the compressed file. The parameter flush 141577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is as in the deflate() function. The return value is the zlib error number 141677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (see function gzerror below). gzflush is only permitted when writing. 141777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 141877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If the flush parameter is Z_FINISH, the remaining data is written and the 141977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzip stream is completed in the output. If gzwrite() is called again, a new 142077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzip stream will be started in the output. gzread() is able to read such 142177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com concatented gzip streams. 142277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 142377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzflush should be called only when strictly necessary because it will 142477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com degrade compression if called too often. 1425d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1426d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1427d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 142877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, 142977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com z_off_t offset, int whence)); 143077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 143177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Sets the starting position for the next gzread or gzwrite on the given 143277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressed file. The offset represents a number of bytes in the 143377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uncompressed data stream. The whence parameter is defined as in lseek(2); 1434d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the value SEEK_END is not supported. 143577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1436d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis If the file is opened for reading, this function is emulated but can be 143777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com extremely slow. If the file is opened for writing, only forward seeks are 1438d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis supported; gzseek then compresses a sequence of zeroes up to the new 1439d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis starting position. 1440d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 144177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzseek returns the resulting offset location as measured in bytes from 1442d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis the beginning of the uncompressed stream, or -1 in case of error, in 1443d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis particular if the file is opened for writing and the new starting position 1444d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis would be before the current position. 1445d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1446d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1447d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT gzrewind OF((gzFile file)); 1448d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1449d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Rewinds the given file. This function is supported only for reading. 1450d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 145177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) 1452d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1453d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 145477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 1455d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); 145677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 145777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Returns the starting position for the next gzread or gzwrite on the given 145877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressed file. This position represents a number of bytes in the 145977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com uncompressed data stream, and is zero when starting, even if appending or 146077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com reading a gzip stream from the middle of a file using gzdopen(). 146177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 146277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) 146377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 146477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1465d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 146677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); 1467d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 146877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Returns the current offset in the file being read or written. This offset 146977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com includes the count of bytes that precede the gzip stream, for example when 147077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com appending or when using gzdopen() for reading. When reading, the offset 147177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com does not include as yet unused buffered input. This information can be used 147277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com for a progress indicator. On error, gzoffset() returns -1. 1473d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1474d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1475d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT gzeof OF((gzFile file)); 1476d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 147777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Returns true (1) if the end-of-file indicator has been set while reading, 147877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com false (0) otherwise. Note that the end-of-file indicator is set only if the 147977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com read tried to go past the end of the input, but came up short. Therefore, 148077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com just like feof(), gzeof() may return false even if there is no more data to 148177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com read, in the event that the last read request was for the exact number of 148277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com bytes remaining in the input file. This will happen if the input file size 148377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is an exact multiple of the buffer size. 148477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 148577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If gzeof() returns true, then the read functions will return no more data, 148677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com unless the end-of-file indicator is reset by gzclearerr() and the input file 148777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com has grown since the previous end of file was detected. 1488d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1489d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1490d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT gzdirect OF((gzFile file)); 1491d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 149277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Returns true (1) if file is being copied directly while reading, or false 149377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (0) if file is a gzip stream being decompressed. 149477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 149577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If the input file is empty, gzdirect() will return true, since the input 149677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com does not contain a gzip stream. 149777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 149877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com If gzdirect() is used immediately after gzopen() or gzdopen() it will 149977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com cause buffers to be allocated to allow reading the file to determine if it 150077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com is a gzip file. Therefore if gzbuffer() is used, it should be called before 150177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzdirect(). 150277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 150377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com When writing, gzdirect() returns true (1) if transparent writing was 150477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: 150577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzdirect() is not needed when writing. Transparent writing must be 150677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com explicitly requested, so the application already knows the answer. When 150777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com linking statically, using gzdirect() will include all of the zlib code for 150877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzip file reading and decompression, which may not be desired.) 1509d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1510d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1511d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT gzclose OF((gzFile file)); 1512d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 151377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Flushes all pending output if necessary, closes the compressed file and 151477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deallocates the (de)compression state. Note that once file is closed, you 151577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com cannot call gzerror with file, since its structures have been deallocated. 151677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzclose must not be called more than once on the same file, just as free 151777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com must not be called more than once on the same allocation. 151877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 151977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a 152077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the 152177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com last read ended in the middle of a gzip stream, or Z_OK on success. 152277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com*/ 152377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 152477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); 152577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); 152677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 152777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Same as gzclose(), but gzclose_r() is only for use when reading, and 152877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzclose_w() is only for use when writing or appending. The advantage to 152977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com using these instead of gzclose() is that they avoid linking in zlib 153077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compression or decompression code that is not used when only reading or only 153177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com writing respectively. If gzclose() is used, then both compression and 153277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com decompression code will be included the application when linking to a static 153377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com zlib library. 1534d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1535d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1536d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); 1537d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 153877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Returns the error message for the last error which occurred on the given 153977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com compressed file. errnum is set to zlib error number. If an error occurred 154077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com in the file system and not in the compression library, errnum is set to 154177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Z_ERRNO and the application may consult errno to get the exact error code. 154277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 154377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com The application must not modify the returned string. Future calls to 154477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com this function may invalidate the previously returned string. If file is 154577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com closed, then the string previously returned by gzerror will no longer be 154677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com available. 154777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 154877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com gzerror() should be used to distinguish errors from end-of-file for those 154977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com functions above that do not distinguish those cases in their return values. 1550d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1551d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1552d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); 1553d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 155477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Clears the error and end-of-file flags for file. This is analogous to the 155577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com clearerr() function in stdio. This is useful for continuing to read a gzip 1556d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis file that is being written concurrently. 1557d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1558d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 155977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif /* !Z_SOLO */ 156077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1561d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis /* checksum functions */ 1562d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1563d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1564d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis These functions are not related to compression but are exported 156577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com anyway because they might be useful in applications using the compression 156677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com library. 1567d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1568d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1569d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); 1570d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1571d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Update a running Adler-32 checksum with the bytes buf[0..len-1] and 157277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com return the updated checksum. If buf is Z_NULL, this function returns the 157377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com required initial value for the checksum. 157477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 157577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com An Adler-32 checksum is almost as reliable as a CRC32 but can be computed 157677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com much faster. 157777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 157877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com Usage example: 1579d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1580d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uLong adler = adler32(0L, Z_NULL, 0); 1581d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1582d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis while (read_buffer(buffer, length) != EOF) { 1583d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis adler = adler32(adler, buffer, length); 1584d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis } 1585d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis if (adler != original_adler) error(); 1586d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1587d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 158877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 1589d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, 1590d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis z_off_t len2)); 159177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1592d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 1593d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for 1594d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of 159577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note 159677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com that the z_off_t type (like off_t) is a signed integer. If len2 is 159777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com negative, the result has no meaning or utility. 1598d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1599d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1600d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); 1601d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* 1602d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Update a running CRC-32 with the bytes buf[0..len-1] and return the 160377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com updated CRC-32. If buf is Z_NULL, this function returns the required 160477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com initial value for the crc. Pre- and post-conditioning (one's complement) is 1605d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis performed within this function so it shouldn't be done by the application. 160677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 1607d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Usage example: 1608d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1609d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis uLong crc = crc32(0L, Z_NULL, 0); 1610d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1611d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis while (read_buffer(buffer, length) != EOF) { 1612d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis crc = crc32(crc, buffer, length); 1613d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis } 1614d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis if (crc != original_crc) error(); 1615d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1616d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 161777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* 1618d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); 1619d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1620d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis Combine two CRC-32 check values into one. For two sequences of bytes, 1621d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis seq1 and seq2 with lengths len1 and len2, CRC-32 check values were 1622d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 1623d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and 1624d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis len2. 1625d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis*/ 1626d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1627d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1628d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis /* various hacks, don't look :) */ 1629d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1630d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis/* deflateInit and inflateInit are macros to allow checking the zlib version 1631d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis * and the compiler's view of z_stream: 1632d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis */ 1633d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, 1634d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const char *version, int stream_size)); 1635d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, 1636d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const char *version, int stream_size)); 1637d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, 1638d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int windowBits, int memLevel, 1639d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int strategy, const char *version, 1640d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int stream_size)); 1641d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, 1642d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const char *version, int stream_size)); 1643d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, 1644d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis unsigned char FAR *window, 1645d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis const char *version, 1646d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis int stream_size)); 1647d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define deflateInit(strm, level) \ 164877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) 1649d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define inflateInit(strm) \ 165077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) 1651d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ 1652d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ 165377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) 1654d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define inflateInit2(strm, windowBits) \ 165577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ 165677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com (int)sizeof(z_stream)) 1657d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#define inflateBackInit(strm, windowBits, window) \ 1658d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis inflateBackInit_((strm), (windowBits), (window), \ 165977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZLIB_VERSION, (int)sizeof(z_stream)) 166077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 166177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#ifndef Z_SOLO 166277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 166377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* gzgetc() macro and its supporting function and exposed data structure. Note 166477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * that the real internal state is much larger than the exposed structure. 166577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * This abbreviated structure exposes just enough for the gzgetc() macro. The 166677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * user should not mess with these exposed elements, since their names or 166777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * behavior could change in the future, perhaps even capriciously. They can 166877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * only be used by the gzgetc() macro. You have been warned. 166977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com */ 167077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comstruct gzFile_s { 167177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com unsigned have; 167277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com unsigned char *next; 167377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com z_off64_t pos; 167477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com}; 167577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ 167677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#ifdef Z_PREFIX_SET 167777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# undef z_gzgetc 167877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_gzgetc(g) \ 167977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) 168077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#else 168177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define gzgetc(g) \ 168277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) 168377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif 1684d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 168577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or 168677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if 168777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * both are true, the application gets the *64 functions, and the regular 168877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * functions are changed to 64 bits) -- in case these are set on systems 168977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com * without large file support, _LFS64_LARGEFILE must also be true 169077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com */ 169177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#ifdef Z_LARGE64 169277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); 169377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); 169477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); 169577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); 169677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); 169777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); 169877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif 169977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 170077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) 170177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# ifdef Z_PREFIX_SET 170277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_gzopen z_gzopen64 170377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_gzseek z_gzseek64 170477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_gztell z_gztell64 170577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_gzoffset z_gzoffset64 170677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_adler32_combine z_adler32_combine64 170777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define z_crc32_combine z_crc32_combine64 170877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# else 170977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define gzopen gzopen64 171077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define gzseek gzseek64 171177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define gztell gztell64 171277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define gzoffset gzoffset64 171377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define adler32_combine adler32_combine64 171477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# define crc32_combine crc32_combine64 171577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# endif 171677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# ifndef Z_LARGE64 171777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); 171877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); 171977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); 172077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); 172177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); 172277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); 172377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# endif 172477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#else 172577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); 172677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); 172777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); 172877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); 172977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); 173077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); 173177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif 173277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 173377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#else /* Z_SOLO */ 1734d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 173577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); 173677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); 173777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 173877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif /* !Z_SOLO */ 173977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com 174077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* hack for buggy compilers */ 1741d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) 174277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com struct internal_state {int dummy;}; 1743d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#endif 1744d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 174577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com/* undocumented functions */ 1746d372aa8e3708f5d8af24cf993b18134544908d95Martin v. LöwisZEXTERN const char * ZEXPORT zError OF((int)); 174777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); 174877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); 174977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); 175077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); 175177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); 175277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#if defined(_WIN32) && !defined(Z_SOLO) 175377a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, 175477a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com const char *mode)); 175577a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif 175677a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#if defined(STDC) || defined(Z_HAVE_STDARG_H) 175777a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# ifndef Z_SOLO 175877a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.comZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, 175977a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com const char *format, 176077a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com va_list va)); 176177a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com# endif 176277a64bfdf752c594e09914f019f65e7f6aa633f5doko@ubuntu.com#endif 1763d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1764d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#ifdef __cplusplus 1765d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis} 1766d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#endif 1767d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis 1768d372aa8e3708f5d8af24cf993b18134544908d95Martin v. Löwis#endif /* ZLIB_H */ 1769