From 56bcb184fac036a45cb8937238d51778d0a796aa Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Fri, 9 Sep 2011 23:11:37 -0700 Subject: zlib 0.99 --- zlib.h | 259 +++++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 198 insertions(+), 61 deletions(-) (limited to 'zlib.h') diff --git a/zlib.h b/zlib.h index 73185ec..7fc868b 100644 --- a/zlib.h +++ b/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 0.95, Aug 16th, 1995. + version 1.0, Jan 27th, 1996. - Copyright (C) 1995 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-1996 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,9 +26,13 @@ #ifndef _ZLIB_H #define _ZLIB_H +#ifdef __cplusplus +extern "C" { +#endif + #include "zconf.h" -#define ZLIB_VERSION "0.95" +#define ZLIB_VERSION "1.0" /* The 'zlib' compression library provides in-memory compression and @@ -47,6 +51,11 @@ repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. + + The library does not install any signal handler. It is recommended to + add at least a handler for SIGSEGV when decompressing; the library checks + the consistency of the input data whenever possible but may go nuts + for some forms of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); @@ -68,10 +77,11 @@ typedef struct z_stream_s { alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ - voidp opaque; /* private data object passed to zalloc and zfree */ - - Byte data_type; /* best guess about the data type: ascii or binary */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + int data_type; /* best guess about the data type: ascii or binary */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ } z_stream; /* @@ -107,20 +117,25 @@ typedef struct z_stream_s { #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 -#define Z_FULL_FLUSH 2 -#define Z_SYNC_FLUSH 3 /* experimental: partial_flush + byte align */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 #define Z_FINISH 4 -/* See deflate() below for the usage of these constants */ +/* Allowed flush values; see deflate() below for details */ #define Z_OK 0 #define Z_STREAM_END 1 +#define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) -/* error codes for the compression/decompression functions */ +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ +#define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) @@ -129,15 +144,19 @@ typedef struct z_stream_s { #define Z_FILTERED 1 #define Z_HUFFMAN_ONLY 2 #define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ #define Z_BINARY 0 #define Z_ASCII 1 #define Z_UNKNOWN 2 -/* Used to set the data_type field */ +/* Possible values of the data_type field */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ -extern char *zlib_version; +extern const char *zlib_version; /* The application can compare zlib_version and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. @@ -145,20 +164,24 @@ extern char *zlib_version; /* basic functions */ -extern int deflateInit OF((z_stream *strm, int level)); /* +extern int deflateInit OF((z_stream *strm, int level)); + Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default allocation functions. - The compression level must be Z_DEFAULT_COMPRESSION, or between 1 and 9: - 1 gives best speed, 9 gives best compression. Z_DEFAULT_COMPRESSION requests - a default compromise between speed and compression (currently equivalent - to level 6). + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level. + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null if there is no error message. deflateInit does not perform any compression: this will be done by deflate(). */ @@ -190,7 +213,12 @@ extern int deflate OF((z_stream *strm, int flush)); block is terminated and flushed to the output buffer so that the decompressor can get all input data available so far. For method 9, a future variant on method 8, the current block will be flushed but not terminated. - If flush is set to Z_FULL_FLUSH, the compression block is terminated, a + Z_SYNC_FLUSH has the same effect as partial flush except that the compressed + output is byte aligned (the compressor can clear its internal bit buffer) + and the current block is always terminated; this can be useful if the + compressor has to be restarted from scratch after an interruption (in which + case the internal state of the compressor may be lost). + If flush is set to Z_FULL_FLUSH, the compression block is terminated, a special marker is output and the compression dictionary is discarded; this is useful to allow the decompressor to synchronize if one compressed block has been damaged (see inflateSync below). Flushing degrades compression and @@ -233,22 +261,26 @@ extern int deflateEnd OF((z_stream *strm)); pending output. deflateEnd 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). + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). */ -extern int inflateInit OF((z_stream *strm)); /* +extern int inflateInit OF((z_stream *strm)); + Initializes the internal stream state for decompression. The fields - zalloc and zfree must be initialized before by the caller. If zalloc and - zfree are set to Z_NULL, inflateInit updates them to use default allocation - functions. + zalloc, zfree and opaque must be initialized before by the caller. 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. msg is set to null if there is no error message. - inflateInit does not perform any decompression: this will be done by - inflate(). + enough memory, Z_VERSION_ERROR if the zlib library version is incompatible + with the version assumed by the caller. msg is set to null if there is no + error message. inflateInit does not perform any decompression: this will be + done by inflate(). */ @@ -292,12 +324,15 @@ extern int inflate OF((z_stream *strm, int flush)); 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_DATA_ERROR if the input data was corrupted, Z_STREAM_ERROR if - the stream structure was inconsistent (for example if next_in or next_out - was 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. In the Z_DATA_ERROR case, the application may then - call inflateSync to look for a good compression block. + produced, Z_NEED_DICT if a preset dictionary is needed at this point (see + inflateSetDictionary below), Z_DATA_ERROR if the input data was corrupted, + Z_STREAM_ERROR if the stream structure was inconsistent (for example if + next_in or next_out was 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. In the Z_DATA_ERROR case, the + application may then call inflateSync to look for a good compression block. + In the Z_NEED_DICT case, strm->adler is set to the Adler32 value of the + dictionary chosen by the compressor. */ @@ -312,24 +347,26 @@ extern int inflateEnd OF((z_stream *strm)); static string (which must not be deallocated). */ - /* advanced functions */ + /* Advanced functions */ /* The following functions are needed only in some special applications. */ +/* extern int deflateInit2 OF((z_stream *strm, int level, int method, int windowBits, int memLevel, int strategy)); -/* + This is another version of deflateInit with more compression options. The - fields next_in, zalloc and zfree must be initialized before by the caller. + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. - The method parameter is the compression method. It must be 8 in this - version of the library. (Method 9 will allow a 64K history buffer and + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. (Method 9 will allow a 64K history buffer and partial block flushes.) The windowBits parameter is the base two logarithm of the window size @@ -338,20 +375,22 @@ extern int deflateInit2 OF((z_stream *strm, values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. - The memLevel parameter specifies how much memory should be allocated + The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel. - The strategy parameter is used to tune the compression algorithm. Use - the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data - produced by a filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman - encoding only (no string match). Filtered data consists mostly of small - values with a somewhat random distribution. In this case, the - compression algorithm is tuned to compress them better. The strategy - parameter only affects the compression ratio but not the correctness of - the compressed output even if it is not set appropriately. + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match). Filtered data consists mostly of small values with a + somewhat random distribution. In this case, the compression algorithm is + tuned to compress them better. The effect of Z_FILTERED is to force more + Huffman coding and less string matching; it is somewhat intermediate + between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects + the compression ratio but not the correctness of the compressed output even + if it is not set appropriately. If next_in is not null, the library will use this buffer to hold also some history information; the buffer must either hold the entire input @@ -370,9 +409,38 @@ extern int deflateInit2 OF((z_stream *strm, not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid method). msg is set to null if there is no error message. deflateInit2 does not perform any compression: this will be done by - deflate(). + deflate(). */ +extern int deflateSetDictionary OF((z_stream *strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary (history buffer) from the given + byte sequence without producing any compressed output. This function must + be called immediately after deflateInit or deflateInit2, before any call + of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and + can be predicted with good accuracy; the data can then be compressed better + than with the default empty dictionary. In this version of the library, + only the last 32K bytes of the dictionary are used. + Upon return of this function, strm->adler is set to the Adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state + is inconsistent (for example if deflate has already been called for this + stream). deflateSetDictionary does not perform any compression: this will + be done by deflate(). +*/ + extern int deflateCopy OF((z_stream *dest, z_stream *source)); /* @@ -383,14 +451,14 @@ extern int deflateCopy OF((z_stream *dest, application to provide the correct values of next_out and avail_out for the next call of deflate. - This function is useful when several compression strategies will be + This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal compression state which can be quite large, so this strategy is slow and can consume lots of memory. - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. @@ -407,11 +475,26 @@ extern int deflateReset OF((z_stream *strm)); stream state was inconsistent (such as zalloc or state being NULL). */ +extern int deflateParams OF((z_stream *strm, int level, int strategy)); +/* + Dynamically update the compression level and compression strategy. + This can be used to switch between compression and straight copy of + the input data, or to switch to a different kind of input data requiring + a different strategy. If the compression level is changed, the input + available so far is compressed with the old level (and may be flushed); + the new level will take effect only at the next call of deflate(). + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid. +*/ + +/* extern int inflateInit2 OF((z_stream *strm, int windowBits)); -/* + This is another version of inflateInit with more compression options. The - fields next_out, zalloc and zfree must be initialized before by the caller. + fields next_out, zalloc, zfree and opaque must be initialized before by + the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for @@ -440,6 +523,25 @@ extern int inflateInit2 OF((z_stream *strm, inflate(). */ +extern int inflateSetDictionary OF((z_stream *strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary (history buffer) from the given + uncompressed byte sequence. This function must be called immediately after + a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen + by the compressor can be determined from the Adler32 value returned by this + call of inflate. The compressor and decompressor must use exactly the same + dictionary (see deflateSetDictionary). + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) 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 + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + extern int inflateSync OF((z_stream *strm)); /* Skips invalid compressed data until the special marker (see deflate() @@ -477,7 +579,7 @@ extern int inflateReset OF((z_stream *strm)); */ extern int compress OF((Bytef *dest, uLongf *destLen, - Bytef *source, uLong sourceLen)); + const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total @@ -492,7 +594,7 @@ extern int compress OF((Bytef *dest, uLongf *destLen, */ extern int uncompress OF((Bytef *dest, uLongf *destLen, - Bytef *source, uLong sourceLen)); + const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total @@ -512,7 +614,7 @@ extern int uncompress OF((Bytef *dest, uLongf *destLen, typedef voidp gzFile; -extern gzFile gzopen OF((char *path, char *mode)); +extern gzFile gzopen OF((const char *path, const char *mode)); /* Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level @@ -524,11 +626,15 @@ extern gzFile gzopen OF((char *path, char *mode)); zlib error is Z_MEM_ERROR). */ -extern gzFile gzdopen OF((int fd, char *mode)); +extern gzFile gzdopen OF((int fd, const char *mode)); /* gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, or pipe. + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). The mode parameter is as in fopen ("rb" or "wb"). + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). gzdopen returns NULL if there was insufficient memory to allocate the (de)compression state. */ @@ -541,7 +647,7 @@ extern int gzread OF((gzFile file, voidp buf, unsigned len)); gzread returns the number of uncompressed bytes actually read (0 for end of file, -1 for error). */ -extern int gzwrite OF((gzFile file, voidp buf, unsigned len)); +extern int gzwrite OF((gzFile file, const voidp buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of uncompressed bytes actually written @@ -582,7 +688,7 @@ extern char* gzerror OF((gzFile file, int *errnum)); compression library. */ -extern uLong adler32 OF((uLong adler, Bytef *buf, uInt len)); +extern uLong adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and @@ -599,7 +705,7 @@ extern uLong adler32 OF((uLong adler, Bytef *buf, uInt len)); if (adler != original_adler) error(); */ -extern uLong crc32 OF((uLong crc, Bytef *buf, uInt len)); +extern uLong crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running crc with the bytes buf[0..len-1] and return the updated crc. If buf is NULL, this function returns the required initial value @@ -615,8 +721,39 @@ extern uLong crc32 OF((uLong crc, Bytef *buf, uInt len)); if (crc != original_crc) error(); */ + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +extern int deflateInit_ OF((z_stream *strm, int level, + const char *version, int stream_size)); +extern int inflateInit_ OF((z_stream *strm, + const char *version, int stream_size)); +extern int deflateInit2_ OF((z_stream *strm, int level, int method, + int windowBits, int memLevel, int strategy, + const char *version, int stream_size)); +extern int inflateInit2_ OF((z_stream *strm, int windowBits, + const char *version, int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) + #ifndef _Z_UTIL_H struct internal_state {int dummy;}; /* hack for buggy compilers */ #endif +uLongf *get_crc_table OF((void)); /* can be used by asm versions of crc32() */ + +#ifdef __cplusplus +} +#endif + #endif /* _ZLIB_H */ -- cgit v1.2.3-55-g6feb