|
|
|
@ -65,7 +65,8 @@ extern "C" { |
|
|
|
|
with "gz". The gzip format is different from the zlib format. gzip is a |
|
|
|
|
gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. |
|
|
|
|
|
|
|
|
|
This library can optionally read and write gzip streams in memory as well. |
|
|
|
|
This library can optionally read and write gzip and raw deflate streams in |
|
|
|
|
memory as well. |
|
|
|
|
|
|
|
|
|
The zlib format was designed to be compact and fast for use in memory |
|
|
|
|
and on communications channels. The gzip format was designed for single- |
|
|
|
@ -74,7 +75,7 @@ extern "C" { |
|
|
|
|
|
|
|
|
|
The library does not install any signal handler. The decoder checks |
|
|
|
|
the consistency of the compressed data, so the library should never crash |
|
|
|
|
even in case of corrupted input. |
|
|
|
|
even in the case of corrupted input. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); |
|
|
|
@ -87,7 +88,7 @@ typedef struct z_stream_s { |
|
|
|
|
uInt avail_in; /* number of bytes available at next_in */ |
|
|
|
|
uLong total_in; /* total number of input bytes read so far */ |
|
|
|
|
|
|
|
|
|
Bytef *next_out; /* next output byte should be put there */ |
|
|
|
|
Bytef *next_out; /* next output byte will go here */ |
|
|
|
|
uInt avail_out; /* remaining free space at next_out */ |
|
|
|
|
uLong total_out; /* total number of bytes output so far */ |
|
|
|
|
|
|
|
|
@ -98,8 +99,9 @@ typedef struct z_stream_s { |
|
|
|
|
free_func zfree; /* used to free the internal state */ |
|
|
|
|
voidpf opaque; /* private data object passed to zalloc and zfree */ |
|
|
|
|
|
|
|
|
|
int data_type; /* best guess about the data type: binary or text */ |
|
|
|
|
uLong adler; /* adler32 value of the uncompressed data */ |
|
|
|
|
int data_type; /* best guess about the data type: binary or text
|
|
|
|
|
for deflate, or the decoding state for inflate */ |
|
|
|
|
uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ |
|
|
|
|
uLong reserved; /* reserved for future use */ |
|
|
|
|
} z_stream; |
|
|
|
|
|
|
|
|
@ -142,7 +144,9 @@ typedef gz_header FAR *gz_headerp; |
|
|
|
|
|
|
|
|
|
zalloc must return Z_NULL if there is not enough memory for the object. |
|
|
|
|
If zlib is used in a multi-threaded application, zalloc and zfree must be |
|
|
|
|
thread safe. |
|
|
|
|
thread safe. In that case, zlib is thread-safe. When zalloc and zfree are |
|
|
|
|
Z_NULL on entry to the initialization function, they are set to internal |
|
|
|
|
routines that use the standard library functions malloc() and free(). |
|
|
|
|
|
|
|
|
|
On 16-bit systems, the functions zalloc and zfree must be able to allocate |
|
|
|
|
exactly 65536 bytes, but will not be required to allocate more than this if |
|
|
|
@ -155,7 +159,7 @@ typedef gz_header FAR *gz_headerp; |
|
|
|
|
|
|
|
|
|
The fields total_in and total_out can be used for statistics or progress |
|
|
|
|
reports. After compression, total_in holds the total size of the |
|
|
|
|
uncompressed data and may be saved for use in the decompressor (particularly |
|
|
|
|
uncompressed data and may be saved for use by the decompressor (particularly |
|
|
|
|
if the decompressor wants to decompress everything in a single step). |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
@ -200,7 +204,7 @@ typedef gz_header FAR *gz_headerp; |
|
|
|
|
#define Z_TEXT 1 |
|
|
|
|
#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ |
|
|
|
|
#define Z_UNKNOWN 2 |
|
|
|
|
/* Possible values of the data_type field (though see inflate()) */ |
|
|
|
|
/* Possible values of the data_type field for deflate() */ |
|
|
|
|
|
|
|
|
|
#define Z_DEFLATED 8 |
|
|
|
|
/* The deflate compression method (the only one supported in this version) */ |
|
|
|
@ -258,11 +262,11 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); |
|
|
|
|
enough room in the output buffer), next_in and avail_in are updated and |
|
|
|
|
processing will resume at this point for the next call of deflate(). |
|
|
|
|
|
|
|
|
|
- Provide more output starting at next_out and update next_out and avail_out |
|
|
|
|
- Generate more output starting at next_out and update next_out and avail_out |
|
|
|
|
accordingly. This action is forced if the parameter flush is non zero. |
|
|
|
|
Forcing flush frequently degrades the compression ratio, so this parameter |
|
|
|
|
should be set only when necessary (in interactive applications). Some |
|
|
|
|
output may be provided even if flush is not set. |
|
|
|
|
should be set only when necessary. Some output may be provided even if |
|
|
|
|
flush is zero. |
|
|
|
|
|
|
|
|
|
Before the call of deflate(), the application should ensure that at least |
|
|
|
|
one of the actions is possible, by providing more input and/or consuming more |
|
|
|
@ -271,7 +275,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); |
|
|
|
|
output when it wants, for example when the output buffer is full (avail_out |
|
|
|
|
== 0), or after each call of deflate(). If deflate returns Z_OK and with |
|
|
|
|
zero avail_out, it must be called again after making room in the output |
|
|
|
|
buffer because there might be more output pending. |
|
|
|
|
buffer because there might be more output pending. See deflatePending(), |
|
|
|
|
which can be used if desired to determine whether or not there is more ouput |
|
|
|
|
in that case. |
|
|
|
|
|
|
|
|
|
Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to |
|
|
|
|
decide how much data to accumulate before producing output, in order to |
|
|
|
@ -292,8 +298,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); |
|
|
|
|
input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. |
|
|
|
|
This completes the current deflate block and follows it with an empty fixed |
|
|
|
|
codes block that is 10 bits long. This assures that enough bytes are output |
|
|
|
|
in order for the decompressor to finish the block before the empty fixed code |
|
|
|
|
block. |
|
|
|
|
in order for the decompressor to finish the block before the empty fixed |
|
|
|
|
codes block. |
|
|
|
|
|
|
|
|
|
If flush is set to Z_BLOCK, a deflate block is completed and emitted, as |
|
|
|
|
for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to |
|
|
|
@ -319,34 +325,38 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); |
|
|
|
|
|
|
|
|
|
If the parameter flush is set to Z_FINISH, pending input is processed, |
|
|
|
|
pending output is flushed and deflate returns with Z_STREAM_END if there was |
|
|
|
|
enough output space; if deflate returns with Z_OK, this function must be |
|
|
|
|
called again with Z_FINISH and more output space (updated avail_out) but no |
|
|
|
|
more input data, until it returns with Z_STREAM_END or an error. After |
|
|
|
|
deflate has returned Z_STREAM_END, the only possible operations on the stream |
|
|
|
|
are deflateReset or deflateEnd. |
|
|
|
|
|
|
|
|
|
Z_FINISH can be used immediately after deflateInit if all the compression |
|
|
|
|
is to be done in a single step. In this case, avail_out must be at least the |
|
|
|
|
value returned by deflateBound (see below). Then deflate is guaranteed to |
|
|
|
|
return Z_STREAM_END. If not enough output space is provided, deflate will |
|
|
|
|
not return Z_STREAM_END, and it must be called again as described above. |
|
|
|
|
|
|
|
|
|
deflate() sets strm->adler to the adler32 checksum of all input read |
|
|
|
|
so far (that is, total_in bytes). |
|
|
|
|
enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this |
|
|
|
|
function must be called again with Z_FINISH and more output space (updated |
|
|
|
|
avail_out) but no more input data, until it returns with Z_STREAM_END or an |
|
|
|
|
error. After deflate has returned Z_STREAM_END, the only possible operations |
|
|
|
|
on the stream are deflateReset or deflateEnd. |
|
|
|
|
|
|
|
|
|
Z_FINISH can be used in the first deflate call after deflateInit if all the |
|
|
|
|
compression is to be done in a single step. In order to complete in one |
|
|
|
|
call, avail_out must be at least the value returned by deflateBound (see |
|
|
|
|
below). Then deflate is guaranteed to return Z_STREAM_END. If not enough |
|
|
|
|
output space is provided, deflate will not return Z_STREAM_END, and it must |
|
|
|
|
be called again as described above. |
|
|
|
|
|
|
|
|
|
deflate() sets strm->adler to the Adler-32 checksum of all input read |
|
|
|
|
so far (that is, total_in bytes). If a gzip stream is being generated, then |
|
|
|
|
strm->adler will be the CRC-32 checksum of the input read so far. (See |
|
|
|
|
deflateInit2 below.) |
|
|
|
|
|
|
|
|
|
deflate() may update strm->data_type if it can make a good guess about |
|
|
|
|
the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered |
|
|
|
|
binary. This field is only for information purposes and does not affect the |
|
|
|
|
compression algorithm in any manner. |
|
|
|
|
the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is |
|
|
|
|
considered binary. This field is only for information purposes and does not |
|
|
|
|
affect the compression algorithm in any manner. |
|
|
|
|
|
|
|
|
|
deflate() returns Z_OK if some progress has been made (more input |
|
|
|
|
processed or more output produced), Z_STREAM_END if all input has been |
|
|
|
|
consumed and all output has been produced (only when flush is set to |
|
|
|
|
Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example |
|
|
|
|
if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible |
|
|
|
|
(for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not |
|
|
|
|
fatal, and deflate() can be called again with more input and more output |
|
|
|
|
space to continue compressing. |
|
|
|
|
if next_in or next_out was Z_NULL or the state was inadvertently written over |
|
|
|
|
by the application), or Z_BUF_ERROR if no progress is possible (for example |
|
|
|
|
avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and |
|
|
|
|
deflate() can be called again with more input and more output space to |
|
|
|
|
continue compressing. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -369,23 +379,20 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); |
|
|
|
|
|
|
|
|
|
Initializes the internal stream state for decompression. The fields |
|
|
|
|
next_in, avail_in, zalloc, zfree and opaque must be initialized before by |
|
|
|
|
the caller. If next_in is not Z_NULL and avail_in is large enough (the |
|
|
|
|
exact value depends on the compression method), inflateInit determines the |
|
|
|
|
compression method from the zlib header and allocates all data structures |
|
|
|
|
accordingly; otherwise the allocation will be deferred to the first call of |
|
|
|
|
inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to |
|
|
|
|
use default allocation functions. |
|
|
|
|
the caller. In the current version of inflate, the provide input is not |
|
|
|
|
read or consumed. Any memory allocation will be deferred to the first call |
|
|
|
|
of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them |
|
|
|
|
to use default allocation functions. |
|
|
|
|
|
|
|
|
|
inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough |
|
|
|
|
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the |
|
|
|
|
version assumed by the caller, or Z_STREAM_ERROR if the parameters are |
|
|
|
|
invalid, such as a null pointer to the structure. msg is set to null if |
|
|
|
|
there is no error message. inflateInit does not perform any decompression |
|
|
|
|
apart from possibly reading the zlib header if present: actual decompression |
|
|
|
|
will be done by inflate(). (So next_in and avail_in may be modified, but |
|
|
|
|
next_out and avail_out are unused and unchanged.) The current implementation |
|
|
|
|
of inflateInit() does not process any header information -- that is deferred |
|
|
|
|
until inflate() is called. |
|
|
|
|
there is no error message. inflateInit does not perform any decompression. |
|
|
|
|
Actual decompression will be done by inflate(). So next_in, and avail_in, |
|
|
|
|
next_out, and avail_out are unused and unchanged. The current |
|
|
|
|
implementation of inflateInit() does not process any header information -- |
|
|
|
|
that is deferred until inflate() is called. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -401,17 +408,20 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); |
|
|
|
|
|
|
|
|
|
- Decompress more input starting at next_in and update next_in and avail_in |
|
|
|
|
accordingly. If not all input can be processed (because there is not |
|
|
|
|
enough room in the output buffer), next_in is updated and processing will |
|
|
|
|
resume at this point for the next call of inflate(). |
|
|
|
|
enough room in the output buffer), then next_in and avail_on are updated |
|
|
|
|
accordingly, and processing will resume at this point for the next call of |
|
|
|
|
inflate(). |
|
|
|
|
|
|
|
|
|
- Provide more output starting at next_out and update next_out and avail_out |
|
|
|
|
- Generate more output starting at next_out and update next_out and avail_out |
|
|
|
|
accordingly. inflate() provides as much output as possible, until there is |
|
|
|
|
no more input data or no more space in the output buffer (see below about |
|
|
|
|
the flush parameter). |
|
|
|
|
|
|
|
|
|
Before the call of inflate(), the application should ensure that at least |
|
|
|
|
one of the actions is possible, by providing more input and/or consuming more |
|
|
|
|
output, and updating the next_* and avail_* values accordingly. The |
|
|
|
|
output, and updating the next_* and avail_* values accordingly. If the |
|
|
|
|
caller of inflate() does not provide both available input and available |
|
|
|
|
output space, it is possible that there will be no progress made. The |
|
|
|
|
application can consume the uncompressed output when it wants, for example |
|
|
|
|
when the output buffer is full (avail_out == 0), or after each call of |
|
|
|
|
inflate(). If inflate returns Z_OK and with zero avail_out, it must be |
|
|
|
@ -428,7 +438,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); |
|
|
|
|
gets to the end of that block, or when it runs out of data. |
|
|
|
|
|
|
|
|
|
The Z_BLOCK option assists in appending to or combining deflate streams. |
|
|
|
|
Also to assist in this, on return inflate() will set strm->data_type to the |
|
|
|
|
To assist in this, on return inflate() always sets strm->data_type to the |
|
|
|
|
number of unused bits in the last byte taken from strm->next_in, plus 64 if |
|
|
|
|
inflate() is currently decoding the last block in the deflate stream, plus |
|
|
|
|
128 if inflate() returned immediately after decoding an end-of-block code or |
|
|
|
@ -454,7 +464,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); |
|
|
|
|
this case all pending input is processed and all pending output is flushed; |
|
|
|
|
avail_out must be large enough to hold all of the uncompressed data for the |
|
|
|
|
operation to complete. (The size of the uncompressed data may have been |
|
|
|
|
saved by the compressor for this purpose.) The use of Z_FINISH is not |
|
|
|
|
saved by the compressor for this purpose.) The use of Z_FINISH is not |
|
|
|
|
required to perform an inflation in one step. However it may be used to |
|
|
|
|
inform inflate that a faster approach can be used for the single inflate() |
|
|
|
|
call. Z_FINISH also informs inflate to not maintain a sliding window if the |
|
|
|
@ -476,32 +486,33 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); |
|
|
|
|
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets |
|
|
|
|
strm->adler to the Adler-32 checksum of all output produced so far (that is, |
|
|
|
|
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described |
|
|
|
|
below. At the end of the stream, inflate() checks that its computed adler32 |
|
|
|
|
below. At the end of the stream, inflate() checks that its computed Adler-32 |
|
|
|
|
checksum is equal to that saved by the compressor and returns Z_STREAM_END |
|
|
|
|
only if the checksum is correct. |
|
|
|
|
|
|
|
|
|
inflate() can decompress and check either zlib-wrapped or gzip-wrapped |
|
|
|
|
deflate data. The header type is detected automatically, if requested when |
|
|
|
|
initializing with inflateInit2(). Any information contained in the gzip |
|
|
|
|
header is not retained, so applications that need that information should |
|
|
|
|
instead use raw inflate, see inflateInit2() below, or inflateBack() and |
|
|
|
|
perform their own processing of the gzip header and trailer. When processing |
|
|
|
|
header is not retained unless inflateGetHeader() is used. When processing |
|
|
|
|
gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output |
|
|
|
|
produced so far. The CRC-32 is checked against the gzip trailer. |
|
|
|
|
produced so far. The CRC-32 is checked against the gzip trailer, as is the |
|
|
|
|
uncompressed length, modulo 2^32. |
|
|
|
|
|
|
|
|
|
inflate() returns Z_OK if some progress has been made (more input processed |
|
|
|
|
or more output produced), Z_STREAM_END if the end of the compressed data has |
|
|
|
|
been reached and all uncompressed output has been produced, Z_NEED_DICT if a |
|
|
|
|
preset dictionary is needed at this point, Z_DATA_ERROR if the input data was |
|
|
|
|
corrupted (input stream not conforming to the zlib format or incorrect check |
|
|
|
|
value), Z_STREAM_ERROR if the stream structure was inconsistent (for example |
|
|
|
|
next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, |
|
|
|
|
Z_BUF_ERROR if no progress is possible or if there was not enough room in the |
|
|
|
|
output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and |
|
|
|
|
value, in which case strm->msg points to a string with a more specific |
|
|
|
|
error), Z_STREAM_ERROR if the stream structure was inconsistent (for example |
|
|
|
|
next_in or next_out was Z_NULL, or the state was inadvertently written over |
|
|
|
|
by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR |
|
|
|
|
if no progress was possible or if there was not enough room in the output |
|
|
|
|
buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and |
|
|
|
|
inflate() can be called again with more input and more output space to |
|
|
|
|
continue decompressing. If Z_DATA_ERROR is returned, the application may |
|
|
|
|
then call inflateSync() to look for a good compression block if a partial |
|
|
|
|
recovery of the data is desired. |
|
|
|
|
recovery of the data is to be attempted. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -511,9 +522,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); |
|
|
|
|
This function discards any unprocessed input and does not flush any pending |
|
|
|
|
output. |
|
|
|
|
|
|
|
|
|
inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state |
|
|
|
|
was inconsistent. In the error case, msg may be set but then points to a |
|
|
|
|
static string (which must not be deallocated). |
|
|
|
|
inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state |
|
|
|
|
was inconsistent. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -554,14 +564,15 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, |
|
|
|
|
|
|
|
|
|
windowBits can also be -8..-15 for raw deflate. In this case, -windowBits |
|
|
|
|
determines the window size. deflate() will then generate raw deflate data |
|
|
|
|
with no zlib header or trailer, and will not compute an adler32 check value. |
|
|
|
|
with no zlib header or trailer, and will not compute a check value. |
|
|
|
|
|
|
|
|
|
windowBits can also be greater than 15 for optional gzip encoding. Add |
|
|
|
|
16 to windowBits to write a simple gzip header and trailer around the |
|
|
|
|
compressed data instead of a zlib wrapper. The gzip header will have no |
|
|
|
|
file name, no extra data, no comment, no modification time (set to zero), no |
|
|
|
|
header crc, and the operating system will be set to 255 (unknown). If a |
|
|
|
|
gzip stream is being written, strm->adler is a crc32 instead of an adler32. |
|
|
|
|
header crc, and the operating system will be set to the appropriate value, |
|
|
|
|
if the operating system was determined at compile time. If a gzip stream is |
|
|
|
|
being written, strm->adler is a CRC-32 instead of an Adler-32. |
|
|
|
|
|
|
|
|
|
For raw deflate or gzip encoding, a request for a 256-byte window is |
|
|
|
|
rejected as invalid, since only the zlib header provides a means of |
|
|
|
@ -626,12 +637,12 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, |
|
|
|
|
addition, the current implementation of deflate will use at most the window |
|
|
|
|
size minus 262 bytes of the provided dictionary. |
|
|
|
|
|
|
|
|
|
Upon return of this function, strm->adler is set to the adler32 value |
|
|
|
|
Upon return of this function, strm->adler is set to the Adler-32 value |
|
|
|
|
of the dictionary; the decompressor may later use this value to determine |
|
|
|
|
which dictionary has been used by the compressor. (The adler32 value |
|
|
|
|
which dictionary has been used by the compressor. (The Adler-32 value |
|
|
|
|
applies to the whole dictionary even if only a subset of the dictionary is |
|
|
|
|
actually used by the compressor.) If a raw deflate was requested, then the |
|
|
|
|
adler32 value is not computed and strm->adler is not set. |
|
|
|
|
Adler-32 value is not computed and strm->adler is not set. |
|
|
|
|
|
|
|
|
|
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a |
|
|
|
|
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is |
|
|
|
@ -819,7 +830,7 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, |
|
|
|
|
is for use with other formats that use the deflate compressed data format |
|
|
|
|
such as zip. Those formats provide their own check values. If a custom |
|
|
|
|
format is developed using the raw deflate format for compressed data, it is |
|
|
|
|
recommended that a check value such as an adler32 or a crc32 be applied to |
|
|
|
|
recommended that a check value such as an Adler-32 or a CRC-32 be applied to |
|
|
|
|
the uncompressed data as is done in the zlib, gzip, and zip formats. For |
|
|
|
|
most applications, the zlib format should be used as is. Note that comments |
|
|
|
|
above on the use in deflateInit2() applies to the magnitude of windowBits. |
|
|
|
@ -828,7 +839,10 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, |
|
|
|
|
32 to windowBits to enable zlib and gzip decoding with automatic header |
|
|
|
|
detection, or add 16 to decode only the gzip format (the zlib format will |
|
|
|
|
return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a |
|
|
|
|
crc32 instead of an adler32. |
|
|
|
|
CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see |
|
|
|
|
below), inflate() will not automatically decode concatenated gzip streams. |
|
|
|
|
inflate() will return Z_STREAM_END at the end of the gzip stream. The state |
|
|
|
|
would need to be reset to continue decoding a subsequent gzip stream. |
|
|
|
|
|
|
|
|
|
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough |
|
|
|
|
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the |
|
|
|
@ -849,7 +863,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, |
|
|
|
|
Initializes the decompression dictionary from the given uncompressed byte |
|
|
|
|
sequence. This function must be called immediately after a call of inflate, |
|
|
|
|
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor |
|
|
|
|
can be determined from the adler32 value returned by that call of inflate. |
|
|
|
|
can be determined from the Adler-32 value returned by that call of inflate. |
|
|
|
|
The compressor and decompressor must use exactly the same dictionary (see |
|
|
|
|
deflateSetDictionary). For raw inflate, this function can be called at any |
|
|
|
|
time to set the dictionary. If the provided dictionary is smaller than the |
|
|
|
@ -860,7 +874,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, |
|
|
|
|
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a |
|
|
|
|
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is |
|
|
|
|
inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the |
|
|
|
|
expected one (incorrect adler32 value). inflateSetDictionary does not |
|
|
|
|
expected one (incorrect Adler-32 value). inflateSetDictionary does not |
|
|
|
|
perform any decompression: this will be done by subsequent calls of |
|
|
|
|
inflate(). |
|
|
|
|
*/ |
|
|
|
@ -918,7 +932,7 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, |
|
|
|
|
ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); |
|
|
|
|
/*
|
|
|
|
|
This function is equivalent to inflateEnd followed by inflateInit, |
|
|
|
|
but does not free and reallocate all the internal decompression state. The |
|
|
|
|
but does not free and reallocate the internal decompression state. The |
|
|
|
|
stream will keep attributes that may have been set by inflateInit2. |
|
|
|
|
|
|
|
|
|
inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source |
|
|
|
@ -930,7 +944,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, |
|
|
|
|
/*
|
|
|
|
|
This function is the same as inflateReset, but it also permits changing |
|
|
|
|
the wrap and window size requests. The windowBits parameter is interpreted |
|
|
|
|
the same as it is for inflateInit2. |
|
|
|
|
the same as it is for inflateInit2. If the window size is changed, then the |
|
|
|
|
memory allocated for the window is freed, and the window will be reallocated |
|
|
|
|
by inflate() if needed. |
|
|
|
|
|
|
|
|
|
inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source |
|
|
|
|
stream state was inconsistent (such as zalloc or state being Z_NULL), or if |
|
|
|
@ -982,7 +998,7 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); |
|
|
|
|
location in the input stream can be determined from avail_in and data_type |
|
|
|
|
as noted in the description for the Z_BLOCK flush parameter for inflate. |
|
|
|
|
|
|
|
|
|
inflateMark returns the value noted above or -65536 if the provided |
|
|
|
|
inflateMark returns the value noted above, or -65536 if the provided |
|
|
|
|
source stream state was inconsistent. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
@ -1074,9 +1090,9 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, |
|
|
|
|
This routine would normally be used in a utility that reads zip or gzip |
|
|
|
|
files and writes out uncompressed files. The utility would decode the |
|
|
|
|
header and process the trailer on its own, hence this routine expects only |
|
|
|
|
the raw deflate stream to decompress. This is different from the normal |
|
|
|
|
behavior of inflate(), which expects either a zlib or gzip header and |
|
|
|
|
trailer around the deflate stream. |
|
|
|
|
the raw deflate stream to decompress. This is different from the default |
|
|
|
|
behavior of inflate(), which expects a zlib header and trailer around the |
|
|
|
|
deflate stream. |
|
|
|
|
|
|
|
|
|
inflateBack() uses two subroutines supplied by the caller that are then |
|
|
|
|
called by inflateBack() for input and output. inflateBack() calls those |
|
|
|
@ -1085,12 +1101,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, |
|
|
|
|
parameters and return types are defined above in the in_func and out_func |
|
|
|
|
typedefs. inflateBack() will call in(in_desc, &buf) which should return the |
|
|
|
|
number of bytes of provided input, and a pointer to that input in buf. If |
|
|
|
|
there is no input available, in() must return zero--buf is ignored in that |
|
|
|
|
case--and inflateBack() will return a buffer error. inflateBack() will call |
|
|
|
|
out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() |
|
|
|
|
should return zero on success, or non-zero on failure. If out() returns |
|
|
|
|
non-zero, inflateBack() will return with an error. Neither in() nor out() |
|
|
|
|
are permitted to change the contents of the window provided to |
|
|
|
|
there is no input available, in() must return zero -- buf is ignored in that |
|
|
|
|
case -- and inflateBack() will return a buffer error. inflateBack() will |
|
|
|
|
call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. |
|
|
|
|
out() should return zero on success, or non-zero on failure. If out() |
|
|
|
|
returns non-zero, inflateBack() will return with an error. Neither in() nor |
|
|
|
|
out() are permitted to change the contents of the window provided to |
|
|
|
|
inflateBackInit(), which is also the buffer that out() uses to write from. |
|
|
|
|
The length written by out() will be at most the window size. Any non-zero |
|
|
|
|
amount of input may be provided by in(). |
|
|
|
@ -1118,7 +1134,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, |
|
|
|
|
using strm->next_in which will be Z_NULL only if in() returned an error. If |
|
|
|
|
strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning |
|
|
|
|
non-zero. (in() will always be called before out(), so strm->next_in is |
|
|
|
|
assured to be defined if out() returns non-zero.) Note that inflateBack() |
|
|
|
|
assured to be defined if out() returns non-zero.) Note that inflateBack() |
|
|
|
|
cannot return Z_OK. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
@ -1598,7 +1614,7 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); |
|
|
|
|
return the updated checksum. If buf is Z_NULL, this function returns the |
|
|
|
|
required initial value for the checksum. |
|
|
|
|
|
|
|
|
|
An Adler-32 checksum is almost as reliable as a CRC32 but can be computed |
|
|
|
|
An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed |
|
|
|
|
much faster. |
|
|
|
|
|
|
|
|
|
Usage example: |
|
|
|
|