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