xref: /aosp_15_r20/external/libwebsockets/win32port/zlib/zlib.h (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker /* zlib.h -- interface of the 'zlib' general purpose compression library
2*1c60b9acSAndroid Build Coastguard Worker   version 1.2.5, April 19th, 2010
3*1c60b9acSAndroid Build Coastguard Worker 
4*1c60b9acSAndroid Build Coastguard Worker   Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
5*1c60b9acSAndroid Build Coastguard Worker 
6*1c60b9acSAndroid Build Coastguard Worker   This software is provided 'as-is', without any express or implied
7*1c60b9acSAndroid Build Coastguard Worker   warranty.  In no event will the authors be held liable for any damages
8*1c60b9acSAndroid Build Coastguard Worker   arising from the use of this software.
9*1c60b9acSAndroid Build Coastguard Worker 
10*1c60b9acSAndroid Build Coastguard Worker   Permission is granted to anyone to use this software for any purpose,
11*1c60b9acSAndroid Build Coastguard Worker   including commercial applications, and to alter it and redistribute it
12*1c60b9acSAndroid Build Coastguard Worker   freely, subject to the following restrictions:
13*1c60b9acSAndroid Build Coastguard Worker 
14*1c60b9acSAndroid Build Coastguard Worker   1. The origin of this software must not be misrepresented; you must not
15*1c60b9acSAndroid Build Coastguard Worker      claim that you wrote the original software. If you use this software
16*1c60b9acSAndroid Build Coastguard Worker      in a product, an acknowledgment in the product documentation would be
17*1c60b9acSAndroid Build Coastguard Worker      appreciated but is not required.
18*1c60b9acSAndroid Build Coastguard Worker   2. Altered source versions must be plainly marked as such, and must not be
19*1c60b9acSAndroid Build Coastguard Worker      misrepresented as being the original software.
20*1c60b9acSAndroid Build Coastguard Worker   3. This notice may not be removed or altered from any source distribution.
21*1c60b9acSAndroid Build Coastguard Worker 
22*1c60b9acSAndroid Build Coastguard Worker   Jean-loup Gailly        Mark Adler
23*1c60b9acSAndroid Build Coastguard Worker   [email protected]          [email protected]
24*1c60b9acSAndroid Build Coastguard Worker 
25*1c60b9acSAndroid Build Coastguard Worker 
26*1c60b9acSAndroid Build Coastguard Worker   The data format used by the zlib library is described by RFCs (Request for
27*1c60b9acSAndroid Build Coastguard Worker   Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
28*1c60b9acSAndroid Build Coastguard Worker   (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
29*1c60b9acSAndroid Build Coastguard Worker */
30*1c60b9acSAndroid Build Coastguard Worker 
31*1c60b9acSAndroid Build Coastguard Worker #ifndef ZLIB_H
32*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_H
33*1c60b9acSAndroid Build Coastguard Worker 
34*1c60b9acSAndroid Build Coastguard Worker #include "zconf.h"
35*1c60b9acSAndroid Build Coastguard Worker 
36*1c60b9acSAndroid Build Coastguard Worker #ifdef __cplusplus
37*1c60b9acSAndroid Build Coastguard Worker extern "C" {
38*1c60b9acSAndroid Build Coastguard Worker #endif
39*1c60b9acSAndroid Build Coastguard Worker 
40*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_VERSION "1.2.5"
41*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_VERNUM 0x1250
42*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_VER_MAJOR 1
43*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_VER_MINOR 2
44*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_VER_REVISION 5
45*1c60b9acSAndroid Build Coastguard Worker #define ZLIB_VER_SUBREVISION 0
46*1c60b9acSAndroid Build Coastguard Worker 
47*1c60b9acSAndroid Build Coastguard Worker /*
48*1c60b9acSAndroid Build Coastguard Worker     The 'zlib' compression library provides in-memory compression and
49*1c60b9acSAndroid Build Coastguard Worker   decompression functions, including integrity checks of the uncompressed data.
50*1c60b9acSAndroid Build Coastguard Worker   This version of the library supports only one compression method (deflation)
51*1c60b9acSAndroid Build Coastguard Worker   but other algorithms will be added later and will have the same stream
52*1c60b9acSAndroid Build Coastguard Worker   interface.
53*1c60b9acSAndroid Build Coastguard Worker 
54*1c60b9acSAndroid Build Coastguard Worker     Compression can be done in a single step if the buffers are large enough,
55*1c60b9acSAndroid Build Coastguard Worker   or can be done by repeated calls of the compression function.  In the latter
56*1c60b9acSAndroid Build Coastguard Worker   case, the application must provide more input and/or consume the output
57*1c60b9acSAndroid Build Coastguard Worker   (providing more output space) before each call.
58*1c60b9acSAndroid Build Coastguard Worker 
59*1c60b9acSAndroid Build Coastguard Worker     The compressed data format used by default by the in-memory functions is
60*1c60b9acSAndroid Build Coastguard Worker   the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
61*1c60b9acSAndroid Build Coastguard Worker   around a deflate stream, which is itself documented in RFC 1951.
62*1c60b9acSAndroid Build Coastguard Worker 
63*1c60b9acSAndroid Build Coastguard Worker     The library also supports reading and writing files in gzip (.gz) format
64*1c60b9acSAndroid Build Coastguard Worker   with an interface similar to that of stdio using the functions that start
65*1c60b9acSAndroid Build Coastguard Worker   with "gz".  The gzip format is different from the zlib format.  gzip is a
66*1c60b9acSAndroid Build Coastguard Worker   gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
67*1c60b9acSAndroid Build Coastguard Worker 
68*1c60b9acSAndroid Build Coastguard Worker     This library can optionally read and write gzip streams in memory as well.
69*1c60b9acSAndroid Build Coastguard Worker 
70*1c60b9acSAndroid Build Coastguard Worker     The zlib format was designed to be compact and fast for use in memory
71*1c60b9acSAndroid Build Coastguard Worker   and on communications channels.  The gzip format was designed for single-
72*1c60b9acSAndroid Build Coastguard Worker   file compression on file systems, has a larger header than zlib to maintain
73*1c60b9acSAndroid Build Coastguard Worker   directory information, and uses a different, slower check method than zlib.
74*1c60b9acSAndroid Build Coastguard Worker 
75*1c60b9acSAndroid Build Coastguard Worker     The library does not install any signal handler.  The decoder checks
76*1c60b9acSAndroid Build Coastguard Worker   the consistency of the compressed data, so the library should never crash
77*1c60b9acSAndroid Build Coastguard Worker   even in case of corrupted input.
78*1c60b9acSAndroid Build Coastguard Worker */
79*1c60b9acSAndroid Build Coastguard Worker 
80*1c60b9acSAndroid Build Coastguard Worker typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
81*1c60b9acSAndroid Build Coastguard Worker typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
82*1c60b9acSAndroid Build Coastguard Worker 
83*1c60b9acSAndroid Build Coastguard Worker struct internal_state;
84*1c60b9acSAndroid Build Coastguard Worker 
85*1c60b9acSAndroid Build Coastguard Worker typedef struct z_stream_s {
86*1c60b9acSAndroid Build Coastguard Worker     Bytef    *next_in;  /* next input byte */
87*1c60b9acSAndroid Build Coastguard Worker     uInt     avail_in;  /* number of bytes available at next_in */
88*1c60b9acSAndroid Build Coastguard Worker     uLong    total_in;  /* total nb of input bytes read so far */
89*1c60b9acSAndroid Build Coastguard Worker 
90*1c60b9acSAndroid Build Coastguard Worker     Bytef    *next_out; /* next output byte should be put there */
91*1c60b9acSAndroid Build Coastguard Worker     uInt     avail_out; /* remaining free space at next_out */
92*1c60b9acSAndroid Build Coastguard Worker     uLong    total_out; /* total nb of bytes output so far */
93*1c60b9acSAndroid Build Coastguard Worker 
94*1c60b9acSAndroid Build Coastguard Worker     char     *msg;      /* last error message, NULL if no error */
95*1c60b9acSAndroid Build Coastguard Worker     struct internal_state FAR *state; /* not visible by applications */
96*1c60b9acSAndroid Build Coastguard Worker 
97*1c60b9acSAndroid Build Coastguard Worker     alloc_func zalloc;  /* used to allocate the internal state */
98*1c60b9acSAndroid Build Coastguard Worker     free_func  zfree;   /* used to free the internal state */
99*1c60b9acSAndroid Build Coastguard Worker     voidpf     opaque;  /* private data object passed to zalloc and zfree */
100*1c60b9acSAndroid Build Coastguard Worker 
101*1c60b9acSAndroid Build Coastguard Worker     int     data_type;  /* best guess about the data type: binary or text */
102*1c60b9acSAndroid Build Coastguard Worker     uLong   adler;      /* adler32 value of the uncompressed data */
103*1c60b9acSAndroid Build Coastguard Worker     uLong   reserved;   /* reserved for future use */
104*1c60b9acSAndroid Build Coastguard Worker } z_stream;
105*1c60b9acSAndroid Build Coastguard Worker 
106*1c60b9acSAndroid Build Coastguard Worker typedef z_stream FAR *z_streamp;
107*1c60b9acSAndroid Build Coastguard Worker 
108*1c60b9acSAndroid Build Coastguard Worker /*
109*1c60b9acSAndroid Build Coastguard Worker      gzip header information passed to and from zlib routines.  See RFC 1952
110*1c60b9acSAndroid Build Coastguard Worker   for more details on the meanings of these fields.
111*1c60b9acSAndroid Build Coastguard Worker */
112*1c60b9acSAndroid Build Coastguard Worker typedef struct gz_header_s {
113*1c60b9acSAndroid Build Coastguard Worker     int     text;       /* true if compressed data believed to be text */
114*1c60b9acSAndroid Build Coastguard Worker     uLong   time;       /* modification time */
115*1c60b9acSAndroid Build Coastguard Worker     int     xflags;     /* extra flags (not used when writing a gzip file) */
116*1c60b9acSAndroid Build Coastguard Worker     int     os;         /* operating system */
117*1c60b9acSAndroid Build Coastguard Worker     Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
118*1c60b9acSAndroid Build Coastguard Worker     uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
119*1c60b9acSAndroid Build Coastguard Worker     uInt    extra_max;  /* space at extra (only when reading header) */
120*1c60b9acSAndroid Build Coastguard Worker     Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
121*1c60b9acSAndroid Build Coastguard Worker     uInt    name_max;   /* space at name (only when reading header) */
122*1c60b9acSAndroid Build Coastguard Worker     Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
123*1c60b9acSAndroid Build Coastguard Worker     uInt    comm_max;   /* space at comment (only when reading header) */
124*1c60b9acSAndroid Build Coastguard Worker     int     hcrc;       /* true if there was or will be a header crc */
125*1c60b9acSAndroid Build Coastguard Worker     int     done;       /* true when done reading gzip header (not used
126*1c60b9acSAndroid Build Coastguard Worker                            when writing a gzip file) */
127*1c60b9acSAndroid Build Coastguard Worker } gz_header;
128*1c60b9acSAndroid Build Coastguard Worker 
129*1c60b9acSAndroid Build Coastguard Worker typedef gz_header FAR *gz_headerp;
130*1c60b9acSAndroid Build Coastguard Worker 
131*1c60b9acSAndroid Build Coastguard Worker /*
132*1c60b9acSAndroid Build Coastguard Worker      The application must update next_in and avail_in when avail_in has dropped
133*1c60b9acSAndroid Build Coastguard Worker    to zero.  It must update next_out and avail_out when avail_out has dropped
134*1c60b9acSAndroid Build Coastguard Worker    to zero.  The application must initialize zalloc, zfree and opaque before
135*1c60b9acSAndroid Build Coastguard Worker    calling the init function.  All other fields are set by the compression
136*1c60b9acSAndroid Build Coastguard Worker    library and must not be updated by the application.
137*1c60b9acSAndroid Build Coastguard Worker 
138*1c60b9acSAndroid Build Coastguard Worker      The opaque value provided by the application will be passed as the first
139*1c60b9acSAndroid Build Coastguard Worker    parameter for calls of zalloc and zfree.  This can be useful for custom
140*1c60b9acSAndroid Build Coastguard Worker    memory management.  The compression library attaches no meaning to the
141*1c60b9acSAndroid Build Coastguard Worker    opaque value.
142*1c60b9acSAndroid Build Coastguard Worker 
143*1c60b9acSAndroid Build Coastguard Worker      zalloc must return Z_NULL if there is not enough memory for the object.
144*1c60b9acSAndroid Build Coastguard Worker    If zlib is used in a multi-threaded application, zalloc and zfree must be
145*1c60b9acSAndroid Build Coastguard Worker    thread safe.
146*1c60b9acSAndroid Build Coastguard Worker 
147*1c60b9acSAndroid Build Coastguard Worker      On 16-bit systems, the functions zalloc and zfree must be able to allocate
148*1c60b9acSAndroid Build Coastguard Worker    exactly 65536 bytes, but will not be required to allocate more than this if
149*1c60b9acSAndroid Build Coastguard Worker    the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
150*1c60b9acSAndroid Build Coastguard Worker    returned by zalloc for objects of exactly 65536 bytes *must* have their
151*1c60b9acSAndroid Build Coastguard Worker    offset normalized to zero.  The default allocation function provided by this
152*1c60b9acSAndroid Build Coastguard Worker    library ensures this (see zutil.c).  To reduce memory requirements and avoid
153*1c60b9acSAndroid Build Coastguard Worker    any allocation of 64K objects, at the expense of compression ratio, compile
154*1c60b9acSAndroid Build Coastguard Worker    the library with -DMAX_WBITS=14 (see zconf.h).
155*1c60b9acSAndroid Build Coastguard Worker 
156*1c60b9acSAndroid Build Coastguard Worker      The fields total_in and total_out can be used for statistics or progress
157*1c60b9acSAndroid Build Coastguard Worker    reports.  After compression, total_in holds the total size of the
158*1c60b9acSAndroid Build Coastguard Worker    uncompressed data and may be saved for use in the decompressor (particularly
159*1c60b9acSAndroid Build Coastguard Worker    if the decompressor wants to decompress everything in a single step).
160*1c60b9acSAndroid Build Coastguard Worker */
161*1c60b9acSAndroid Build Coastguard Worker 
162*1c60b9acSAndroid Build Coastguard Worker                         /* constants */
163*1c60b9acSAndroid Build Coastguard Worker 
164*1c60b9acSAndroid Build Coastguard Worker #define Z_NO_FLUSH      0
165*1c60b9acSAndroid Build Coastguard Worker #define Z_PARTIAL_FLUSH 1
166*1c60b9acSAndroid Build Coastguard Worker #define Z_SYNC_FLUSH    2
167*1c60b9acSAndroid Build Coastguard Worker #define Z_FULL_FLUSH    3
168*1c60b9acSAndroid Build Coastguard Worker #define Z_FINISH        4
169*1c60b9acSAndroid Build Coastguard Worker #define Z_BLOCK         5
170*1c60b9acSAndroid Build Coastguard Worker #define Z_TREES         6
171*1c60b9acSAndroid Build Coastguard Worker /* Allowed flush values; see deflate() and inflate() below for details */
172*1c60b9acSAndroid Build Coastguard Worker 
173*1c60b9acSAndroid Build Coastguard Worker #define Z_OK            0
174*1c60b9acSAndroid Build Coastguard Worker #define Z_STREAM_END    1
175*1c60b9acSAndroid Build Coastguard Worker #define Z_NEED_DICT     2
176*1c60b9acSAndroid Build Coastguard Worker #define Z_ERRNO        (-1)
177*1c60b9acSAndroid Build Coastguard Worker #define Z_STREAM_ERROR (-2)
178*1c60b9acSAndroid Build Coastguard Worker #define Z_DATA_ERROR   (-3)
179*1c60b9acSAndroid Build Coastguard Worker #define Z_MEM_ERROR    (-4)
180*1c60b9acSAndroid Build Coastguard Worker #define Z_BUF_ERROR    (-5)
181*1c60b9acSAndroid Build Coastguard Worker #define Z_VERSION_ERROR (-6)
182*1c60b9acSAndroid Build Coastguard Worker /* Return codes for the compression/decompression functions. Negative values
183*1c60b9acSAndroid Build Coastguard Worker  * are errors, positive values are used for special but normal events.
184*1c60b9acSAndroid Build Coastguard Worker  */
185*1c60b9acSAndroid Build Coastguard Worker 
186*1c60b9acSAndroid Build Coastguard Worker #define Z_NO_COMPRESSION         0
187*1c60b9acSAndroid Build Coastguard Worker #define Z_BEST_SPEED             1
188*1c60b9acSAndroid Build Coastguard Worker #define Z_BEST_COMPRESSION       9
189*1c60b9acSAndroid Build Coastguard Worker #define Z_DEFAULT_COMPRESSION  (-1)
190*1c60b9acSAndroid Build Coastguard Worker /* compression levels */
191*1c60b9acSAndroid Build Coastguard Worker 
192*1c60b9acSAndroid Build Coastguard Worker #define Z_FILTERED            1
193*1c60b9acSAndroid Build Coastguard Worker #define Z_HUFFMAN_ONLY        2
194*1c60b9acSAndroid Build Coastguard Worker #define Z_RLE                 3
195*1c60b9acSAndroid Build Coastguard Worker #define Z_FIXED               4
196*1c60b9acSAndroid Build Coastguard Worker #define Z_DEFAULT_STRATEGY    0
197*1c60b9acSAndroid Build Coastguard Worker /* compression strategy; see deflateInit2() below for details */
198*1c60b9acSAndroid Build Coastguard Worker 
199*1c60b9acSAndroid Build Coastguard Worker #define Z_BINARY   0
200*1c60b9acSAndroid Build Coastguard Worker #define Z_TEXT     1
201*1c60b9acSAndroid Build Coastguard Worker #define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
202*1c60b9acSAndroid Build Coastguard Worker #define Z_UNKNOWN  2
203*1c60b9acSAndroid Build Coastguard Worker /* Possible values of the data_type field (though see inflate()) */
204*1c60b9acSAndroid Build Coastguard Worker 
205*1c60b9acSAndroid Build Coastguard Worker #define Z_DEFLATED   8
206*1c60b9acSAndroid Build Coastguard Worker /* The deflate compression method (the only one supported in this version) */
207*1c60b9acSAndroid Build Coastguard Worker 
208*1c60b9acSAndroid Build Coastguard Worker #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
209*1c60b9acSAndroid Build Coastguard Worker 
210*1c60b9acSAndroid Build Coastguard Worker #define zlib_version zlibVersion()
211*1c60b9acSAndroid Build Coastguard Worker /* for compatibility with versions < 1.0.2 */
212*1c60b9acSAndroid Build Coastguard Worker 
213*1c60b9acSAndroid Build Coastguard Worker 
214*1c60b9acSAndroid Build Coastguard Worker                         /* basic functions */
215*1c60b9acSAndroid Build Coastguard Worker 
216*1c60b9acSAndroid Build Coastguard Worker ZEXTERN const char * ZEXPORT zlibVersion OF((void));
217*1c60b9acSAndroid Build Coastguard Worker /* The application can compare zlibVersion and ZLIB_VERSION for consistency.
218*1c60b9acSAndroid Build Coastguard Worker    If the first character differs, the library code actually used is not
219*1c60b9acSAndroid Build Coastguard Worker    compatible with the zlib.h header file used by the application.  This check
220*1c60b9acSAndroid Build Coastguard Worker    is automatically made by deflateInit and inflateInit.
221*1c60b9acSAndroid Build Coastguard Worker  */
222*1c60b9acSAndroid Build Coastguard Worker 
223*1c60b9acSAndroid Build Coastguard Worker /*
224*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
225*1c60b9acSAndroid Build Coastguard Worker 
226*1c60b9acSAndroid Build Coastguard Worker      Initializes the internal stream state for compression.  The fields
227*1c60b9acSAndroid Build Coastguard Worker    zalloc, zfree and opaque must be initialized before by the caller.  If
228*1c60b9acSAndroid Build Coastguard Worker    zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
229*1c60b9acSAndroid Build Coastguard Worker    allocation functions.
230*1c60b9acSAndroid Build Coastguard Worker 
231*1c60b9acSAndroid Build Coastguard Worker      The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
232*1c60b9acSAndroid Build Coastguard Worker    1 gives best speed, 9 gives best compression, 0 gives no compression at all
233*1c60b9acSAndroid Build Coastguard Worker    (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
234*1c60b9acSAndroid Build Coastguard Worker    requests a default compromise between speed and compression (currently
235*1c60b9acSAndroid Build Coastguard Worker    equivalent to level 6).
236*1c60b9acSAndroid Build Coastguard Worker 
237*1c60b9acSAndroid Build Coastguard Worker      deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
238*1c60b9acSAndroid Build Coastguard Worker    memory, Z_STREAM_ERROR if level is not a valid compression level, or
239*1c60b9acSAndroid Build Coastguard Worker    Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
240*1c60b9acSAndroid Build Coastguard Worker    with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
241*1c60b9acSAndroid Build Coastguard Worker    if there is no error message.  deflateInit does not perform any compression:
242*1c60b9acSAndroid Build Coastguard Worker    this will be done by deflate().
243*1c60b9acSAndroid Build Coastguard Worker */
244*1c60b9acSAndroid Build Coastguard Worker 
245*1c60b9acSAndroid Build Coastguard Worker 
246*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
247*1c60b9acSAndroid Build Coastguard Worker /*
248*1c60b9acSAndroid Build Coastguard Worker     deflate compresses as much data as possible, and stops when the input
249*1c60b9acSAndroid Build Coastguard Worker   buffer becomes empty or the output buffer becomes full.  It may introduce
250*1c60b9acSAndroid Build Coastguard Worker   some output latency (reading input without producing any output) except when
251*1c60b9acSAndroid Build Coastguard Worker   forced to flush.
252*1c60b9acSAndroid Build Coastguard Worker 
253*1c60b9acSAndroid Build Coastguard Worker     The detailed semantics are as follows.  deflate performs one or both of the
254*1c60b9acSAndroid Build Coastguard Worker   following actions:
255*1c60b9acSAndroid Build Coastguard Worker 
256*1c60b9acSAndroid Build Coastguard Worker   - Compress more input starting at next_in and update next_in and avail_in
257*1c60b9acSAndroid Build Coastguard Worker     accordingly.  If not all input can be processed (because there is not
258*1c60b9acSAndroid Build Coastguard Worker     enough room in the output buffer), next_in and avail_in are updated and
259*1c60b9acSAndroid Build Coastguard Worker     processing will resume at this point for the next call of deflate().
260*1c60b9acSAndroid Build Coastguard Worker 
261*1c60b9acSAndroid Build Coastguard Worker   - Provide more output starting at next_out and update next_out and avail_out
262*1c60b9acSAndroid Build Coastguard Worker     accordingly.  This action is forced if the parameter flush is non zero.
263*1c60b9acSAndroid Build Coastguard Worker     Forcing flush frequently degrades the compression ratio, so this parameter
264*1c60b9acSAndroid Build Coastguard Worker     should be set only when necessary (in interactive applications).  Some
265*1c60b9acSAndroid Build Coastguard Worker     output may be provided even if flush is not set.
266*1c60b9acSAndroid Build Coastguard Worker 
267*1c60b9acSAndroid Build Coastguard Worker     Before the call of deflate(), the application should ensure that at least
268*1c60b9acSAndroid Build Coastguard Worker   one of the actions is possible, by providing more input and/or consuming more
269*1c60b9acSAndroid Build Coastguard Worker   output, and updating avail_in or avail_out accordingly; avail_out should
270*1c60b9acSAndroid Build Coastguard Worker   never be zero before the call.  The application can consume the compressed
271*1c60b9acSAndroid Build Coastguard Worker   output when it wants, for example when the output buffer is full (avail_out
272*1c60b9acSAndroid Build Coastguard Worker   == 0), or after each call of deflate().  If deflate returns Z_OK and with
273*1c60b9acSAndroid Build Coastguard Worker   zero avail_out, it must be called again after making room in the output
274*1c60b9acSAndroid Build Coastguard Worker   buffer because there might be more output pending.
275*1c60b9acSAndroid Build Coastguard Worker 
276*1c60b9acSAndroid Build Coastguard Worker     Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
277*1c60b9acSAndroid Build Coastguard Worker   decide how much data to accumulate before producing output, in order to
278*1c60b9acSAndroid Build Coastguard Worker   maximize compression.
279*1c60b9acSAndroid Build Coastguard Worker 
280*1c60b9acSAndroid Build Coastguard Worker     If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
281*1c60b9acSAndroid Build Coastguard Worker   flushed to the output buffer and the output is aligned on a byte boundary, so
282*1c60b9acSAndroid Build Coastguard Worker   that the decompressor can get all input data available so far.  (In
283*1c60b9acSAndroid Build Coastguard Worker   particular avail_in is zero after the call if enough output space has been
284*1c60b9acSAndroid Build Coastguard Worker   provided before the call.) Flushing may degrade compression for some
285*1c60b9acSAndroid Build Coastguard Worker   compression algorithms and so it should be used only when necessary.  This
286*1c60b9acSAndroid Build Coastguard Worker   completes the current deflate block and follows it with an empty stored block
287*1c60b9acSAndroid Build Coastguard Worker   that is three bits plus filler bits to the next byte, followed by four bytes
288*1c60b9acSAndroid Build Coastguard Worker   (00 00 ff ff).
289*1c60b9acSAndroid Build Coastguard Worker 
290*1c60b9acSAndroid Build Coastguard Worker     If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
291*1c60b9acSAndroid Build Coastguard Worker   output buffer, but the output is not aligned to a byte boundary.  All of the
292*1c60b9acSAndroid Build Coastguard Worker   input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
293*1c60b9acSAndroid Build Coastguard Worker   This completes the current deflate block and follows it with an empty fixed
294*1c60b9acSAndroid Build Coastguard Worker   codes block that is 10 bits long.  This assures that enough bytes are output
295*1c60b9acSAndroid Build Coastguard Worker   in order for the decompressor to finish the block before the empty fixed code
296*1c60b9acSAndroid Build Coastguard Worker   block.
297*1c60b9acSAndroid Build Coastguard Worker 
298*1c60b9acSAndroid Build Coastguard Worker     If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
299*1c60b9acSAndroid Build Coastguard Worker   for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
300*1c60b9acSAndroid Build Coastguard Worker   seven bits of the current block are held to be written as the next byte after
301*1c60b9acSAndroid Build Coastguard Worker   the next deflate block is completed.  In this case, the decompressor may not
302*1c60b9acSAndroid Build Coastguard Worker   be provided enough bits at this point in order to complete decompression of
303*1c60b9acSAndroid Build Coastguard Worker   the data provided so far to the compressor.  It may need to wait for the next
304*1c60b9acSAndroid Build Coastguard Worker   block to be emitted.  This is for advanced applications that need to control
305*1c60b9acSAndroid Build Coastguard Worker   the emission of deflate blocks.
306*1c60b9acSAndroid Build Coastguard Worker 
307*1c60b9acSAndroid Build Coastguard Worker     If flush is set to Z_FULL_FLUSH, all output is flushed as with
308*1c60b9acSAndroid Build Coastguard Worker   Z_SYNC_FLUSH, and the compression state is reset so that decompression can
309*1c60b9acSAndroid Build Coastguard Worker   restart from this point if previous compressed data has been damaged or if
310*1c60b9acSAndroid Build Coastguard Worker   random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
311*1c60b9acSAndroid Build Coastguard Worker   compression.
312*1c60b9acSAndroid Build Coastguard Worker 
313*1c60b9acSAndroid Build Coastguard Worker     If deflate returns with avail_out == 0, this function must be called again
314*1c60b9acSAndroid Build Coastguard Worker   with the same value of the flush parameter and more output space (updated
315*1c60b9acSAndroid Build Coastguard Worker   avail_out), until the flush is complete (deflate returns with non-zero
316*1c60b9acSAndroid Build Coastguard Worker   avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
317*1c60b9acSAndroid Build Coastguard Worker   avail_out is greater than six to avoid repeated flush markers due to
318*1c60b9acSAndroid Build Coastguard Worker   avail_out == 0 on return.
319*1c60b9acSAndroid Build Coastguard Worker 
320*1c60b9acSAndroid Build Coastguard Worker     If the parameter flush is set to Z_FINISH, pending input is processed,
321*1c60b9acSAndroid Build Coastguard Worker   pending output is flushed and deflate returns with Z_STREAM_END if there was
322*1c60b9acSAndroid Build Coastguard Worker   enough output space; if deflate returns with Z_OK, this function must be
323*1c60b9acSAndroid Build Coastguard Worker   called again with Z_FINISH and more output space (updated avail_out) but no
324*1c60b9acSAndroid Build Coastguard Worker   more input data, until it returns with Z_STREAM_END or an error.  After
325*1c60b9acSAndroid Build Coastguard Worker   deflate has returned Z_STREAM_END, the only possible operations on the stream
326*1c60b9acSAndroid Build Coastguard Worker   are deflateReset or deflateEnd.
327*1c60b9acSAndroid Build Coastguard Worker 
328*1c60b9acSAndroid Build Coastguard Worker     Z_FINISH can be used immediately after deflateInit if all the compression
329*1c60b9acSAndroid Build Coastguard Worker   is to be done in a single step.  In this case, avail_out must be at least the
330*1c60b9acSAndroid Build Coastguard Worker   value returned by deflateBound (see below).  If deflate does not return
331*1c60b9acSAndroid Build Coastguard Worker   Z_STREAM_END, then it must be called again as described above.
332*1c60b9acSAndroid Build Coastguard Worker 
333*1c60b9acSAndroid Build Coastguard Worker     deflate() sets strm->adler to the adler32 checksum of all input read
334*1c60b9acSAndroid Build Coastguard Worker   so far (that is, total_in bytes).
335*1c60b9acSAndroid Build Coastguard Worker 
336*1c60b9acSAndroid Build Coastguard Worker     deflate() may update strm->data_type if it can make a good guess about
337*1c60b9acSAndroid Build Coastguard Worker   the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
338*1c60b9acSAndroid Build Coastguard Worker   binary.  This field is only for information purposes and does not affect the
339*1c60b9acSAndroid Build Coastguard Worker   compression algorithm in any manner.
340*1c60b9acSAndroid Build Coastguard Worker 
341*1c60b9acSAndroid Build Coastguard Worker     deflate() returns Z_OK if some progress has been made (more input
342*1c60b9acSAndroid Build Coastguard Worker   processed or more output produced), Z_STREAM_END if all input has been
343*1c60b9acSAndroid Build Coastguard Worker   consumed and all output has been produced (only when flush is set to
344*1c60b9acSAndroid Build Coastguard Worker   Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
345*1c60b9acSAndroid Build Coastguard Worker   if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
346*1c60b9acSAndroid Build Coastguard Worker   (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
347*1c60b9acSAndroid Build Coastguard Worker   fatal, and deflate() can be called again with more input and more output
348*1c60b9acSAndroid Build Coastguard Worker   space to continue compressing.
349*1c60b9acSAndroid Build Coastguard Worker */
350*1c60b9acSAndroid Build Coastguard Worker 
351*1c60b9acSAndroid Build Coastguard Worker 
352*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
353*1c60b9acSAndroid Build Coastguard Worker /*
354*1c60b9acSAndroid Build Coastguard Worker      All dynamically allocated data structures for this stream are freed.
355*1c60b9acSAndroid Build Coastguard Worker    This function discards any unprocessed input and does not flush any pending
356*1c60b9acSAndroid Build Coastguard Worker    output.
357*1c60b9acSAndroid Build Coastguard Worker 
358*1c60b9acSAndroid Build Coastguard Worker      deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
359*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent, Z_DATA_ERROR if the stream was freed
360*1c60b9acSAndroid Build Coastguard Worker    prematurely (some input or output was discarded).  In the error case, msg
361*1c60b9acSAndroid Build Coastguard Worker    may be set but then points to a static string (which must not be
362*1c60b9acSAndroid Build Coastguard Worker    deallocated).
363*1c60b9acSAndroid Build Coastguard Worker */
364*1c60b9acSAndroid Build Coastguard Worker 
365*1c60b9acSAndroid Build Coastguard Worker 
366*1c60b9acSAndroid Build Coastguard Worker /*
367*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
368*1c60b9acSAndroid Build Coastguard Worker 
369*1c60b9acSAndroid Build Coastguard Worker      Initializes the internal stream state for decompression.  The fields
370*1c60b9acSAndroid Build Coastguard Worker    next_in, avail_in, zalloc, zfree and opaque must be initialized before by
371*1c60b9acSAndroid Build Coastguard Worker    the caller.  If next_in is not Z_NULL and avail_in is large enough (the
372*1c60b9acSAndroid Build Coastguard Worker    exact value depends on the compression method), inflateInit determines the
373*1c60b9acSAndroid Build Coastguard Worker    compression method from the zlib header and allocates all data structures
374*1c60b9acSAndroid Build Coastguard Worker    accordingly; otherwise the allocation will be deferred to the first call of
375*1c60b9acSAndroid Build Coastguard Worker    inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
376*1c60b9acSAndroid Build Coastguard Worker    use default allocation functions.
377*1c60b9acSAndroid Build Coastguard Worker 
378*1c60b9acSAndroid Build Coastguard Worker      inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
379*1c60b9acSAndroid Build Coastguard Worker    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
380*1c60b9acSAndroid Build Coastguard Worker    version assumed by the caller, or Z_STREAM_ERROR if the parameters are
381*1c60b9acSAndroid Build Coastguard Worker    invalid, such as a null pointer to the structure.  msg is set to null if
382*1c60b9acSAndroid Build Coastguard Worker    there is no error message.  inflateInit does not perform any decompression
383*1c60b9acSAndroid Build Coastguard Worker    apart from possibly reading the zlib header if present: actual decompression
384*1c60b9acSAndroid Build Coastguard Worker    will be done by inflate().  (So next_in and avail_in may be modified, but
385*1c60b9acSAndroid Build Coastguard Worker    next_out and avail_out are unused and unchanged.) The current implementation
386*1c60b9acSAndroid Build Coastguard Worker    of inflateInit() does not process any header information -- that is deferred
387*1c60b9acSAndroid Build Coastguard Worker    until inflate() is called.
388*1c60b9acSAndroid Build Coastguard Worker */
389*1c60b9acSAndroid Build Coastguard Worker 
390*1c60b9acSAndroid Build Coastguard Worker 
391*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
392*1c60b9acSAndroid Build Coastguard Worker /*
393*1c60b9acSAndroid Build Coastguard Worker     inflate decompresses as much data as possible, and stops when the input
394*1c60b9acSAndroid Build Coastguard Worker   buffer becomes empty or the output buffer becomes full.  It may introduce
395*1c60b9acSAndroid Build Coastguard Worker   some output latency (reading input without producing any output) except when
396*1c60b9acSAndroid Build Coastguard Worker   forced to flush.
397*1c60b9acSAndroid Build Coastguard Worker 
398*1c60b9acSAndroid Build Coastguard Worker   The detailed semantics are as follows.  inflate performs one or both of the
399*1c60b9acSAndroid Build Coastguard Worker   following actions:
400*1c60b9acSAndroid Build Coastguard Worker 
401*1c60b9acSAndroid Build Coastguard Worker   - Decompress more input starting at next_in and update next_in and avail_in
402*1c60b9acSAndroid Build Coastguard Worker     accordingly.  If not all input can be processed (because there is not
403*1c60b9acSAndroid Build Coastguard Worker     enough room in the output buffer), next_in is updated and processing will
404*1c60b9acSAndroid Build Coastguard Worker     resume at this point for the next call of inflate().
405*1c60b9acSAndroid Build Coastguard Worker 
406*1c60b9acSAndroid Build Coastguard Worker   - Provide more output starting at next_out and update next_out and avail_out
407*1c60b9acSAndroid Build Coastguard Worker     accordingly.  inflate() provides as much output as possible, until there is
408*1c60b9acSAndroid Build Coastguard Worker     no more input data or no more space in the output buffer (see below about
409*1c60b9acSAndroid Build Coastguard Worker     the flush parameter).
410*1c60b9acSAndroid Build Coastguard Worker 
411*1c60b9acSAndroid Build Coastguard Worker     Before the call of inflate(), the application should ensure that at least
412*1c60b9acSAndroid Build Coastguard Worker   one of the actions is possible, by providing more input and/or consuming more
413*1c60b9acSAndroid Build Coastguard Worker   output, and updating the next_* and avail_* values accordingly.  The
414*1c60b9acSAndroid Build Coastguard Worker   application can consume the uncompressed output when it wants, for example
415*1c60b9acSAndroid Build Coastguard Worker   when the output buffer is full (avail_out == 0), or after each call of
416*1c60b9acSAndroid Build Coastguard Worker   inflate().  If inflate returns Z_OK and with zero avail_out, it must be
417*1c60b9acSAndroid Build Coastguard Worker   called again after making room in the output buffer because there might be
418*1c60b9acSAndroid Build Coastguard Worker   more output pending.
419*1c60b9acSAndroid Build Coastguard Worker 
420*1c60b9acSAndroid Build Coastguard Worker     The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
421*1c60b9acSAndroid Build Coastguard Worker   Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
422*1c60b9acSAndroid Build Coastguard Worker   output as possible to the output buffer.  Z_BLOCK requests that inflate()
423*1c60b9acSAndroid Build Coastguard Worker   stop if and when it gets to the next deflate block boundary.  When decoding
424*1c60b9acSAndroid Build Coastguard Worker   the zlib or gzip format, this will cause inflate() to return immediately
425*1c60b9acSAndroid Build Coastguard Worker   after the header and before the first block.  When doing a raw inflate,
426*1c60b9acSAndroid Build Coastguard Worker   inflate() will go ahead and process the first block, and will return when it
427*1c60b9acSAndroid Build Coastguard Worker   gets to the end of that block, or when it runs out of data.
428*1c60b9acSAndroid Build Coastguard Worker 
429*1c60b9acSAndroid Build Coastguard Worker     The Z_BLOCK option assists in appending to or combining deflate streams.
430*1c60b9acSAndroid Build Coastguard Worker   Also to assist in this, on return inflate() will set strm->data_type to the
431*1c60b9acSAndroid Build Coastguard Worker   number of unused bits in the last byte taken from strm->next_in, plus 64 if
432*1c60b9acSAndroid Build Coastguard Worker   inflate() is currently decoding the last block in the deflate stream, plus
433*1c60b9acSAndroid Build Coastguard Worker   128 if inflate() returned immediately after decoding an end-of-block code or
434*1c60b9acSAndroid Build Coastguard Worker   decoding the complete header up to just before the first byte of the deflate
435*1c60b9acSAndroid Build Coastguard Worker   stream.  The end-of-block will not be indicated until all of the uncompressed
436*1c60b9acSAndroid Build Coastguard Worker   data from that block has been written to strm->next_out.  The number of
437*1c60b9acSAndroid Build Coastguard Worker   unused bits may in general be greater than seven, except when bit 7 of
438*1c60b9acSAndroid Build Coastguard Worker   data_type is set, in which case the number of unused bits will be less than
439*1c60b9acSAndroid Build Coastguard Worker   eight.  data_type is set as noted here every time inflate() returns for all
440*1c60b9acSAndroid Build Coastguard Worker   flush options, and so can be used to determine the amount of currently
441*1c60b9acSAndroid Build Coastguard Worker   consumed input in bits.
442*1c60b9acSAndroid Build Coastguard Worker 
443*1c60b9acSAndroid Build Coastguard Worker     The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
444*1c60b9acSAndroid Build Coastguard Worker   end of each deflate block header is reached, before any actual data in that
445*1c60b9acSAndroid Build Coastguard Worker   block is decoded.  This allows the caller to determine the length of the
446*1c60b9acSAndroid Build Coastguard Worker   deflate block header for later use in random access within a deflate block.
447*1c60b9acSAndroid Build Coastguard Worker   256 is added to the value of strm->data_type when inflate() returns
448*1c60b9acSAndroid Build Coastguard Worker   immediately after reaching the end of the deflate block header.
449*1c60b9acSAndroid Build Coastguard Worker 
450*1c60b9acSAndroid Build Coastguard Worker     inflate() should normally be called until it returns Z_STREAM_END or an
451*1c60b9acSAndroid Build Coastguard Worker   error.  However if all decompression is to be performed in a single step (a
452*1c60b9acSAndroid Build Coastguard Worker   single call of inflate), the parameter flush should be set to Z_FINISH.  In
453*1c60b9acSAndroid Build Coastguard Worker   this case all pending input is processed and all pending output is flushed;
454*1c60b9acSAndroid Build Coastguard Worker   avail_out must be large enough to hold all the uncompressed data.  (The size
455*1c60b9acSAndroid Build Coastguard Worker   of the uncompressed data may have been saved by the compressor for this
456*1c60b9acSAndroid Build Coastguard Worker   purpose.) The next operation on this stream must be inflateEnd to deallocate
457*1c60b9acSAndroid Build Coastguard Worker   the decompression state.  The use of Z_FINISH is never required, but can be
458*1c60b9acSAndroid Build Coastguard Worker   used to inform inflate that a faster approach may be used for the single
459*1c60b9acSAndroid Build Coastguard Worker   inflate() call.
460*1c60b9acSAndroid Build Coastguard Worker 
461*1c60b9acSAndroid Build Coastguard Worker      In this implementation, inflate() always flushes as much output as
462*1c60b9acSAndroid Build Coastguard Worker   possible to the output buffer, and always uses the faster approach on the
463*1c60b9acSAndroid Build Coastguard Worker   first call.  So the only effect of the flush parameter in this implementation
464*1c60b9acSAndroid Build Coastguard Worker   is on the return value of inflate(), as noted below, or when it returns early
465*1c60b9acSAndroid Build Coastguard Worker   because Z_BLOCK or Z_TREES is used.
466*1c60b9acSAndroid Build Coastguard Worker 
467*1c60b9acSAndroid Build Coastguard Worker      If a preset dictionary is needed after this call (see inflateSetDictionary
468*1c60b9acSAndroid Build Coastguard Worker   below), inflate sets strm->adler to the adler32 checksum of the dictionary
469*1c60b9acSAndroid Build Coastguard Worker   chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
470*1c60b9acSAndroid Build Coastguard Worker   strm->adler to the adler32 checksum of all output produced so far (that is,
471*1c60b9acSAndroid Build Coastguard Worker   total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
472*1c60b9acSAndroid Build Coastguard Worker   below.  At the end of the stream, inflate() checks that its computed adler32
473*1c60b9acSAndroid Build Coastguard Worker   checksum is equal to that saved by the compressor and returns Z_STREAM_END
474*1c60b9acSAndroid Build Coastguard Worker   only if the checksum is correct.
475*1c60b9acSAndroid Build Coastguard Worker 
476*1c60b9acSAndroid Build Coastguard Worker     inflate() can decompress and check either zlib-wrapped or gzip-wrapped
477*1c60b9acSAndroid Build Coastguard Worker   deflate data.  The header type is detected automatically, if requested when
478*1c60b9acSAndroid Build Coastguard Worker   initializing with inflateInit2().  Any information contained in the gzip
479*1c60b9acSAndroid Build Coastguard Worker   header is not retained, so applications that need that information should
480*1c60b9acSAndroid Build Coastguard Worker   instead use raw inflate, see inflateInit2() below, or inflateBack() and
481*1c60b9acSAndroid Build Coastguard Worker   perform their own processing of the gzip header and trailer.
482*1c60b9acSAndroid Build Coastguard Worker 
483*1c60b9acSAndroid Build Coastguard Worker     inflate() returns Z_OK if some progress has been made (more input processed
484*1c60b9acSAndroid Build Coastguard Worker   or more output produced), Z_STREAM_END if the end of the compressed data has
485*1c60b9acSAndroid Build Coastguard Worker   been reached and all uncompressed output has been produced, Z_NEED_DICT if a
486*1c60b9acSAndroid Build Coastguard Worker   preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
487*1c60b9acSAndroid Build Coastguard Worker   corrupted (input stream not conforming to the zlib format or incorrect check
488*1c60b9acSAndroid Build Coastguard Worker   value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
489*1c60b9acSAndroid Build Coastguard Worker   next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
490*1c60b9acSAndroid Build Coastguard Worker   Z_BUF_ERROR if no progress is possible or if there was not enough room in the
491*1c60b9acSAndroid Build Coastguard Worker   output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
492*1c60b9acSAndroid Build Coastguard Worker   inflate() can be called again with more input and more output space to
493*1c60b9acSAndroid Build Coastguard Worker   continue decompressing.  If Z_DATA_ERROR is returned, the application may
494*1c60b9acSAndroid Build Coastguard Worker   then call inflateSync() to look for a good compression block if a partial
495*1c60b9acSAndroid Build Coastguard Worker   recovery of the data is desired.
496*1c60b9acSAndroid Build Coastguard Worker */
497*1c60b9acSAndroid Build Coastguard Worker 
498*1c60b9acSAndroid Build Coastguard Worker 
499*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
500*1c60b9acSAndroid Build Coastguard Worker /*
501*1c60b9acSAndroid Build Coastguard Worker      All dynamically allocated data structures for this stream are freed.
502*1c60b9acSAndroid Build Coastguard Worker    This function discards any unprocessed input and does not flush any pending
503*1c60b9acSAndroid Build Coastguard Worker    output.
504*1c60b9acSAndroid Build Coastguard Worker 
505*1c60b9acSAndroid Build Coastguard Worker      inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
506*1c60b9acSAndroid Build Coastguard Worker    was inconsistent.  In the error case, msg may be set but then points to a
507*1c60b9acSAndroid Build Coastguard Worker    static string (which must not be deallocated).
508*1c60b9acSAndroid Build Coastguard Worker */
509*1c60b9acSAndroid Build Coastguard Worker 
510*1c60b9acSAndroid Build Coastguard Worker 
511*1c60b9acSAndroid Build Coastguard Worker                         /* Advanced functions */
512*1c60b9acSAndroid Build Coastguard Worker 
513*1c60b9acSAndroid Build Coastguard Worker /*
514*1c60b9acSAndroid Build Coastguard Worker     The following functions are needed only in some special applications.
515*1c60b9acSAndroid Build Coastguard Worker */
516*1c60b9acSAndroid Build Coastguard Worker 
517*1c60b9acSAndroid Build Coastguard Worker /*
518*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
519*1c60b9acSAndroid Build Coastguard Worker                                      int  level,
520*1c60b9acSAndroid Build Coastguard Worker                                      int  method,
521*1c60b9acSAndroid Build Coastguard Worker                                      int  windowBits,
522*1c60b9acSAndroid Build Coastguard Worker                                      int  memLevel,
523*1c60b9acSAndroid Build Coastguard Worker                                      int  strategy));
524*1c60b9acSAndroid Build Coastguard Worker 
525*1c60b9acSAndroid Build Coastguard Worker      This is another version of deflateInit with more compression options.  The
526*1c60b9acSAndroid Build Coastguard Worker    fields next_in, zalloc, zfree and opaque must be initialized before by the
527*1c60b9acSAndroid Build Coastguard Worker    caller.
528*1c60b9acSAndroid Build Coastguard Worker 
529*1c60b9acSAndroid Build Coastguard Worker      The method parameter is the compression method.  It must be Z_DEFLATED in
530*1c60b9acSAndroid Build Coastguard Worker    this version of the library.
531*1c60b9acSAndroid Build Coastguard Worker 
532*1c60b9acSAndroid Build Coastguard Worker      The windowBits parameter is the base two logarithm of the window size
533*1c60b9acSAndroid Build Coastguard Worker    (the size of the history buffer).  It should be in the range 8..15 for this
534*1c60b9acSAndroid Build Coastguard Worker    version of the library.  Larger values of this parameter result in better
535*1c60b9acSAndroid Build Coastguard Worker    compression at the expense of memory usage.  The default value is 15 if
536*1c60b9acSAndroid Build Coastguard Worker    deflateInit is used instead.
537*1c60b9acSAndroid Build Coastguard Worker 
538*1c60b9acSAndroid Build Coastguard Worker      windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
539*1c60b9acSAndroid Build Coastguard Worker    determines the window size.  deflate() will then generate raw deflate data
540*1c60b9acSAndroid Build Coastguard Worker    with no zlib header or trailer, and will not compute an adler32 check value.
541*1c60b9acSAndroid Build Coastguard Worker 
542*1c60b9acSAndroid Build Coastguard Worker      windowBits can also be greater than 15 for optional gzip encoding.  Add
543*1c60b9acSAndroid Build Coastguard Worker    16 to windowBits to write a simple gzip header and trailer around the
544*1c60b9acSAndroid Build Coastguard Worker    compressed data instead of a zlib wrapper.  The gzip header will have no
545*1c60b9acSAndroid Build Coastguard Worker    file name, no extra data, no comment, no modification time (set to zero), no
546*1c60b9acSAndroid Build Coastguard Worker    header crc, and the operating system will be set to 255 (unknown).  If a
547*1c60b9acSAndroid Build Coastguard Worker    gzip stream is being written, strm->adler is a crc32 instead of an adler32.
548*1c60b9acSAndroid Build Coastguard Worker 
549*1c60b9acSAndroid Build Coastguard Worker      The memLevel parameter specifies how much memory should be allocated
550*1c60b9acSAndroid Build Coastguard Worker    for the internal compression state.  memLevel=1 uses minimum memory but is
551*1c60b9acSAndroid Build Coastguard Worker    slow and reduces compression ratio; memLevel=9 uses maximum memory for
552*1c60b9acSAndroid Build Coastguard Worker    optimal speed.  The default value is 8.  See zconf.h for total memory usage
553*1c60b9acSAndroid Build Coastguard Worker    as a function of windowBits and memLevel.
554*1c60b9acSAndroid Build Coastguard Worker 
555*1c60b9acSAndroid Build Coastguard Worker      The strategy parameter is used to tune the compression algorithm.  Use the
556*1c60b9acSAndroid Build Coastguard Worker    value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
557*1c60b9acSAndroid Build Coastguard Worker    filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
558*1c60b9acSAndroid Build Coastguard Worker    string match), or Z_RLE to limit match distances to one (run-length
559*1c60b9acSAndroid Build Coastguard Worker    encoding).  Filtered data consists mostly of small values with a somewhat
560*1c60b9acSAndroid Build Coastguard Worker    random distribution.  In this case, the compression algorithm is tuned to
561*1c60b9acSAndroid Build Coastguard Worker    compress them better.  The effect of Z_FILTERED is to force more Huffman
562*1c60b9acSAndroid Build Coastguard Worker    coding and less string matching; it is somewhat intermediate between
563*1c60b9acSAndroid Build Coastguard Worker    Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
564*1c60b9acSAndroid Build Coastguard Worker    fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
565*1c60b9acSAndroid Build Coastguard Worker    strategy parameter only affects the compression ratio but not the
566*1c60b9acSAndroid Build Coastguard Worker    correctness of the compressed output even if it is not set appropriately.
567*1c60b9acSAndroid Build Coastguard Worker    Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
568*1c60b9acSAndroid Build Coastguard Worker    decoder for special applications.
569*1c60b9acSAndroid Build Coastguard Worker 
570*1c60b9acSAndroid Build Coastguard Worker      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
571*1c60b9acSAndroid Build Coastguard Worker    memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
572*1c60b9acSAndroid Build Coastguard Worker    method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
573*1c60b9acSAndroid Build Coastguard Worker    incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
574*1c60b9acSAndroid Build Coastguard Worker    set to null if there is no error message.  deflateInit2 does not perform any
575*1c60b9acSAndroid Build Coastguard Worker    compression: this will be done by deflate().
576*1c60b9acSAndroid Build Coastguard Worker */
577*1c60b9acSAndroid Build Coastguard Worker 
578*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
579*1c60b9acSAndroid Build Coastguard Worker                                              const Bytef *dictionary,
580*1c60b9acSAndroid Build Coastguard Worker                                              uInt  dictLength));
581*1c60b9acSAndroid Build Coastguard Worker /*
582*1c60b9acSAndroid Build Coastguard Worker      Initializes the compression dictionary from the given byte sequence
583*1c60b9acSAndroid Build Coastguard Worker    without producing any compressed output.  This function must be called
584*1c60b9acSAndroid Build Coastguard Worker    immediately after deflateInit, deflateInit2 or deflateReset, before any call
585*1c60b9acSAndroid Build Coastguard Worker    of deflate.  The compressor and decompressor must use exactly the same
586*1c60b9acSAndroid Build Coastguard Worker    dictionary (see inflateSetDictionary).
587*1c60b9acSAndroid Build Coastguard Worker 
588*1c60b9acSAndroid Build Coastguard Worker      The dictionary should consist of strings (byte sequences) that are likely
589*1c60b9acSAndroid Build Coastguard Worker    to be encountered later in the data to be compressed, with the most commonly
590*1c60b9acSAndroid Build Coastguard Worker    used strings preferably put towards the end of the dictionary.  Using a
591*1c60b9acSAndroid Build Coastguard Worker    dictionary is most useful when the data to be compressed is short and can be
592*1c60b9acSAndroid Build Coastguard Worker    predicted with good accuracy; the data can then be compressed better than
593*1c60b9acSAndroid Build Coastguard Worker    with the default empty dictionary.
594*1c60b9acSAndroid Build Coastguard Worker 
595*1c60b9acSAndroid Build Coastguard Worker      Depending on the size of the compression data structures selected by
596*1c60b9acSAndroid Build Coastguard Worker    deflateInit or deflateInit2, a part of the dictionary may in effect be
597*1c60b9acSAndroid Build Coastguard Worker    discarded, for example if the dictionary is larger than the window size
598*1c60b9acSAndroid Build Coastguard Worker    provided in deflateInit or deflateInit2.  Thus the strings most likely to be
599*1c60b9acSAndroid Build Coastguard Worker    useful should be put at the end of the dictionary, not at the front.  In
600*1c60b9acSAndroid Build Coastguard Worker    addition, the current implementation of deflate will use at most the window
601*1c60b9acSAndroid Build Coastguard Worker    size minus 262 bytes of the provided dictionary.
602*1c60b9acSAndroid Build Coastguard Worker 
603*1c60b9acSAndroid Build Coastguard Worker      Upon return of this function, strm->adler is set to the adler32 value
604*1c60b9acSAndroid Build Coastguard Worker    of the dictionary; the decompressor may later use this value to determine
605*1c60b9acSAndroid Build Coastguard Worker    which dictionary has been used by the compressor.  (The adler32 value
606*1c60b9acSAndroid Build Coastguard Worker    applies to the whole dictionary even if only a subset of the dictionary is
607*1c60b9acSAndroid Build Coastguard Worker    actually used by the compressor.) If a raw deflate was requested, then the
608*1c60b9acSAndroid Build Coastguard Worker    adler32 value is not computed and strm->adler is not set.
609*1c60b9acSAndroid Build Coastguard Worker 
610*1c60b9acSAndroid Build Coastguard Worker      deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
611*1c60b9acSAndroid Build Coastguard Worker    parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
612*1c60b9acSAndroid Build Coastguard Worker    inconsistent (for example if deflate has already been called for this stream
613*1c60b9acSAndroid Build Coastguard Worker    or if the compression method is bsort).  deflateSetDictionary does not
614*1c60b9acSAndroid Build Coastguard Worker    perform any compression: this will be done by deflate().
615*1c60b9acSAndroid Build Coastguard Worker */
616*1c60b9acSAndroid Build Coastguard Worker 
617*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
618*1c60b9acSAndroid Build Coastguard Worker                                     z_streamp source));
619*1c60b9acSAndroid Build Coastguard Worker /*
620*1c60b9acSAndroid Build Coastguard Worker      Sets the destination stream as a complete copy of the source stream.
621*1c60b9acSAndroid Build Coastguard Worker 
622*1c60b9acSAndroid Build Coastguard Worker      This function can be useful when several compression strategies will be
623*1c60b9acSAndroid Build Coastguard Worker    tried, for example when there are several ways of pre-processing the input
624*1c60b9acSAndroid Build Coastguard Worker    data with a filter.  The streams that will be discarded should then be freed
625*1c60b9acSAndroid Build Coastguard Worker    by calling deflateEnd.  Note that deflateCopy duplicates the internal
626*1c60b9acSAndroid Build Coastguard Worker    compression state which can be quite large, so this strategy is slow and can
627*1c60b9acSAndroid Build Coastguard Worker    consume lots of memory.
628*1c60b9acSAndroid Build Coastguard Worker 
629*1c60b9acSAndroid Build Coastguard Worker      deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
630*1c60b9acSAndroid Build Coastguard Worker    enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
631*1c60b9acSAndroid Build Coastguard Worker    (such as zalloc being Z_NULL).  msg is left unchanged in both source and
632*1c60b9acSAndroid Build Coastguard Worker    destination.
633*1c60b9acSAndroid Build Coastguard Worker */
634*1c60b9acSAndroid Build Coastguard Worker 
635*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
636*1c60b9acSAndroid Build Coastguard Worker /*
637*1c60b9acSAndroid Build Coastguard Worker      This function is equivalent to deflateEnd followed by deflateInit,
638*1c60b9acSAndroid Build Coastguard Worker    but does not free and reallocate all the internal compression state.  The
639*1c60b9acSAndroid Build Coastguard Worker    stream will keep the same compression level and any other attributes that
640*1c60b9acSAndroid Build Coastguard Worker    may have been set by deflateInit2.
641*1c60b9acSAndroid Build Coastguard Worker 
642*1c60b9acSAndroid Build Coastguard Worker      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
643*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent (such as zalloc or state being Z_NULL).
644*1c60b9acSAndroid Build Coastguard Worker */
645*1c60b9acSAndroid Build Coastguard Worker 
646*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
647*1c60b9acSAndroid Build Coastguard Worker                                       int level,
648*1c60b9acSAndroid Build Coastguard Worker                                       int strategy));
649*1c60b9acSAndroid Build Coastguard Worker /*
650*1c60b9acSAndroid Build Coastguard Worker      Dynamically update the compression level and compression strategy.  The
651*1c60b9acSAndroid Build Coastguard Worker    interpretation of level and strategy is as in deflateInit2.  This can be
652*1c60b9acSAndroid Build Coastguard Worker    used to switch between compression and straight copy of the input data, or
653*1c60b9acSAndroid Build Coastguard Worker    to switch to a different kind of input data requiring a different strategy.
654*1c60b9acSAndroid Build Coastguard Worker    If the compression level is changed, the input available so far is
655*1c60b9acSAndroid Build Coastguard Worker    compressed with the old level (and may be flushed); the new level will take
656*1c60b9acSAndroid Build Coastguard Worker    effect only at the next call of deflate().
657*1c60b9acSAndroid Build Coastguard Worker 
658*1c60b9acSAndroid Build Coastguard Worker      Before the call of deflateParams, the stream state must be set as for
659*1c60b9acSAndroid Build Coastguard Worker    a call of deflate(), since the currently available input may have to be
660*1c60b9acSAndroid Build Coastguard Worker    compressed and flushed.  In particular, strm->avail_out must be non-zero.
661*1c60b9acSAndroid Build Coastguard Worker 
662*1c60b9acSAndroid Build Coastguard Worker      deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
663*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
664*1c60b9acSAndroid Build Coastguard Worker    strm->avail_out was zero.
665*1c60b9acSAndroid Build Coastguard Worker */
666*1c60b9acSAndroid Build Coastguard Worker 
667*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
668*1c60b9acSAndroid Build Coastguard Worker                                     int good_length,
669*1c60b9acSAndroid Build Coastguard Worker                                     int max_lazy,
670*1c60b9acSAndroid Build Coastguard Worker                                     int nice_length,
671*1c60b9acSAndroid Build Coastguard Worker                                     int max_chain));
672*1c60b9acSAndroid Build Coastguard Worker /*
673*1c60b9acSAndroid Build Coastguard Worker      Fine tune deflate's internal compression parameters.  This should only be
674*1c60b9acSAndroid Build Coastguard Worker    used by someone who understands the algorithm used by zlib's deflate for
675*1c60b9acSAndroid Build Coastguard Worker    searching for the best matching string, and even then only by the most
676*1c60b9acSAndroid Build Coastguard Worker    fanatic optimizer trying to squeeze out the last compressed bit for their
677*1c60b9acSAndroid Build Coastguard Worker    specific input data.  Read the deflate.c source code for the meaning of the
678*1c60b9acSAndroid Build Coastguard Worker    max_lazy, good_length, nice_length, and max_chain parameters.
679*1c60b9acSAndroid Build Coastguard Worker 
680*1c60b9acSAndroid Build Coastguard Worker      deflateTune() can be called after deflateInit() or deflateInit2(), and
681*1c60b9acSAndroid Build Coastguard Worker    returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
682*1c60b9acSAndroid Build Coastguard Worker  */
683*1c60b9acSAndroid Build Coastguard Worker 
684*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
685*1c60b9acSAndroid Build Coastguard Worker                                        uLong sourceLen));
686*1c60b9acSAndroid Build Coastguard Worker /*
687*1c60b9acSAndroid Build Coastguard Worker      deflateBound() returns an upper bound on the compressed size after
688*1c60b9acSAndroid Build Coastguard Worker    deflation of sourceLen bytes.  It must be called after deflateInit() or
689*1c60b9acSAndroid Build Coastguard Worker    deflateInit2(), and after deflateSetHeader(), if used.  This would be used
690*1c60b9acSAndroid Build Coastguard Worker    to allocate an output buffer for deflation in a single pass, and so would be
691*1c60b9acSAndroid Build Coastguard Worker    called before deflate().
692*1c60b9acSAndroid Build Coastguard Worker */
693*1c60b9acSAndroid Build Coastguard Worker 
694*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
695*1c60b9acSAndroid Build Coastguard Worker                                      int bits,
696*1c60b9acSAndroid Build Coastguard Worker                                      int value));
697*1c60b9acSAndroid Build Coastguard Worker /*
698*1c60b9acSAndroid Build Coastguard Worker      deflatePrime() inserts bits in the deflate output stream.  The intent
699*1c60b9acSAndroid Build Coastguard Worker    is that this function is used to start off the deflate output with the bits
700*1c60b9acSAndroid Build Coastguard Worker    leftover from a previous deflate stream when appending to it.  As such, this
701*1c60b9acSAndroid Build Coastguard Worker    function can only be used for raw deflate, and must be used before the first
702*1c60b9acSAndroid Build Coastguard Worker    deflate() call after a deflateInit2() or deflateReset().  bits must be less
703*1c60b9acSAndroid Build Coastguard Worker    than or equal to 16, and that many of the least significant bits of value
704*1c60b9acSAndroid Build Coastguard Worker    will be inserted in the output.
705*1c60b9acSAndroid Build Coastguard Worker 
706*1c60b9acSAndroid Build Coastguard Worker      deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
707*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent.
708*1c60b9acSAndroid Build Coastguard Worker */
709*1c60b9acSAndroid Build Coastguard Worker 
710*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
711*1c60b9acSAndroid Build Coastguard Worker                                          gz_headerp head));
712*1c60b9acSAndroid Build Coastguard Worker /*
713*1c60b9acSAndroid Build Coastguard Worker      deflateSetHeader() provides gzip header information for when a gzip
714*1c60b9acSAndroid Build Coastguard Worker    stream is requested by deflateInit2().  deflateSetHeader() may be called
715*1c60b9acSAndroid Build Coastguard Worker    after deflateInit2() or deflateReset() and before the first call of
716*1c60b9acSAndroid Build Coastguard Worker    deflate().  The text, time, os, extra field, name, and comment information
717*1c60b9acSAndroid Build Coastguard Worker    in the provided gz_header structure are written to the gzip header (xflag is
718*1c60b9acSAndroid Build Coastguard Worker    ignored -- the extra flags are set according to the compression level).  The
719*1c60b9acSAndroid Build Coastguard Worker    caller must assure that, if not Z_NULL, name and comment are terminated with
720*1c60b9acSAndroid Build Coastguard Worker    a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
721*1c60b9acSAndroid Build Coastguard Worker    available there.  If hcrc is true, a gzip header crc is included.  Note that
722*1c60b9acSAndroid Build Coastguard Worker    the current versions of the command-line version of gzip (up through version
723*1c60b9acSAndroid Build Coastguard Worker    1.3.x) do not support header crc's, and will report that it is a "multi-part
724*1c60b9acSAndroid Build Coastguard Worker    gzip file" and give up.
725*1c60b9acSAndroid Build Coastguard Worker 
726*1c60b9acSAndroid Build Coastguard Worker      If deflateSetHeader is not used, the default gzip header has text false,
727*1c60b9acSAndroid Build Coastguard Worker    the time set to zero, and os set to 255, with no extra, name, or comment
728*1c60b9acSAndroid Build Coastguard Worker    fields.  The gzip header is returned to the default state by deflateReset().
729*1c60b9acSAndroid Build Coastguard Worker 
730*1c60b9acSAndroid Build Coastguard Worker      deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
731*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent.
732*1c60b9acSAndroid Build Coastguard Worker */
733*1c60b9acSAndroid Build Coastguard Worker 
734*1c60b9acSAndroid Build Coastguard Worker /*
735*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
736*1c60b9acSAndroid Build Coastguard Worker                                      int  windowBits));
737*1c60b9acSAndroid Build Coastguard Worker 
738*1c60b9acSAndroid Build Coastguard Worker      This is another version of inflateInit with an extra parameter.  The
739*1c60b9acSAndroid Build Coastguard Worker    fields next_in, avail_in, zalloc, zfree and opaque must be initialized
740*1c60b9acSAndroid Build Coastguard Worker    before by the caller.
741*1c60b9acSAndroid Build Coastguard Worker 
742*1c60b9acSAndroid Build Coastguard Worker      The windowBits parameter is the base two logarithm of the maximum window
743*1c60b9acSAndroid Build Coastguard Worker    size (the size of the history buffer).  It should be in the range 8..15 for
744*1c60b9acSAndroid Build Coastguard Worker    this version of the library.  The default value is 15 if inflateInit is used
745*1c60b9acSAndroid Build Coastguard Worker    instead.  windowBits must be greater than or equal to the windowBits value
746*1c60b9acSAndroid Build Coastguard Worker    provided to deflateInit2() while compressing, or it must be equal to 15 if
747*1c60b9acSAndroid Build Coastguard Worker    deflateInit2() was not used.  If a compressed stream with a larger window
748*1c60b9acSAndroid Build Coastguard Worker    size is given as input, inflate() will return with the error code
749*1c60b9acSAndroid Build Coastguard Worker    Z_DATA_ERROR instead of trying to allocate a larger window.
750*1c60b9acSAndroid Build Coastguard Worker 
751*1c60b9acSAndroid Build Coastguard Worker      windowBits can also be zero to request that inflate use the window size in
752*1c60b9acSAndroid Build Coastguard Worker    the zlib header of the compressed stream.
753*1c60b9acSAndroid Build Coastguard Worker 
754*1c60b9acSAndroid Build Coastguard Worker      windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
755*1c60b9acSAndroid Build Coastguard Worker    determines the window size.  inflate() will then process raw deflate data,
756*1c60b9acSAndroid Build Coastguard Worker    not looking for a zlib or gzip header, not generating a check value, and not
757*1c60b9acSAndroid Build Coastguard Worker    looking for any check values for comparison at the end of the stream.  This
758*1c60b9acSAndroid Build Coastguard Worker    is for use with other formats that use the deflate compressed data format
759*1c60b9acSAndroid Build Coastguard Worker    such as zip.  Those formats provide their own check values.  If a custom
760*1c60b9acSAndroid Build Coastguard Worker    format is developed using the raw deflate format for compressed data, it is
761*1c60b9acSAndroid Build Coastguard Worker    recommended that a check value such as an adler32 or a crc32 be applied to
762*1c60b9acSAndroid Build Coastguard Worker    the uncompressed data as is done in the zlib, gzip, and zip formats.  For
763*1c60b9acSAndroid Build Coastguard Worker    most applications, the zlib format should be used as is.  Note that comments
764*1c60b9acSAndroid Build Coastguard Worker    above on the use in deflateInit2() applies to the magnitude of windowBits.
765*1c60b9acSAndroid Build Coastguard Worker 
766*1c60b9acSAndroid Build Coastguard Worker      windowBits can also be greater than 15 for optional gzip decoding.  Add
767*1c60b9acSAndroid Build Coastguard Worker    32 to windowBits to enable zlib and gzip decoding with automatic header
768*1c60b9acSAndroid Build Coastguard Worker    detection, or add 16 to decode only the gzip format (the zlib format will
769*1c60b9acSAndroid Build Coastguard Worker    return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
770*1c60b9acSAndroid Build Coastguard Worker    crc32 instead of an adler32.
771*1c60b9acSAndroid Build Coastguard Worker 
772*1c60b9acSAndroid Build Coastguard Worker      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
773*1c60b9acSAndroid Build Coastguard Worker    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
774*1c60b9acSAndroid Build Coastguard Worker    version assumed by the caller, or Z_STREAM_ERROR if the parameters are
775*1c60b9acSAndroid Build Coastguard Worker    invalid, such as a null pointer to the structure.  msg is set to null if
776*1c60b9acSAndroid Build Coastguard Worker    there is no error message.  inflateInit2 does not perform any decompression
777*1c60b9acSAndroid Build Coastguard Worker    apart from possibly reading the zlib header if present: actual decompression
778*1c60b9acSAndroid Build Coastguard Worker    will be done by inflate().  (So next_in and avail_in may be modified, but
779*1c60b9acSAndroid Build Coastguard Worker    next_out and avail_out are unused and unchanged.) The current implementation
780*1c60b9acSAndroid Build Coastguard Worker    of inflateInit2() does not process any header information -- that is
781*1c60b9acSAndroid Build Coastguard Worker    deferred until inflate() is called.
782*1c60b9acSAndroid Build Coastguard Worker */
783*1c60b9acSAndroid Build Coastguard Worker 
784*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
785*1c60b9acSAndroid Build Coastguard Worker                                              const Bytef *dictionary,
786*1c60b9acSAndroid Build Coastguard Worker                                              uInt  dictLength));
787*1c60b9acSAndroid Build Coastguard Worker /*
788*1c60b9acSAndroid Build Coastguard Worker      Initializes the decompression dictionary from the given uncompressed byte
789*1c60b9acSAndroid Build Coastguard Worker    sequence.  This function must be called immediately after a call of inflate,
790*1c60b9acSAndroid Build Coastguard Worker    if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
791*1c60b9acSAndroid Build Coastguard Worker    can be determined from the adler32 value returned by that call of inflate.
792*1c60b9acSAndroid Build Coastguard Worker    The compressor and decompressor must use exactly the same dictionary (see
793*1c60b9acSAndroid Build Coastguard Worker    deflateSetDictionary).  For raw inflate, this function can be called
794*1c60b9acSAndroid Build Coastguard Worker    immediately after inflateInit2() or inflateReset() and before any call of
795*1c60b9acSAndroid Build Coastguard Worker    inflate() to set the dictionary.  The application must insure that the
796*1c60b9acSAndroid Build Coastguard Worker    dictionary that was used for compression is provided.
797*1c60b9acSAndroid Build Coastguard Worker 
798*1c60b9acSAndroid Build Coastguard Worker      inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
799*1c60b9acSAndroid Build Coastguard Worker    parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
800*1c60b9acSAndroid Build Coastguard Worker    inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
801*1c60b9acSAndroid Build Coastguard Worker    expected one (incorrect adler32 value).  inflateSetDictionary does not
802*1c60b9acSAndroid Build Coastguard Worker    perform any decompression: this will be done by subsequent calls of
803*1c60b9acSAndroid Build Coastguard Worker    inflate().
804*1c60b9acSAndroid Build Coastguard Worker */
805*1c60b9acSAndroid Build Coastguard Worker 
806*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
807*1c60b9acSAndroid Build Coastguard Worker /*
808*1c60b9acSAndroid Build Coastguard Worker      Skips invalid compressed data until a full flush point (see above the
809*1c60b9acSAndroid Build Coastguard Worker    description of deflate with Z_FULL_FLUSH) can be found, or until all
810*1c60b9acSAndroid Build Coastguard Worker    available input is skipped.  No output is provided.
811*1c60b9acSAndroid Build Coastguard Worker 
812*1c60b9acSAndroid Build Coastguard Worker      inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
813*1c60b9acSAndroid Build Coastguard Worker    if no more input was provided, Z_DATA_ERROR if no flush point has been
814*1c60b9acSAndroid Build Coastguard Worker    found, or Z_STREAM_ERROR if the stream structure was inconsistent.  In the
815*1c60b9acSAndroid Build Coastguard Worker    success case, the application may save the current current value of total_in
816*1c60b9acSAndroid Build Coastguard Worker    which indicates where valid compressed data was found.  In the error case,
817*1c60b9acSAndroid Build Coastguard Worker    the application may repeatedly call inflateSync, providing more input each
818*1c60b9acSAndroid Build Coastguard Worker    time, until success or end of the input data.
819*1c60b9acSAndroid Build Coastguard Worker */
820*1c60b9acSAndroid Build Coastguard Worker 
821*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
822*1c60b9acSAndroid Build Coastguard Worker                                     z_streamp source));
823*1c60b9acSAndroid Build Coastguard Worker /*
824*1c60b9acSAndroid Build Coastguard Worker      Sets the destination stream as a complete copy of the source stream.
825*1c60b9acSAndroid Build Coastguard Worker 
826*1c60b9acSAndroid Build Coastguard Worker      This function can be useful when randomly accessing a large stream.  The
827*1c60b9acSAndroid Build Coastguard Worker    first pass through the stream can periodically record the inflate state,
828*1c60b9acSAndroid Build Coastguard Worker    allowing restarting inflate at those points when randomly accessing the
829*1c60b9acSAndroid Build Coastguard Worker    stream.
830*1c60b9acSAndroid Build Coastguard Worker 
831*1c60b9acSAndroid Build Coastguard Worker      inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
832*1c60b9acSAndroid Build Coastguard Worker    enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
833*1c60b9acSAndroid Build Coastguard Worker    (such as zalloc being Z_NULL).  msg is left unchanged in both source and
834*1c60b9acSAndroid Build Coastguard Worker    destination.
835*1c60b9acSAndroid Build Coastguard Worker */
836*1c60b9acSAndroid Build Coastguard Worker 
837*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
838*1c60b9acSAndroid Build Coastguard Worker /*
839*1c60b9acSAndroid Build Coastguard Worker      This function is equivalent to inflateEnd followed by inflateInit,
840*1c60b9acSAndroid Build Coastguard Worker    but does not free and reallocate all the internal decompression state.  The
841*1c60b9acSAndroid Build Coastguard Worker    stream will keep attributes that may have been set by inflateInit2.
842*1c60b9acSAndroid Build Coastguard Worker 
843*1c60b9acSAndroid Build Coastguard Worker      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
844*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent (such as zalloc or state being Z_NULL).
845*1c60b9acSAndroid Build Coastguard Worker */
846*1c60b9acSAndroid Build Coastguard Worker 
847*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
848*1c60b9acSAndroid Build Coastguard Worker                                       int windowBits));
849*1c60b9acSAndroid Build Coastguard Worker /*
850*1c60b9acSAndroid Build Coastguard Worker      This function is the same as inflateReset, but it also permits changing
851*1c60b9acSAndroid Build Coastguard Worker    the wrap and window size requests.  The windowBits parameter is interpreted
852*1c60b9acSAndroid Build Coastguard Worker    the same as it is for inflateInit2.
853*1c60b9acSAndroid Build Coastguard Worker 
854*1c60b9acSAndroid Build Coastguard Worker      inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
855*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent (such as zalloc or state being Z_NULL), or if
856*1c60b9acSAndroid Build Coastguard Worker    the windowBits parameter is invalid.
857*1c60b9acSAndroid Build Coastguard Worker */
858*1c60b9acSAndroid Build Coastguard Worker 
859*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
860*1c60b9acSAndroid Build Coastguard Worker                                      int bits,
861*1c60b9acSAndroid Build Coastguard Worker                                      int value));
862*1c60b9acSAndroid Build Coastguard Worker /*
863*1c60b9acSAndroid Build Coastguard Worker      This function inserts bits in the inflate input stream.  The intent is
864*1c60b9acSAndroid Build Coastguard Worker    that this function is used to start inflating at a bit position in the
865*1c60b9acSAndroid Build Coastguard Worker    middle of a byte.  The provided bits will be used before any bytes are used
866*1c60b9acSAndroid Build Coastguard Worker    from next_in.  This function should only be used with raw inflate, and
867*1c60b9acSAndroid Build Coastguard Worker    should be used before the first inflate() call after inflateInit2() or
868*1c60b9acSAndroid Build Coastguard Worker    inflateReset().  bits must be less than or equal to 16, and that many of the
869*1c60b9acSAndroid Build Coastguard Worker    least significant bits of value will be inserted in the input.
870*1c60b9acSAndroid Build Coastguard Worker 
871*1c60b9acSAndroid Build Coastguard Worker      If bits is negative, then the input stream bit buffer is emptied.  Then
872*1c60b9acSAndroid Build Coastguard Worker    inflatePrime() can be called again to put bits in the buffer.  This is used
873*1c60b9acSAndroid Build Coastguard Worker    to clear out bits leftover after feeding inflate a block description prior
874*1c60b9acSAndroid Build Coastguard Worker    to feeding inflate codes.
875*1c60b9acSAndroid Build Coastguard Worker 
876*1c60b9acSAndroid Build Coastguard Worker      inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
877*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent.
878*1c60b9acSAndroid Build Coastguard Worker */
879*1c60b9acSAndroid Build Coastguard Worker 
880*1c60b9acSAndroid Build Coastguard Worker ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
881*1c60b9acSAndroid Build Coastguard Worker /*
882*1c60b9acSAndroid Build Coastguard Worker      This function returns two values, one in the lower 16 bits of the return
883*1c60b9acSAndroid Build Coastguard Worker    value, and the other in the remaining upper bits, obtained by shifting the
884*1c60b9acSAndroid Build Coastguard Worker    return value down 16 bits.  If the upper value is -1 and the lower value is
885*1c60b9acSAndroid Build Coastguard Worker    zero, then inflate() is currently decoding information outside of a block.
886*1c60b9acSAndroid Build Coastguard Worker    If the upper value is -1 and the lower value is non-zero, then inflate is in
887*1c60b9acSAndroid Build Coastguard Worker    the middle of a stored block, with the lower value equaling the number of
888*1c60b9acSAndroid Build Coastguard Worker    bytes from the input remaining to copy.  If the upper value is not -1, then
889*1c60b9acSAndroid Build Coastguard Worker    it is the number of bits back from the current bit position in the input of
890*1c60b9acSAndroid Build Coastguard Worker    the code (literal or length/distance pair) currently being processed.  In
891*1c60b9acSAndroid Build Coastguard Worker    that case the lower value is the number of bytes already emitted for that
892*1c60b9acSAndroid Build Coastguard Worker    code.
893*1c60b9acSAndroid Build Coastguard Worker 
894*1c60b9acSAndroid Build Coastguard Worker      A code is being processed if inflate is waiting for more input to complete
895*1c60b9acSAndroid Build Coastguard Worker    decoding of the code, or if it has completed decoding but is waiting for
896*1c60b9acSAndroid Build Coastguard Worker    more output space to write the literal or match data.
897*1c60b9acSAndroid Build Coastguard Worker 
898*1c60b9acSAndroid Build Coastguard Worker      inflateMark() is used to mark locations in the input data for random
899*1c60b9acSAndroid Build Coastguard Worker    access, which may be at bit positions, and to note those cases where the
900*1c60b9acSAndroid Build Coastguard Worker    output of a code may span boundaries of random access blocks.  The current
901*1c60b9acSAndroid Build Coastguard Worker    location in the input stream can be determined from avail_in and data_type
902*1c60b9acSAndroid Build Coastguard Worker    as noted in the description for the Z_BLOCK flush parameter for inflate.
903*1c60b9acSAndroid Build Coastguard Worker 
904*1c60b9acSAndroid Build Coastguard Worker      inflateMark returns the value noted above or -1 << 16 if the provided
905*1c60b9acSAndroid Build Coastguard Worker    source stream state was inconsistent.
906*1c60b9acSAndroid Build Coastguard Worker */
907*1c60b9acSAndroid Build Coastguard Worker 
908*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
909*1c60b9acSAndroid Build Coastguard Worker                                          gz_headerp head));
910*1c60b9acSAndroid Build Coastguard Worker /*
911*1c60b9acSAndroid Build Coastguard Worker      inflateGetHeader() requests that gzip header information be stored in the
912*1c60b9acSAndroid Build Coastguard Worker    provided gz_header structure.  inflateGetHeader() may be called after
913*1c60b9acSAndroid Build Coastguard Worker    inflateInit2() or inflateReset(), and before the first call of inflate().
914*1c60b9acSAndroid Build Coastguard Worker    As inflate() processes the gzip stream, head->done is zero until the header
915*1c60b9acSAndroid Build Coastguard Worker    is completed, at which time head->done is set to one.  If a zlib stream is
916*1c60b9acSAndroid Build Coastguard Worker    being decoded, then head->done is set to -1 to indicate that there will be
917*1c60b9acSAndroid Build Coastguard Worker    no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
918*1c60b9acSAndroid Build Coastguard Worker    used to force inflate() to return immediately after header processing is
919*1c60b9acSAndroid Build Coastguard Worker    complete and before any actual data is decompressed.
920*1c60b9acSAndroid Build Coastguard Worker 
921*1c60b9acSAndroid Build Coastguard Worker      The text, time, xflags, and os fields are filled in with the gzip header
922*1c60b9acSAndroid Build Coastguard Worker    contents.  hcrc is set to true if there is a header CRC.  (The header CRC
923*1c60b9acSAndroid Build Coastguard Worker    was valid if done is set to one.) If extra is not Z_NULL, then extra_max
924*1c60b9acSAndroid Build Coastguard Worker    contains the maximum number of bytes to write to extra.  Once done is true,
925*1c60b9acSAndroid Build Coastguard Worker    extra_len contains the actual extra field length, and extra contains the
926*1c60b9acSAndroid Build Coastguard Worker    extra field, or that field truncated if extra_max is less than extra_len.
927*1c60b9acSAndroid Build Coastguard Worker    If name is not Z_NULL, then up to name_max characters are written there,
928*1c60b9acSAndroid Build Coastguard Worker    terminated with a zero unless the length is greater than name_max.  If
929*1c60b9acSAndroid Build Coastguard Worker    comment is not Z_NULL, then up to comm_max characters are written there,
930*1c60b9acSAndroid Build Coastguard Worker    terminated with a zero unless the length is greater than comm_max.  When any
931*1c60b9acSAndroid Build Coastguard Worker    of extra, name, or comment are not Z_NULL and the respective field is not
932*1c60b9acSAndroid Build Coastguard Worker    present in the header, then that field is set to Z_NULL to signal its
933*1c60b9acSAndroid Build Coastguard Worker    absence.  This allows the use of deflateSetHeader() with the returned
934*1c60b9acSAndroid Build Coastguard Worker    structure to duplicate the header.  However if those fields are set to
935*1c60b9acSAndroid Build Coastguard Worker    allocated memory, then the application will need to save those pointers
936*1c60b9acSAndroid Build Coastguard Worker    elsewhere so that they can be eventually freed.
937*1c60b9acSAndroid Build Coastguard Worker 
938*1c60b9acSAndroid Build Coastguard Worker      If inflateGetHeader is not used, then the header information is simply
939*1c60b9acSAndroid Build Coastguard Worker    discarded.  The header is always checked for validity, including the header
940*1c60b9acSAndroid Build Coastguard Worker    CRC if present.  inflateReset() will reset the process to discard the header
941*1c60b9acSAndroid Build Coastguard Worker    information.  The application would need to call inflateGetHeader() again to
942*1c60b9acSAndroid Build Coastguard Worker    retrieve the header from the next gzip stream.
943*1c60b9acSAndroid Build Coastguard Worker 
944*1c60b9acSAndroid Build Coastguard Worker      inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
945*1c60b9acSAndroid Build Coastguard Worker    stream state was inconsistent.
946*1c60b9acSAndroid Build Coastguard Worker */
947*1c60b9acSAndroid Build Coastguard Worker 
948*1c60b9acSAndroid Build Coastguard Worker /*
949*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
950*1c60b9acSAndroid Build Coastguard Worker                                         unsigned char FAR *window));
951*1c60b9acSAndroid Build Coastguard Worker 
952*1c60b9acSAndroid Build Coastguard Worker      Initialize the internal stream state for decompression using inflateBack()
953*1c60b9acSAndroid Build Coastguard Worker    calls.  The fields zalloc, zfree and opaque in strm must be initialized
954*1c60b9acSAndroid Build Coastguard Worker    before the call.  If zalloc and zfree are Z_NULL, then the default library-
955*1c60b9acSAndroid Build Coastguard Worker    derived memory allocation routines are used.  windowBits is the base two
956*1c60b9acSAndroid Build Coastguard Worker    logarithm of the window size, in the range 8..15.  window is a caller
957*1c60b9acSAndroid Build Coastguard Worker    supplied buffer of that size.  Except for special applications where it is
958*1c60b9acSAndroid Build Coastguard Worker    assured that deflate was used with small window sizes, windowBits must be 15
959*1c60b9acSAndroid Build Coastguard Worker    and a 32K byte window must be supplied to be able to decompress general
960*1c60b9acSAndroid Build Coastguard Worker    deflate streams.
961*1c60b9acSAndroid Build Coastguard Worker 
962*1c60b9acSAndroid Build Coastguard Worker      See inflateBack() for the usage of these routines.
963*1c60b9acSAndroid Build Coastguard Worker 
964*1c60b9acSAndroid Build Coastguard Worker      inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
965*1c60b9acSAndroid Build Coastguard Worker    the paramaters are invalid, Z_MEM_ERROR if the internal state could not be
966*1c60b9acSAndroid Build Coastguard Worker    allocated, or Z_VERSION_ERROR if the version of the library does not match
967*1c60b9acSAndroid Build Coastguard Worker    the version of the header file.
968*1c60b9acSAndroid Build Coastguard Worker */
969*1c60b9acSAndroid Build Coastguard Worker 
970*1c60b9acSAndroid Build Coastguard Worker typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
971*1c60b9acSAndroid Build Coastguard Worker typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
972*1c60b9acSAndroid Build Coastguard Worker 
973*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
974*1c60b9acSAndroid Build Coastguard Worker                                     in_func in, void FAR *in_desc,
975*1c60b9acSAndroid Build Coastguard Worker                                     out_func out, void FAR *out_desc));
976*1c60b9acSAndroid Build Coastguard Worker /*
977*1c60b9acSAndroid Build Coastguard Worker      inflateBack() does a raw inflate with a single call using a call-back
978*1c60b9acSAndroid Build Coastguard Worker    interface for input and output.  This is more efficient than inflate() for
979*1c60b9acSAndroid Build Coastguard Worker    file i/o applications in that it avoids copying between the output and the
980*1c60b9acSAndroid Build Coastguard Worker    sliding window by simply making the window itself the output buffer.  This
981*1c60b9acSAndroid Build Coastguard Worker    function trusts the application to not change the output buffer passed by
982*1c60b9acSAndroid Build Coastguard Worker    the output function, at least until inflateBack() returns.
983*1c60b9acSAndroid Build Coastguard Worker 
984*1c60b9acSAndroid Build Coastguard Worker      inflateBackInit() must be called first to allocate the internal state
985*1c60b9acSAndroid Build Coastguard Worker    and to initialize the state with the user-provided window buffer.
986*1c60b9acSAndroid Build Coastguard Worker    inflateBack() may then be used multiple times to inflate a complete, raw
987*1c60b9acSAndroid Build Coastguard Worker    deflate stream with each call.  inflateBackEnd() is then called to free the
988*1c60b9acSAndroid Build Coastguard Worker    allocated state.
989*1c60b9acSAndroid Build Coastguard Worker 
990*1c60b9acSAndroid Build Coastguard Worker      A raw deflate stream is one with no zlib or gzip header or trailer.
991*1c60b9acSAndroid Build Coastguard Worker    This routine would normally be used in a utility that reads zip or gzip
992*1c60b9acSAndroid Build Coastguard Worker    files and writes out uncompressed files.  The utility would decode the
993*1c60b9acSAndroid Build Coastguard Worker    header and process the trailer on its own, hence this routine expects only
994*1c60b9acSAndroid Build Coastguard Worker    the raw deflate stream to decompress.  This is different from the normal
995*1c60b9acSAndroid Build Coastguard Worker    behavior of inflate(), which expects either a zlib or gzip header and
996*1c60b9acSAndroid Build Coastguard Worker    trailer around the deflate stream.
997*1c60b9acSAndroid Build Coastguard Worker 
998*1c60b9acSAndroid Build Coastguard Worker      inflateBack() uses two subroutines supplied by the caller that are then
999*1c60b9acSAndroid Build Coastguard Worker    called by inflateBack() for input and output.  inflateBack() calls those
1000*1c60b9acSAndroid Build Coastguard Worker    routines until it reads a complete deflate stream and writes out all of the
1001*1c60b9acSAndroid Build Coastguard Worker    uncompressed data, or until it encounters an error.  The function's
1002*1c60b9acSAndroid Build Coastguard Worker    parameters and return types are defined above in the in_func and out_func
1003*1c60b9acSAndroid Build Coastguard Worker    typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
1004*1c60b9acSAndroid Build Coastguard Worker    number of bytes of provided input, and a pointer to that input in buf.  If
1005*1c60b9acSAndroid Build Coastguard Worker    there is no input available, in() must return zero--buf is ignored in that
1006*1c60b9acSAndroid Build Coastguard Worker    case--and inflateBack() will return a buffer error.  inflateBack() will call
1007*1c60b9acSAndroid Build Coastguard Worker    out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
1008*1c60b9acSAndroid Build Coastguard Worker    should return zero on success, or non-zero on failure.  If out() returns
1009*1c60b9acSAndroid Build Coastguard Worker    non-zero, inflateBack() will return with an error.  Neither in() nor out()
1010*1c60b9acSAndroid Build Coastguard Worker    are permitted to change the contents of the window provided to
1011*1c60b9acSAndroid Build Coastguard Worker    inflateBackInit(), which is also the buffer that out() uses to write from.
1012*1c60b9acSAndroid Build Coastguard Worker    The length written by out() will be at most the window size.  Any non-zero
1013*1c60b9acSAndroid Build Coastguard Worker    amount of input may be provided by in().
1014*1c60b9acSAndroid Build Coastguard Worker 
1015*1c60b9acSAndroid Build Coastguard Worker      For convenience, inflateBack() can be provided input on the first call by
1016*1c60b9acSAndroid Build Coastguard Worker    setting strm->next_in and strm->avail_in.  If that input is exhausted, then
1017*1c60b9acSAndroid Build Coastguard Worker    in() will be called.  Therefore strm->next_in must be initialized before
1018*1c60b9acSAndroid Build Coastguard Worker    calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
1019*1c60b9acSAndroid Build Coastguard Worker    immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
1020*1c60b9acSAndroid Build Coastguard Worker    must also be initialized, and then if strm->avail_in is not zero, input will
1021*1c60b9acSAndroid Build Coastguard Worker    initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
1022*1c60b9acSAndroid Build Coastguard Worker 
1023*1c60b9acSAndroid Build Coastguard Worker      The in_desc and out_desc parameters of inflateBack() is passed as the
1024*1c60b9acSAndroid Build Coastguard Worker    first parameter of in() and out() respectively when they are called.  These
1025*1c60b9acSAndroid Build Coastguard Worker    descriptors can be optionally used to pass any information that the caller-
1026*1c60b9acSAndroid Build Coastguard Worker    supplied in() and out() functions need to do their job.
1027*1c60b9acSAndroid Build Coastguard Worker 
1028*1c60b9acSAndroid Build Coastguard Worker      On return, inflateBack() will set strm->next_in and strm->avail_in to
1029*1c60b9acSAndroid Build Coastguard Worker    pass back any unused input that was provided by the last in() call.  The
1030*1c60b9acSAndroid Build Coastguard Worker    return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
1031*1c60b9acSAndroid Build Coastguard Worker    if in() or out() returned an error, Z_DATA_ERROR if there was a format error
1032*1c60b9acSAndroid Build Coastguard Worker    in the deflate stream (in which case strm->msg is set to indicate the nature
1033*1c60b9acSAndroid Build Coastguard Worker    of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
1034*1c60b9acSAndroid Build Coastguard Worker    In the case of Z_BUF_ERROR, an input or output error can be distinguished
1035*1c60b9acSAndroid Build Coastguard Worker    using strm->next_in which will be Z_NULL only if in() returned an error.  If
1036*1c60b9acSAndroid Build Coastguard Worker    strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
1037*1c60b9acSAndroid Build Coastguard Worker    non-zero.  (in() will always be called before out(), so strm->next_in is
1038*1c60b9acSAndroid Build Coastguard Worker    assured to be defined if out() returns non-zero.) Note that inflateBack()
1039*1c60b9acSAndroid Build Coastguard Worker    cannot return Z_OK.
1040*1c60b9acSAndroid Build Coastguard Worker */
1041*1c60b9acSAndroid Build Coastguard Worker 
1042*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
1043*1c60b9acSAndroid Build Coastguard Worker /*
1044*1c60b9acSAndroid Build Coastguard Worker      All memory allocated by inflateBackInit() is freed.
1045*1c60b9acSAndroid Build Coastguard Worker 
1046*1c60b9acSAndroid Build Coastguard Worker      inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
1047*1c60b9acSAndroid Build Coastguard Worker    state was inconsistent.
1048*1c60b9acSAndroid Build Coastguard Worker */
1049*1c60b9acSAndroid Build Coastguard Worker 
1050*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
1051*1c60b9acSAndroid Build Coastguard Worker /* Return flags indicating compile-time options.
1052*1c60b9acSAndroid Build Coastguard Worker 
1053*1c60b9acSAndroid Build Coastguard Worker     Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
1054*1c60b9acSAndroid Build Coastguard Worker      1.0: size of uInt
1055*1c60b9acSAndroid Build Coastguard Worker      3.2: size of uLong
1056*1c60b9acSAndroid Build Coastguard Worker      5.4: size of voidpf (pointer)
1057*1c60b9acSAndroid Build Coastguard Worker      7.6: size of z_off_t
1058*1c60b9acSAndroid Build Coastguard Worker 
1059*1c60b9acSAndroid Build Coastguard Worker     Compiler, assembler, and debug options:
1060*1c60b9acSAndroid Build Coastguard Worker      8: DEBUG
1061*1c60b9acSAndroid Build Coastguard Worker      9: ASMV or ASMINF -- use ASM code
1062*1c60b9acSAndroid Build Coastguard Worker      10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
1063*1c60b9acSAndroid Build Coastguard Worker      11: 0 (reserved)
1064*1c60b9acSAndroid Build Coastguard Worker 
1065*1c60b9acSAndroid Build Coastguard Worker     One-time table building (smaller code, but not thread-safe if true):
1066*1c60b9acSAndroid Build Coastguard Worker      12: BUILDFIXED -- build static block decoding tables when needed
1067*1c60b9acSAndroid Build Coastguard Worker      13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
1068*1c60b9acSAndroid Build Coastguard Worker      14,15: 0 (reserved)
1069*1c60b9acSAndroid Build Coastguard Worker 
1070*1c60b9acSAndroid Build Coastguard Worker     Library content (indicates missing functionality):
1071*1c60b9acSAndroid Build Coastguard Worker      16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
1072*1c60b9acSAndroid Build Coastguard Worker                           deflate code when not needed)
1073*1c60b9acSAndroid Build Coastguard Worker      17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
1074*1c60b9acSAndroid Build Coastguard Worker                     and decode gzip streams (to avoid linking crc code)
1075*1c60b9acSAndroid Build Coastguard Worker      18-19: 0 (reserved)
1076*1c60b9acSAndroid Build Coastguard Worker 
1077*1c60b9acSAndroid Build Coastguard Worker     Operation variations (changes in library functionality):
1078*1c60b9acSAndroid Build Coastguard Worker      20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
1079*1c60b9acSAndroid Build Coastguard Worker      21: FASTEST -- deflate algorithm with only one, lowest compression level
1080*1c60b9acSAndroid Build Coastguard Worker      22,23: 0 (reserved)
1081*1c60b9acSAndroid Build Coastguard Worker 
1082*1c60b9acSAndroid Build Coastguard Worker     The sprintf variant used by gzprintf (zero is best):
1083*1c60b9acSAndroid Build Coastguard Worker      24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
1084*1c60b9acSAndroid Build Coastguard Worker      25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
1085*1c60b9acSAndroid Build Coastguard Worker      26: 0 = returns value, 1 = void -- 1 means inferred string length returned
1086*1c60b9acSAndroid Build Coastguard Worker 
1087*1c60b9acSAndroid Build Coastguard Worker     Remainder:
1088*1c60b9acSAndroid Build Coastguard Worker      27-31: 0 (reserved)
1089*1c60b9acSAndroid Build Coastguard Worker  */
1090*1c60b9acSAndroid Build Coastguard Worker 
1091*1c60b9acSAndroid Build Coastguard Worker 
1092*1c60b9acSAndroid Build Coastguard Worker                         /* utility functions */
1093*1c60b9acSAndroid Build Coastguard Worker 
1094*1c60b9acSAndroid Build Coastguard Worker /*
1095*1c60b9acSAndroid Build Coastguard Worker      The following utility functions are implemented on top of the basic
1096*1c60b9acSAndroid Build Coastguard Worker    stream-oriented functions.  To simplify the interface, some default options
1097*1c60b9acSAndroid Build Coastguard Worker    are assumed (compression level and memory usage, standard memory allocation
1098*1c60b9acSAndroid Build Coastguard Worker    functions).  The source code of these utility functions can be modified if
1099*1c60b9acSAndroid Build Coastguard Worker    you need special options.
1100*1c60b9acSAndroid Build Coastguard Worker */
1101*1c60b9acSAndroid Build Coastguard Worker 
1102*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
1103*1c60b9acSAndroid Build Coastguard Worker                                  const Bytef *source, uLong sourceLen));
1104*1c60b9acSAndroid Build Coastguard Worker /*
1105*1c60b9acSAndroid Build Coastguard Worker      Compresses the source buffer into the destination buffer.  sourceLen is
1106*1c60b9acSAndroid Build Coastguard Worker    the byte length of the source buffer.  Upon entry, destLen is the total size
1107*1c60b9acSAndroid Build Coastguard Worker    of the destination buffer, which must be at least the value returned by
1108*1c60b9acSAndroid Build Coastguard Worker    compressBound(sourceLen).  Upon exit, destLen is the actual size of the
1109*1c60b9acSAndroid Build Coastguard Worker    compressed buffer.
1110*1c60b9acSAndroid Build Coastguard Worker 
1111*1c60b9acSAndroid Build Coastguard Worker      compress returns Z_OK if success, Z_MEM_ERROR if there was not
1112*1c60b9acSAndroid Build Coastguard Worker    enough memory, Z_BUF_ERROR if there was not enough room in the output
1113*1c60b9acSAndroid Build Coastguard Worker    buffer.
1114*1c60b9acSAndroid Build Coastguard Worker */
1115*1c60b9acSAndroid Build Coastguard Worker 
1116*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
1117*1c60b9acSAndroid Build Coastguard Worker                                   const Bytef *source, uLong sourceLen,
1118*1c60b9acSAndroid Build Coastguard Worker                                   int level));
1119*1c60b9acSAndroid Build Coastguard Worker /*
1120*1c60b9acSAndroid Build Coastguard Worker      Compresses the source buffer into the destination buffer.  The level
1121*1c60b9acSAndroid Build Coastguard Worker    parameter has the same meaning as in deflateInit.  sourceLen is the byte
1122*1c60b9acSAndroid Build Coastguard Worker    length of the source buffer.  Upon entry, destLen is the total size of the
1123*1c60b9acSAndroid Build Coastguard Worker    destination buffer, which must be at least the value returned by
1124*1c60b9acSAndroid Build Coastguard Worker    compressBound(sourceLen).  Upon exit, destLen is the actual size of the
1125*1c60b9acSAndroid Build Coastguard Worker    compressed buffer.
1126*1c60b9acSAndroid Build Coastguard Worker 
1127*1c60b9acSAndroid Build Coastguard Worker      compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
1128*1c60b9acSAndroid Build Coastguard Worker    memory, Z_BUF_ERROR if there was not enough room in the output buffer,
1129*1c60b9acSAndroid Build Coastguard Worker    Z_STREAM_ERROR if the level parameter is invalid.
1130*1c60b9acSAndroid Build Coastguard Worker */
1131*1c60b9acSAndroid Build Coastguard Worker 
1132*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
1133*1c60b9acSAndroid Build Coastguard Worker /*
1134*1c60b9acSAndroid Build Coastguard Worker      compressBound() returns an upper bound on the compressed size after
1135*1c60b9acSAndroid Build Coastguard Worker    compress() or compress2() on sourceLen bytes.  It would be used before a
1136*1c60b9acSAndroid Build Coastguard Worker    compress() or compress2() call to allocate the destination buffer.
1137*1c60b9acSAndroid Build Coastguard Worker */
1138*1c60b9acSAndroid Build Coastguard Worker 
1139*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
1140*1c60b9acSAndroid Build Coastguard Worker                                    const Bytef *source, uLong sourceLen));
1141*1c60b9acSAndroid Build Coastguard Worker /*
1142*1c60b9acSAndroid Build Coastguard Worker      Decompresses the source buffer into the destination buffer.  sourceLen is
1143*1c60b9acSAndroid Build Coastguard Worker    the byte length of the source buffer.  Upon entry, destLen is the total size
1144*1c60b9acSAndroid Build Coastguard Worker    of the destination buffer, which must be large enough to hold the entire
1145*1c60b9acSAndroid Build Coastguard Worker    uncompressed data.  (The size of the uncompressed data must have been saved
1146*1c60b9acSAndroid Build Coastguard Worker    previously by the compressor and transmitted to the decompressor by some
1147*1c60b9acSAndroid Build Coastguard Worker    mechanism outside the scope of this compression library.) Upon exit, destLen
1148*1c60b9acSAndroid Build Coastguard Worker    is the actual size of the uncompressed buffer.
1149*1c60b9acSAndroid Build Coastguard Worker 
1150*1c60b9acSAndroid Build Coastguard Worker      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
1151*1c60b9acSAndroid Build Coastguard Worker    enough memory, Z_BUF_ERROR if there was not enough room in the output
1152*1c60b9acSAndroid Build Coastguard Worker    buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
1153*1c60b9acSAndroid Build Coastguard Worker */
1154*1c60b9acSAndroid Build Coastguard Worker 
1155*1c60b9acSAndroid Build Coastguard Worker 
1156*1c60b9acSAndroid Build Coastguard Worker                         /* gzip file access functions */
1157*1c60b9acSAndroid Build Coastguard Worker 
1158*1c60b9acSAndroid Build Coastguard Worker /*
1159*1c60b9acSAndroid Build Coastguard Worker      This library supports reading and writing files in gzip (.gz) format with
1160*1c60b9acSAndroid Build Coastguard Worker    an interface similar to that of stdio, using the functions that start with
1161*1c60b9acSAndroid Build Coastguard Worker    "gz".  The gzip format is different from the zlib format.  gzip is a gzip
1162*1c60b9acSAndroid Build Coastguard Worker    wrapper, documented in RFC 1952, wrapped around a deflate stream.
1163*1c60b9acSAndroid Build Coastguard Worker */
1164*1c60b9acSAndroid Build Coastguard Worker 
1165*1c60b9acSAndroid Build Coastguard Worker typedef voidp gzFile;       /* opaque gzip file descriptor */
1166*1c60b9acSAndroid Build Coastguard Worker 
1167*1c60b9acSAndroid Build Coastguard Worker /*
1168*1c60b9acSAndroid Build Coastguard Worker ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
1169*1c60b9acSAndroid Build Coastguard Worker 
1170*1c60b9acSAndroid Build Coastguard Worker      Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
1171*1c60b9acSAndroid Build Coastguard Worker    in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
1172*1c60b9acSAndroid Build Coastguard Worker    a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
1173*1c60b9acSAndroid Build Coastguard Worker    compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
1174*1c60b9acSAndroid Build Coastguard Worker    for fixed code compression as in "wb9F".  (See the description of
1175*1c60b9acSAndroid Build Coastguard Worker    deflateInit2 for more information about the strategy parameter.) Also "a"
1176*1c60b9acSAndroid Build Coastguard Worker    can be used instead of "w" to request that the gzip stream that will be
1177*1c60b9acSAndroid Build Coastguard Worker    written be appended to the file.  "+" will result in an error, since reading
1178*1c60b9acSAndroid Build Coastguard Worker    and writing to the same gzip file is not supported.
1179*1c60b9acSAndroid Build Coastguard Worker 
1180*1c60b9acSAndroid Build Coastguard Worker      gzopen can be used to read a file which is not in gzip format; in this
1181*1c60b9acSAndroid Build Coastguard Worker    case gzread will directly read from the file without decompression.
1182*1c60b9acSAndroid Build Coastguard Worker 
1183*1c60b9acSAndroid Build Coastguard Worker      gzopen returns NULL if the file could not be opened, if there was
1184*1c60b9acSAndroid Build Coastguard Worker    insufficient memory to allocate the gzFile state, or if an invalid mode was
1185*1c60b9acSAndroid Build Coastguard Worker    specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
1186*1c60b9acSAndroid Build Coastguard Worker    errno can be checked to determine if the reason gzopen failed was that the
1187*1c60b9acSAndroid Build Coastguard Worker    file could not be opened.
1188*1c60b9acSAndroid Build Coastguard Worker */
1189*1c60b9acSAndroid Build Coastguard Worker 
1190*1c60b9acSAndroid Build Coastguard Worker ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
1191*1c60b9acSAndroid Build Coastguard Worker /*
1192*1c60b9acSAndroid Build Coastguard Worker      gzdopen associates a gzFile with the file descriptor fd.  File descriptors
1193*1c60b9acSAndroid Build Coastguard Worker    are obtained from calls like open, dup, creat, pipe or fileno (if the file
1194*1c60b9acSAndroid Build Coastguard Worker    has been previously opened with fopen).  The mode parameter is as in gzopen.
1195*1c60b9acSAndroid Build Coastguard Worker 
1196*1c60b9acSAndroid Build Coastguard Worker      The next call of gzclose on the returned gzFile will also close the file
1197*1c60b9acSAndroid Build Coastguard Worker    descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
1198*1c60b9acSAndroid Build Coastguard Worker    fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
1199*1c60b9acSAndroid Build Coastguard Worker    mode);.  The duplicated descriptor should be saved to avoid a leak, since
1200*1c60b9acSAndroid Build Coastguard Worker    gzdopen does not close fd if it fails.
1201*1c60b9acSAndroid Build Coastguard Worker 
1202*1c60b9acSAndroid Build Coastguard Worker      gzdopen returns NULL if there was insufficient memory to allocate the
1203*1c60b9acSAndroid Build Coastguard Worker    gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
1204*1c60b9acSAndroid Build Coastguard Worker    provided, or '+' was provided), or if fd is -1.  The file descriptor is not
1205*1c60b9acSAndroid Build Coastguard Worker    used until the next gz* read, write, seek, or close operation, so gzdopen
1206*1c60b9acSAndroid Build Coastguard Worker    will not detect if fd is invalid (unless fd is -1).
1207*1c60b9acSAndroid Build Coastguard Worker */
1208*1c60b9acSAndroid Build Coastguard Worker 
1209*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
1210*1c60b9acSAndroid Build Coastguard Worker /*
1211*1c60b9acSAndroid Build Coastguard Worker      Set the internal buffer size used by this library's functions.  The
1212*1c60b9acSAndroid Build Coastguard Worker    default buffer size is 8192 bytes.  This function must be called after
1213*1c60b9acSAndroid Build Coastguard Worker    gzopen() or gzdopen(), and before any other calls that read or write the
1214*1c60b9acSAndroid Build Coastguard Worker    file.  The buffer memory allocation is always deferred to the first read or
1215*1c60b9acSAndroid Build Coastguard Worker    write.  Two buffers are allocated, either both of the specified size when
1216*1c60b9acSAndroid Build Coastguard Worker    writing, or one of the specified size and the other twice that size when
1217*1c60b9acSAndroid Build Coastguard Worker    reading.  A larger buffer size of, for example, 64K or 128K bytes will
1218*1c60b9acSAndroid Build Coastguard Worker    noticeably increase the speed of decompression (reading).
1219*1c60b9acSAndroid Build Coastguard Worker 
1220*1c60b9acSAndroid Build Coastguard Worker      The new buffer size also affects the maximum length for gzprintf().
1221*1c60b9acSAndroid Build Coastguard Worker 
1222*1c60b9acSAndroid Build Coastguard Worker      gzbuffer() returns 0 on success, or -1 on failure, such as being called
1223*1c60b9acSAndroid Build Coastguard Worker    too late.
1224*1c60b9acSAndroid Build Coastguard Worker */
1225*1c60b9acSAndroid Build Coastguard Worker 
1226*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
1227*1c60b9acSAndroid Build Coastguard Worker /*
1228*1c60b9acSAndroid Build Coastguard Worker      Dynamically update the compression level or strategy.  See the description
1229*1c60b9acSAndroid Build Coastguard Worker    of deflateInit2 for the meaning of these parameters.
1230*1c60b9acSAndroid Build Coastguard Worker 
1231*1c60b9acSAndroid Build Coastguard Worker      gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
1232*1c60b9acSAndroid Build Coastguard Worker    opened for writing.
1233*1c60b9acSAndroid Build Coastguard Worker */
1234*1c60b9acSAndroid Build Coastguard Worker 
1235*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
1236*1c60b9acSAndroid Build Coastguard Worker /*
1237*1c60b9acSAndroid Build Coastguard Worker      Reads the given number of uncompressed bytes from the compressed file.  If
1238*1c60b9acSAndroid Build Coastguard Worker    the input file was not in gzip format, gzread copies the given number of
1239*1c60b9acSAndroid Build Coastguard Worker    bytes into the buffer.
1240*1c60b9acSAndroid Build Coastguard Worker 
1241*1c60b9acSAndroid Build Coastguard Worker      After reaching the end of a gzip stream in the input, gzread will continue
1242*1c60b9acSAndroid Build Coastguard Worker    to read, looking for another gzip stream, or failing that, reading the rest
1243*1c60b9acSAndroid Build Coastguard Worker    of the input file directly without decompression.  The entire input file
1244*1c60b9acSAndroid Build Coastguard Worker    will be read if gzread is called until it returns less than the requested
1245*1c60b9acSAndroid Build Coastguard Worker    len.
1246*1c60b9acSAndroid Build Coastguard Worker 
1247*1c60b9acSAndroid Build Coastguard Worker      gzread returns the number of uncompressed bytes actually read, less than
1248*1c60b9acSAndroid Build Coastguard Worker    len for end of file, or -1 for error.
1249*1c60b9acSAndroid Build Coastguard Worker */
1250*1c60b9acSAndroid Build Coastguard Worker 
1251*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
1252*1c60b9acSAndroid Build Coastguard Worker                                 voidpc buf, unsigned len));
1253*1c60b9acSAndroid Build Coastguard Worker /*
1254*1c60b9acSAndroid Build Coastguard Worker      Writes the given number of uncompressed bytes into the compressed file.
1255*1c60b9acSAndroid Build Coastguard Worker    gzwrite returns the number of uncompressed bytes written or 0 in case of
1256*1c60b9acSAndroid Build Coastguard Worker    error.
1257*1c60b9acSAndroid Build Coastguard Worker */
1258*1c60b9acSAndroid Build Coastguard Worker 
1259*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
1260*1c60b9acSAndroid Build Coastguard Worker /*
1261*1c60b9acSAndroid Build Coastguard Worker      Converts, formats, and writes the arguments to the compressed file under
1262*1c60b9acSAndroid Build Coastguard Worker    control of the format string, as in fprintf.  gzprintf returns the number of
1263*1c60b9acSAndroid Build Coastguard Worker    uncompressed bytes actually written, or 0 in case of error.  The number of
1264*1c60b9acSAndroid Build Coastguard Worker    uncompressed bytes written is limited to 8191, or one less than the buffer
1265*1c60b9acSAndroid Build Coastguard Worker    size given to gzbuffer().  The caller should assure that this limit is not
1266*1c60b9acSAndroid Build Coastguard Worker    exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
1267*1c60b9acSAndroid Build Coastguard Worker    nothing written.  In this case, there may also be a buffer overflow with
1268*1c60b9acSAndroid Build Coastguard Worker    unpredictable consequences, which is possible only if zlib was compiled with
1269*1c60b9acSAndroid Build Coastguard Worker    the insecure functions sprintf() or vsprintf() because the secure snprintf()
1270*1c60b9acSAndroid Build Coastguard Worker    or vsnprintf() functions were not available.  This can be determined using
1271*1c60b9acSAndroid Build Coastguard Worker    zlibCompileFlags().
1272*1c60b9acSAndroid Build Coastguard Worker */
1273*1c60b9acSAndroid Build Coastguard Worker 
1274*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
1275*1c60b9acSAndroid Build Coastguard Worker /*
1276*1c60b9acSAndroid Build Coastguard Worker      Writes the given null-terminated string to the compressed file, excluding
1277*1c60b9acSAndroid Build Coastguard Worker    the terminating null character.
1278*1c60b9acSAndroid Build Coastguard Worker 
1279*1c60b9acSAndroid Build Coastguard Worker      gzputs returns the number of characters written, or -1 in case of error.
1280*1c60b9acSAndroid Build Coastguard Worker */
1281*1c60b9acSAndroid Build Coastguard Worker 
1282*1c60b9acSAndroid Build Coastguard Worker ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
1283*1c60b9acSAndroid Build Coastguard Worker /*
1284*1c60b9acSAndroid Build Coastguard Worker      Reads bytes from the compressed file until len-1 characters are read, or a
1285*1c60b9acSAndroid Build Coastguard Worker    newline character is read and transferred to buf, or an end-of-file
1286*1c60b9acSAndroid Build Coastguard Worker    condition is encountered.  If any characters are read or if len == 1, the
1287*1c60b9acSAndroid Build Coastguard Worker    string is terminated with a null character.  If no characters are read due
1288*1c60b9acSAndroid Build Coastguard Worker    to an end-of-file or len < 1, then the buffer is left untouched.
1289*1c60b9acSAndroid Build Coastguard Worker 
1290*1c60b9acSAndroid Build Coastguard Worker      gzgets returns buf which is a null-terminated string, or it returns NULL
1291*1c60b9acSAndroid Build Coastguard Worker    for end-of-file or in case of error.  If there was an error, the contents at
1292*1c60b9acSAndroid Build Coastguard Worker    buf are indeterminate.
1293*1c60b9acSAndroid Build Coastguard Worker */
1294*1c60b9acSAndroid Build Coastguard Worker 
1295*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
1296*1c60b9acSAndroid Build Coastguard Worker /*
1297*1c60b9acSAndroid Build Coastguard Worker      Writes c, converted to an unsigned char, into the compressed file.  gzputc
1298*1c60b9acSAndroid Build Coastguard Worker    returns the value that was written, or -1 in case of error.
1299*1c60b9acSAndroid Build Coastguard Worker */
1300*1c60b9acSAndroid Build Coastguard Worker 
1301*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
1302*1c60b9acSAndroid Build Coastguard Worker /*
1303*1c60b9acSAndroid Build Coastguard Worker      Reads one byte from the compressed file.  gzgetc returns this byte or -1
1304*1c60b9acSAndroid Build Coastguard Worker    in case of end of file or error.
1305*1c60b9acSAndroid Build Coastguard Worker */
1306*1c60b9acSAndroid Build Coastguard Worker 
1307*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
1308*1c60b9acSAndroid Build Coastguard Worker /*
1309*1c60b9acSAndroid Build Coastguard Worker      Push one character back onto the stream to be read as the first character
1310*1c60b9acSAndroid Build Coastguard Worker    on the next read.  At least one character of push-back is allowed.
1311*1c60b9acSAndroid Build Coastguard Worker    gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
1312*1c60b9acSAndroid Build Coastguard Worker    fail if c is -1, and may fail if a character has been pushed but not read
1313*1c60b9acSAndroid Build Coastguard Worker    yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
1314*1c60b9acSAndroid Build Coastguard Worker    output buffer size of pushed characters is allowed.  (See gzbuffer above.)
1315*1c60b9acSAndroid Build Coastguard Worker    The pushed character will be discarded if the stream is repositioned with
1316*1c60b9acSAndroid Build Coastguard Worker    gzseek() or gzrewind().
1317*1c60b9acSAndroid Build Coastguard Worker */
1318*1c60b9acSAndroid Build Coastguard Worker 
1319*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
1320*1c60b9acSAndroid Build Coastguard Worker /*
1321*1c60b9acSAndroid Build Coastguard Worker      Flushes all pending output into the compressed file.  The parameter flush
1322*1c60b9acSAndroid Build Coastguard Worker    is as in the deflate() function.  The return value is the zlib error number
1323*1c60b9acSAndroid Build Coastguard Worker    (see function gzerror below).  gzflush is only permitted when writing.
1324*1c60b9acSAndroid Build Coastguard Worker 
1325*1c60b9acSAndroid Build Coastguard Worker      If the flush parameter is Z_FINISH, the remaining data is written and the
1326*1c60b9acSAndroid Build Coastguard Worker    gzip stream is completed in the output.  If gzwrite() is called again, a new
1327*1c60b9acSAndroid Build Coastguard Worker    gzip stream will be started in the output.  gzread() is able to read such
1328*1c60b9acSAndroid Build Coastguard Worker    concatented gzip streams.
1329*1c60b9acSAndroid Build Coastguard Worker 
1330*1c60b9acSAndroid Build Coastguard Worker      gzflush should be called only when strictly necessary because it will
1331*1c60b9acSAndroid Build Coastguard Worker    degrade compression if called too often.
1332*1c60b9acSAndroid Build Coastguard Worker */
1333*1c60b9acSAndroid Build Coastguard Worker 
1334*1c60b9acSAndroid Build Coastguard Worker /*
1335*1c60b9acSAndroid Build Coastguard Worker ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
1336*1c60b9acSAndroid Build Coastguard Worker                                    z_off_t offset, int whence));
1337*1c60b9acSAndroid Build Coastguard Worker 
1338*1c60b9acSAndroid Build Coastguard Worker      Sets the starting position for the next gzread or gzwrite on the given
1339*1c60b9acSAndroid Build Coastguard Worker    compressed file.  The offset represents a number of bytes in the
1340*1c60b9acSAndroid Build Coastguard Worker    uncompressed data stream.  The whence parameter is defined as in lseek(2);
1341*1c60b9acSAndroid Build Coastguard Worker    the value SEEK_END is not supported.
1342*1c60b9acSAndroid Build Coastguard Worker 
1343*1c60b9acSAndroid Build Coastguard Worker      If the file is opened for reading, this function is emulated but can be
1344*1c60b9acSAndroid Build Coastguard Worker    extremely slow.  If the file is opened for writing, only forward seeks are
1345*1c60b9acSAndroid Build Coastguard Worker    supported; gzseek then compresses a sequence of zeroes up to the new
1346*1c60b9acSAndroid Build Coastguard Worker    starting position.
1347*1c60b9acSAndroid Build Coastguard Worker 
1348*1c60b9acSAndroid Build Coastguard Worker      gzseek returns the resulting offset location as measured in bytes from
1349*1c60b9acSAndroid Build Coastguard Worker    the beginning of the uncompressed stream, or -1 in case of error, in
1350*1c60b9acSAndroid Build Coastguard Worker    particular if the file is opened for writing and the new starting position
1351*1c60b9acSAndroid Build Coastguard Worker    would be before the current position.
1352*1c60b9acSAndroid Build Coastguard Worker */
1353*1c60b9acSAndroid Build Coastguard Worker 
1354*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
1355*1c60b9acSAndroid Build Coastguard Worker /*
1356*1c60b9acSAndroid Build Coastguard Worker      Rewinds the given file. This function is supported only for reading.
1357*1c60b9acSAndroid Build Coastguard Worker 
1358*1c60b9acSAndroid Build Coastguard Worker      gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
1359*1c60b9acSAndroid Build Coastguard Worker */
1360*1c60b9acSAndroid Build Coastguard Worker 
1361*1c60b9acSAndroid Build Coastguard Worker /*
1362*1c60b9acSAndroid Build Coastguard Worker ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
1363*1c60b9acSAndroid Build Coastguard Worker 
1364*1c60b9acSAndroid Build Coastguard Worker      Returns the starting position for the next gzread or gzwrite on the given
1365*1c60b9acSAndroid Build Coastguard Worker    compressed file.  This position represents a number of bytes in the
1366*1c60b9acSAndroid Build Coastguard Worker    uncompressed data stream, and is zero when starting, even if appending or
1367*1c60b9acSAndroid Build Coastguard Worker    reading a gzip stream from the middle of a file using gzdopen().
1368*1c60b9acSAndroid Build Coastguard Worker 
1369*1c60b9acSAndroid Build Coastguard Worker      gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
1370*1c60b9acSAndroid Build Coastguard Worker */
1371*1c60b9acSAndroid Build Coastguard Worker 
1372*1c60b9acSAndroid Build Coastguard Worker /*
1373*1c60b9acSAndroid Build Coastguard Worker ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
1374*1c60b9acSAndroid Build Coastguard Worker 
1375*1c60b9acSAndroid Build Coastguard Worker      Returns the current offset in the file being read or written.  This offset
1376*1c60b9acSAndroid Build Coastguard Worker    includes the count of bytes that precede the gzip stream, for example when
1377*1c60b9acSAndroid Build Coastguard Worker    appending or when using gzdopen() for reading.  When reading, the offset
1378*1c60b9acSAndroid Build Coastguard Worker    does not include as yet unused buffered input.  This information can be used
1379*1c60b9acSAndroid Build Coastguard Worker    for a progress indicator.  On error, gzoffset() returns -1.
1380*1c60b9acSAndroid Build Coastguard Worker */
1381*1c60b9acSAndroid Build Coastguard Worker 
1382*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzeof OF((gzFile file));
1383*1c60b9acSAndroid Build Coastguard Worker /*
1384*1c60b9acSAndroid Build Coastguard Worker      Returns true (1) if the end-of-file indicator has been set while reading,
1385*1c60b9acSAndroid Build Coastguard Worker    false (0) otherwise.  Note that the end-of-file indicator is set only if the
1386*1c60b9acSAndroid Build Coastguard Worker    read tried to go past the end of the input, but came up short.  Therefore,
1387*1c60b9acSAndroid Build Coastguard Worker    just like feof(), gzeof() may return false even if there is no more data to
1388*1c60b9acSAndroid Build Coastguard Worker    read, in the event that the last read request was for the exact number of
1389*1c60b9acSAndroid Build Coastguard Worker    bytes remaining in the input file.  This will happen if the input file size
1390*1c60b9acSAndroid Build Coastguard Worker    is an exact multiple of the buffer size.
1391*1c60b9acSAndroid Build Coastguard Worker 
1392*1c60b9acSAndroid Build Coastguard Worker      If gzeof() returns true, then the read functions will return no more data,
1393*1c60b9acSAndroid Build Coastguard Worker    unless the end-of-file indicator is reset by gzclearerr() and the input file
1394*1c60b9acSAndroid Build Coastguard Worker    has grown since the previous end of file was detected.
1395*1c60b9acSAndroid Build Coastguard Worker */
1396*1c60b9acSAndroid Build Coastguard Worker 
1397*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
1398*1c60b9acSAndroid Build Coastguard Worker /*
1399*1c60b9acSAndroid Build Coastguard Worker      Returns true (1) if file is being copied directly while reading, or false
1400*1c60b9acSAndroid Build Coastguard Worker    (0) if file is a gzip stream being decompressed.  This state can change from
1401*1c60b9acSAndroid Build Coastguard Worker    false to true while reading the input file if the end of a gzip stream is
1402*1c60b9acSAndroid Build Coastguard Worker    reached, but is followed by data that is not another gzip stream.
1403*1c60b9acSAndroid Build Coastguard Worker 
1404*1c60b9acSAndroid Build Coastguard Worker      If the input file is empty, gzdirect() will return true, since the input
1405*1c60b9acSAndroid Build Coastguard Worker    does not contain a gzip stream.
1406*1c60b9acSAndroid Build Coastguard Worker 
1407*1c60b9acSAndroid Build Coastguard Worker      If gzdirect() is used immediately after gzopen() or gzdopen() it will
1408*1c60b9acSAndroid Build Coastguard Worker    cause buffers to be allocated to allow reading the file to determine if it
1409*1c60b9acSAndroid Build Coastguard Worker    is a gzip file.  Therefore if gzbuffer() is used, it should be called before
1410*1c60b9acSAndroid Build Coastguard Worker    gzdirect().
1411*1c60b9acSAndroid Build Coastguard Worker */
1412*1c60b9acSAndroid Build Coastguard Worker 
1413*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
1414*1c60b9acSAndroid Build Coastguard Worker /*
1415*1c60b9acSAndroid Build Coastguard Worker      Flushes all pending output if necessary, closes the compressed file and
1416*1c60b9acSAndroid Build Coastguard Worker    deallocates the (de)compression state.  Note that once file is closed, you
1417*1c60b9acSAndroid Build Coastguard Worker    cannot call gzerror with file, since its structures have been deallocated.
1418*1c60b9acSAndroid Build Coastguard Worker    gzclose must not be called more than once on the same file, just as free
1419*1c60b9acSAndroid Build Coastguard Worker    must not be called more than once on the same allocation.
1420*1c60b9acSAndroid Build Coastguard Worker 
1421*1c60b9acSAndroid Build Coastguard Worker      gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
1422*1c60b9acSAndroid Build Coastguard Worker    file operation error, or Z_OK on success.
1423*1c60b9acSAndroid Build Coastguard Worker */
1424*1c60b9acSAndroid Build Coastguard Worker 
1425*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
1426*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
1427*1c60b9acSAndroid Build Coastguard Worker /*
1428*1c60b9acSAndroid Build Coastguard Worker      Same as gzclose(), but gzclose_r() is only for use when reading, and
1429*1c60b9acSAndroid Build Coastguard Worker    gzclose_w() is only for use when writing or appending.  The advantage to
1430*1c60b9acSAndroid Build Coastguard Worker    using these instead of gzclose() is that they avoid linking in zlib
1431*1c60b9acSAndroid Build Coastguard Worker    compression or decompression code that is not used when only reading or only
1432*1c60b9acSAndroid Build Coastguard Worker    writing respectively.  If gzclose() is used, then both compression and
1433*1c60b9acSAndroid Build Coastguard Worker    decompression code will be included the application when linking to a static
1434*1c60b9acSAndroid Build Coastguard Worker    zlib library.
1435*1c60b9acSAndroid Build Coastguard Worker */
1436*1c60b9acSAndroid Build Coastguard Worker 
1437*1c60b9acSAndroid Build Coastguard Worker ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
1438*1c60b9acSAndroid Build Coastguard Worker /*
1439*1c60b9acSAndroid Build Coastguard Worker      Returns the error message for the last error which occurred on the given
1440*1c60b9acSAndroid Build Coastguard Worker    compressed file.  errnum is set to zlib error number.  If an error occurred
1441*1c60b9acSAndroid Build Coastguard Worker    in the file system and not in the compression library, errnum is set to
1442*1c60b9acSAndroid Build Coastguard Worker    Z_ERRNO and the application may consult errno to get the exact error code.
1443*1c60b9acSAndroid Build Coastguard Worker 
1444*1c60b9acSAndroid Build Coastguard Worker      The application must not modify the returned string.  Future calls to
1445*1c60b9acSAndroid Build Coastguard Worker    this function may invalidate the previously returned string.  If file is
1446*1c60b9acSAndroid Build Coastguard Worker    closed, then the string previously returned by gzerror will no longer be
1447*1c60b9acSAndroid Build Coastguard Worker    available.
1448*1c60b9acSAndroid Build Coastguard Worker 
1449*1c60b9acSAndroid Build Coastguard Worker      gzerror() should be used to distinguish errors from end-of-file for those
1450*1c60b9acSAndroid Build Coastguard Worker    functions above that do not distinguish those cases in their return values.
1451*1c60b9acSAndroid Build Coastguard Worker */
1452*1c60b9acSAndroid Build Coastguard Worker 
1453*1c60b9acSAndroid Build Coastguard Worker ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
1454*1c60b9acSAndroid Build Coastguard Worker /*
1455*1c60b9acSAndroid Build Coastguard Worker      Clears the error and end-of-file flags for file.  This is analogous to the
1456*1c60b9acSAndroid Build Coastguard Worker    clearerr() function in stdio.  This is useful for continuing to read a gzip
1457*1c60b9acSAndroid Build Coastguard Worker    file that is being written concurrently.
1458*1c60b9acSAndroid Build Coastguard Worker */
1459*1c60b9acSAndroid Build Coastguard Worker 
1460*1c60b9acSAndroid Build Coastguard Worker 
1461*1c60b9acSAndroid Build Coastguard Worker                         /* checksum functions */
1462*1c60b9acSAndroid Build Coastguard Worker 
1463*1c60b9acSAndroid Build Coastguard Worker /*
1464*1c60b9acSAndroid Build Coastguard Worker      These functions are not related to compression but are exported
1465*1c60b9acSAndroid Build Coastguard Worker    anyway because they might be useful in applications using the compression
1466*1c60b9acSAndroid Build Coastguard Worker    library.
1467*1c60b9acSAndroid Build Coastguard Worker */
1468*1c60b9acSAndroid Build Coastguard Worker 
1469*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
1470*1c60b9acSAndroid Build Coastguard Worker /*
1471*1c60b9acSAndroid Build Coastguard Worker      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
1472*1c60b9acSAndroid Build Coastguard Worker    return the updated checksum.  If buf is Z_NULL, this function returns the
1473*1c60b9acSAndroid Build Coastguard Worker    required initial value for the checksum.
1474*1c60b9acSAndroid Build Coastguard Worker 
1475*1c60b9acSAndroid Build Coastguard Worker      An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
1476*1c60b9acSAndroid Build Coastguard Worker    much faster.
1477*1c60b9acSAndroid Build Coastguard Worker 
1478*1c60b9acSAndroid Build Coastguard Worker    Usage example:
1479*1c60b9acSAndroid Build Coastguard Worker 
1480*1c60b9acSAndroid Build Coastguard Worker      uLong adler = adler32(0L, Z_NULL, 0);
1481*1c60b9acSAndroid Build Coastguard Worker 
1482*1c60b9acSAndroid Build Coastguard Worker      while (read_buffer(buffer, length) != EOF) {
1483*1c60b9acSAndroid Build Coastguard Worker        adler = adler32(adler, buffer, length);
1484*1c60b9acSAndroid Build Coastguard Worker      }
1485*1c60b9acSAndroid Build Coastguard Worker      if (adler != original_adler) error();
1486*1c60b9acSAndroid Build Coastguard Worker */
1487*1c60b9acSAndroid Build Coastguard Worker 
1488*1c60b9acSAndroid Build Coastguard Worker /*
1489*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
1490*1c60b9acSAndroid Build Coastguard Worker                                           z_off_t len2));
1491*1c60b9acSAndroid Build Coastguard Worker 
1492*1c60b9acSAndroid Build Coastguard Worker      Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
1493*1c60b9acSAndroid Build Coastguard Worker    and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
1494*1c60b9acSAndroid Build Coastguard Worker    each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
1495*1c60b9acSAndroid Build Coastguard Worker    seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
1496*1c60b9acSAndroid Build Coastguard Worker */
1497*1c60b9acSAndroid Build Coastguard Worker 
1498*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
1499*1c60b9acSAndroid Build Coastguard Worker /*
1500*1c60b9acSAndroid Build Coastguard Worker      Update a running CRC-32 with the bytes buf[0..len-1] and return the
1501*1c60b9acSAndroid Build Coastguard Worker    updated CRC-32.  If buf is Z_NULL, this function returns the required
1502*1c60b9acSAndroid Build Coastguard Worker    initial value for the for the crc.  Pre- and post-conditioning (one's
1503*1c60b9acSAndroid Build Coastguard Worker    complement) is performed within this function so it shouldn't be done by the
1504*1c60b9acSAndroid Build Coastguard Worker    application.
1505*1c60b9acSAndroid Build Coastguard Worker 
1506*1c60b9acSAndroid Build Coastguard Worker    Usage example:
1507*1c60b9acSAndroid Build Coastguard Worker 
1508*1c60b9acSAndroid Build Coastguard Worker      uLong crc = crc32(0L, Z_NULL, 0);
1509*1c60b9acSAndroid Build Coastguard Worker 
1510*1c60b9acSAndroid Build Coastguard Worker      while (read_buffer(buffer, length) != EOF) {
1511*1c60b9acSAndroid Build Coastguard Worker        crc = crc32(crc, buffer, length);
1512*1c60b9acSAndroid Build Coastguard Worker      }
1513*1c60b9acSAndroid Build Coastguard Worker      if (crc != original_crc) error();
1514*1c60b9acSAndroid Build Coastguard Worker */
1515*1c60b9acSAndroid Build Coastguard Worker 
1516*1c60b9acSAndroid Build Coastguard Worker /*
1517*1c60b9acSAndroid Build Coastguard Worker ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
1518*1c60b9acSAndroid Build Coastguard Worker 
1519*1c60b9acSAndroid Build Coastguard Worker      Combine two CRC-32 check values into one.  For two sequences of bytes,
1520*1c60b9acSAndroid Build Coastguard Worker    seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
1521*1c60b9acSAndroid Build Coastguard Worker    calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
1522*1c60b9acSAndroid Build Coastguard Worker    check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
1523*1c60b9acSAndroid Build Coastguard Worker    len2.
1524*1c60b9acSAndroid Build Coastguard Worker */
1525*1c60b9acSAndroid Build Coastguard Worker 
1526*1c60b9acSAndroid Build Coastguard Worker 
1527*1c60b9acSAndroid Build Coastguard Worker                         /* various hacks, don't look :) */
1528*1c60b9acSAndroid Build Coastguard Worker 
1529*1c60b9acSAndroid Build Coastguard Worker /* deflateInit and inflateInit are macros to allow checking the zlib version
1530*1c60b9acSAndroid Build Coastguard Worker  * and the compiler's view of z_stream:
1531*1c60b9acSAndroid Build Coastguard Worker  */
1532*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
1533*1c60b9acSAndroid Build Coastguard Worker                                      const char *version, int stream_size));
1534*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
1535*1c60b9acSAndroid Build Coastguard Worker                                      const char *version, int stream_size));
1536*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
1537*1c60b9acSAndroid Build Coastguard Worker                                       int windowBits, int memLevel,
1538*1c60b9acSAndroid Build Coastguard Worker                                       int strategy, const char *version,
1539*1c60b9acSAndroid Build Coastguard Worker                                       int stream_size));
1540*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
1541*1c60b9acSAndroid Build Coastguard Worker                                       const char *version, int stream_size));
1542*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
1543*1c60b9acSAndroid Build Coastguard Worker                                          unsigned char FAR *window,
1544*1c60b9acSAndroid Build Coastguard Worker                                          const char *version,
1545*1c60b9acSAndroid Build Coastguard Worker                                          int stream_size));
1546*1c60b9acSAndroid Build Coastguard Worker #define deflateInit(strm, level) \
1547*1c60b9acSAndroid Build Coastguard Worker         deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
1548*1c60b9acSAndroid Build Coastguard Worker #define inflateInit(strm) \
1549*1c60b9acSAndroid Build Coastguard Worker         inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
1550*1c60b9acSAndroid Build Coastguard Worker #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
1551*1c60b9acSAndroid Build Coastguard Worker         deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
1552*1c60b9acSAndroid Build Coastguard Worker                       (strategy),           ZLIB_VERSION, sizeof(z_stream))
1553*1c60b9acSAndroid Build Coastguard Worker #define inflateInit2(strm, windowBits) \
1554*1c60b9acSAndroid Build Coastguard Worker         inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
1555*1c60b9acSAndroid Build Coastguard Worker #define inflateBackInit(strm, windowBits, window) \
1556*1c60b9acSAndroid Build Coastguard Worker         inflateBackInit_((strm), (windowBits), (window), \
1557*1c60b9acSAndroid Build Coastguard Worker                                             ZLIB_VERSION, sizeof(z_stream))
1558*1c60b9acSAndroid Build Coastguard Worker 
1559*1c60b9acSAndroid Build Coastguard Worker /* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
1560*1c60b9acSAndroid Build Coastguard Worker  * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
1561*1c60b9acSAndroid Build Coastguard Worker  * both are true, the application gets the *64 functions, and the regular
1562*1c60b9acSAndroid Build Coastguard Worker  * functions are changed to 64 bits) -- in case these are set on systems
1563*1c60b9acSAndroid Build Coastguard Worker  * without large file support, _LFS64_LARGEFILE must also be true
1564*1c60b9acSAndroid Build Coastguard Worker  */
1565*1c60b9acSAndroid Build Coastguard Worker #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
1566*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
1567*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
1568*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
1569*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
1570*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
1571*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
1572*1c60b9acSAndroid Build Coastguard Worker #endif
1573*1c60b9acSAndroid Build Coastguard Worker 
1574*1c60b9acSAndroid Build Coastguard Worker #if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0
1575*1c60b9acSAndroid Build Coastguard Worker #  define gzopen gzopen64
1576*1c60b9acSAndroid Build Coastguard Worker #  define gzseek gzseek64
1577*1c60b9acSAndroid Build Coastguard Worker #  define gztell gztell64
1578*1c60b9acSAndroid Build Coastguard Worker #  define gzoffset gzoffset64
1579*1c60b9acSAndroid Build Coastguard Worker #  define adler32_combine adler32_combine64
1580*1c60b9acSAndroid Build Coastguard Worker #  define crc32_combine crc32_combine64
1581*1c60b9acSAndroid Build Coastguard Worker #  ifdef _LARGEFILE64_SOURCE
1582*1c60b9acSAndroid Build Coastguard Worker      ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
1583*1c60b9acSAndroid Build Coastguard Worker      ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
1584*1c60b9acSAndroid Build Coastguard Worker      ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
1585*1c60b9acSAndroid Build Coastguard Worker      ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
1586*1c60b9acSAndroid Build Coastguard Worker      ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
1587*1c60b9acSAndroid Build Coastguard Worker      ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
1588*1c60b9acSAndroid Build Coastguard Worker #  endif
1589*1c60b9acSAndroid Build Coastguard Worker #else
1590*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
1591*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
1592*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
1593*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
1594*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
1595*1c60b9acSAndroid Build Coastguard Worker    ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
1596*1c60b9acSAndroid Build Coastguard Worker #endif
1597*1c60b9acSAndroid Build Coastguard Worker 
1598*1c60b9acSAndroid Build Coastguard Worker /* hack for buggy compilers */
1599*1c60b9acSAndroid Build Coastguard Worker #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
1600*1c60b9acSAndroid Build Coastguard Worker     struct internal_state {int dummy;};
1601*1c60b9acSAndroid Build Coastguard Worker #endif
1602*1c60b9acSAndroid Build Coastguard Worker 
1603*1c60b9acSAndroid Build Coastguard Worker /* undocumented functions */
1604*1c60b9acSAndroid Build Coastguard Worker ZEXTERN const char   * ZEXPORT zError           OF((int));
1605*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
1606*1c60b9acSAndroid Build Coastguard Worker ZEXTERN const uLongf * ZEXPORT get_crc_table    OF((void));
1607*1c60b9acSAndroid Build Coastguard Worker ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
1608*1c60b9acSAndroid Build Coastguard Worker 
1609*1c60b9acSAndroid Build Coastguard Worker #ifdef __cplusplus
1610*1c60b9acSAndroid Build Coastguard Worker }
1611*1c60b9acSAndroid Build Coastguard Worker #endif
1612*1c60b9acSAndroid Build Coastguard Worker 
1613*1c60b9acSAndroid Build Coastguard Worker #endif /* ZLIB_H */
1614