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