diff --git a/ChangeLog b/ChangeLog index 18af4cbd3..8e3d521fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ ChangeLog file for zlib +Changes in 1.2.0.4 (10 August 2003) +- Minor FAQ updates +- Be more strict when checking inflateInit2's windowBits parameter +- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well +- Add gzip wrapper option to deflateInit2 using windowBits +- Add updated QNX rule in configure and qnx directory [Bonnefoy] +- Make inflate distance-too-far checks more rigorous +- Clean up FAR usage in inflate +- Add casting to sizeof() in gzio.c and minigzip.c + Changes in 1.2.0.3 (19 July 2003) - Fix silly error in gzungetc() implementation [Vollant] - Update contrib/minizip and contrib/vstudio [Vollant] diff --git a/FAQ b/FAQ index c87759c16..e9bc6fc6c 100644 --- a/FAQ +++ b/FAQ @@ -122,8 +122,16 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 18. Well that's nice, but how do I make a gzip file in memory? - Read RFC 1952 for the gzip header and trailer format, and roll your own - gzip formatted data using raw deflate and crc32(). + You can request that deflate write the gzip format instead of the zlib + format using deflateInit2(). You can also request that inflate decode + the gzip format using inflateInit2(). Read zlib.h for more details. + + Note that you cannot specify special gzip header contents (e.g. a file + name or modification date), nor will inflate tell you what was in the + gzip header. If you need to customize the header or see what's in it, + you can use the raw deflate and inflate operations and the crc32() + function and roll your own gzip encoding and decoding. Read the gzip + RFC 1952 for details of the header and trailer format. 19. Is zlib thread-safe? @@ -253,7 +261,7 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 32. Is there a Java version of zlib? Probably what you want is to use zlib in Java. zlib is already included - as part of the Java SDK in the java.util.zip class. If you really want + as part of the Java SDK in the java.util.zip package. If you really want a version of zlib written in the Java language, look on the zlib home page for links: http://www.zlib.org/ diff --git a/Makefile b/Makefile index b1370ef14..425ad35cb 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ LDFLAGS=libz.a LDSHARED=$(CC) CPP=$(CC) -E -VER=1.2.0.3 +VER=1.2.0.4 LIBS=libz.a SHAREDLIB=libz.so diff --git a/Makefile.in b/Makefile.in index b1370ef14..425ad35cb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -24,7 +24,7 @@ LDFLAGS=libz.a LDSHARED=$(CC) CPP=$(CC) -E -VER=1.2.0.3 +VER=1.2.0.4 LIBS=libz.a SHAREDLIB=libz.so diff --git a/README b/README index 9c40c482e..f3f34ba12 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.0.3 is a general purpose data compression library. All the code is +zlib 1.2.0.4 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) @@ -34,7 +34,7 @@ Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available in http://dogma.net/markn/articles/zlibtool/zlibtool.htm -The changes made in version 1.2.0.3 are documented in the file ChangeLog. +The changes made in version 1.2.0.4 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory "contrib". diff --git a/configure b/configure index 68bfc88b8..39f5d8df0 100755 --- a/configure +++ b/configure @@ -78,6 +78,8 @@ if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then CFLAGS="$cflags" case `(uname -s || echo unknown) 2>/dev/null` in Linux | linux) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};; + QNX*) #This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 (alain.bonnefoy@icbt.com) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"};; HP-UX*) LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} shared_ext='.sl' SHAREDLIB='libz.sl';; diff --git a/crc32.c b/crc32.c index f163fe1f9..162256939 100644 --- a/crc32.c +++ b/crc32.c @@ -18,7 +18,7 @@ # endif /* !DYNAMIC_CRC_TABLE */ #endif /* MAKECRCH */ -#include "zutil.h" +#include "zutil.h" /* for STDC and FAR definitions */ #define local static diff --git a/deflate.c b/deflate.c index 77b2dd589..4b3825169 100644 --- a/deflate.c +++ b/deflate.c @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.0.3 Copyright 1995-2003 Jean-loup Gailly "; + " deflate 1.2.0.4 Copyright 1995-2003 Jean-loup Gailly "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -132,12 +132,12 @@ typedef struct config_s { local const config configuration_table[2] = { /* good lazy nice chain */ /* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ -/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* maximum speed, no lazy matches */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ #else local const config configuration_table[10] = { /* good lazy nice chain */ /* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ -/* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ /* 2 */ {4, 5, 16, 8, deflate_fast}, /* 3 */ {4, 6, 32, 32, deflate_fast}, @@ -146,7 +146,7 @@ local const config configuration_table[10] = { /* 6 */ {8, 16, 128, 128, deflate_slow}, /* 7 */ {8, 32, 128, 256, deflate_slow}, /* 8 */ {32, 128, 258, 1024, deflate_slow}, -/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */ +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ #endif /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 @@ -225,7 +225,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, int stream_size; { deflate_state *s; - int noheader = 0; + int wrap = 1; static const char my_version[] = ZLIB_VERSION; ushf *overlay; @@ -252,10 +252,16 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, if (level == Z_DEFAULT_COMPRESSION) level = 6; #endif - if (windowBits < 0) { /* undocumented feature: suppress zlib header */ - noheader = 1; + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; windowBits = -windowBits; } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_RLE) { @@ -267,7 +273,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, strm->state = (struct internal_state FAR *)s; s->strm = strm; - s->noheader = noheader; + s->wrap = wrap; s->w_bits = windowBits; s->w_size = 1 << s->w_bits; s->w_mask = s->w_size - 1; @@ -316,11 +322,12 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) IPos hash_head = 0; if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || - (!strm->state->noheader && strm->state->status != INIT_STATE)) + strm->state->wrap == 2 || + (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) return Z_STREAM_ERROR; s = strm->state; - if (!s->noheader) + if (s->wrap) strm->adler = adler32(strm->adler, dictionary, dictLength); if (length < MIN_MATCH) return Z_OK; @@ -364,11 +371,15 @@ int ZEXPORT deflateReset (strm) s->pending = 0; s->pending_out = s->pending_buf; - if (s->noheader < 0) { - s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ } - s->status = s->noheader ? BUSY_STATE : INIT_STATE; - strm->adler = 1; + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); s->last_flush = Z_NO_FLUSH; _tr_init(s); @@ -428,7 +439,7 @@ int ZEXPORT deflateParams(strm, level, strategy) * can emit on compressed data for some combinations of the parameters. * * This function could be more sophisticated to provide closer upper bounds - * for every combination of windowBits and memLevel, as well as noheader. + * for every combination of windowBits and memLevel, as well as wrap. * But even the conservative upper bound of about 14% expansion does not * seem onerous for output buffer allocation. */ @@ -519,33 +530,53 @@ int ZEXPORT deflate (strm, flush) old_flush = s->last_flush; s->last_flush = flush; - /* Write the zlib header */ + /* Write the header */ if (s->status == INIT_STATE) { - - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; - uInt level_flags; - - if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) - level_flags = 0; - else if (s->level < 6) - level_flags = 1; - else if (s->level == 6) - level_flags = 2; +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, 255); + s->status = BUSY_STATE; + strm->adler = crc32(0L, Z_NULL, 0); + } else - level_flags = 3; - header |= (level_flags << 6); - if (s->strstart != 0) header |= PRESET_DICT; - header += 31 - (header % 31); - - s->status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s->strstart != 0) { - putShortMSB(s, (uInt)(strm->adler >> 16)); - putShortMSB(s, (uInt)(strm->adler & 0xffff)); +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); } - strm->adler = 1L; } /* Flush as much pending output as possible */ @@ -622,16 +653,31 @@ int ZEXPORT deflate (strm, flush) Assert(strm->avail_out > 0, "bug2"); if (flush != Z_FINISH) return Z_OK; - if (s->noheader) return Z_STREAM_END; - - /* Write the zlib trailer (adler32) */ - putShortMSB(s, (uInt)(strm->adler >> 16)); - putShortMSB(s, (uInt)(strm->adler & 0xffff)); + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } flush_pending(strm); /* If avail_out is zero, the application will call deflate again * to flush the rest. */ - s->noheader = -1; /* write the trailer only once! */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ return s->pending != 0 ? Z_OK : Z_STREAM_END; } @@ -740,9 +786,14 @@ local int read_buf(strm, buf, size) strm->avail_in -= len; - if (!strm->state->noheader) { + if (strm->state->wrap == 1) { strm->adler = adler32(strm->adler, strm->next_in, len); } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, strm->next_in, len); + } +#endif zmemcpy(buf, strm->next_in, len); strm->next_in += len; strm->total_in += len; @@ -1044,7 +1095,7 @@ local void fill_window(s) } else if (more == (unsigned)(-1)) { /* Very unlikely, but possible on 16 bit machine if - * strstart == 0 && lookahead == 1 (input done one byte at time) + * strstart == 0 && lookahead == 1 (input done a byte at time) */ more--; } @@ -1271,7 +1322,7 @@ local block_state deflate_fast(s, flush) #ifndef FASTEST if (s->match_length <= s->max_insert_length && s->lookahead >= MIN_MATCH) { - s->match_length--; /* string at strstart already in hash table */ + s->match_length--; /* string at strstart already in table */ do { s->strstart++; INSERT_STRING(s, s->strstart, hash_head); diff --git a/deflate.h b/deflate.h index 0e8417d41..de3e6cee3 100644 --- a/deflate.h +++ b/deflate.h @@ -15,6 +15,14 @@ #include "zutil.h" +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + /* =========================================================================== * Internal compression state. */ @@ -86,7 +94,7 @@ typedef struct internal_state { ulg pending_buf_size; /* size of pending_buf */ Bytef *pending_out; /* next pending byte to output to the stream */ int pending; /* nb of bytes in the pending buffer */ - int noheader; /* suppress zlib header and adler32 */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ Byte data_type; /* UNKNOWN, BINARY or ASCII */ Byte method; /* STORED (for zip only) or DEFLATED */ int last_flush; /* value of flush param for previous deflate call */ diff --git a/gzio.c b/gzio.c index 1beb47fac..f10ade329 100644 --- a/gzio.c +++ b/gzio.c @@ -608,7 +608,7 @@ int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) va_end(va); # endif #endif - if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) + if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) return 0; return gzwrite(file, buf, (unsigned)len); } diff --git a/infback.c b/infback.c index 0aef86de2..287624c41 100644 --- a/infback.c +++ b/infback.c @@ -55,6 +55,7 @@ int stream_size; state->wsize = 1U << windowBits; state->window = window; state->write = 0; + state->whave = 0; return Z_OK; } @@ -201,6 +202,7 @@ struct inflate_state FAR *state; if (left == 0) { \ put = state->window; \ left = state->wsize; \ + state->whave = left; \ if (out(out_desc, put, left)) { \ ret = Z_BUF_ERROR; \ goto inf_leave; \ @@ -216,7 +218,7 @@ struct inflate_state FAR *state; in() and out() are the call-back input and output functions. When inflateBack() needs more input, it calls in(). When inflateBack() has filled the window with output, or when it completes with data in the - window, it called out() to write out the data. The application must not + window, it calls out() to write out the data. The application must not change the provided input until in() is called again or inflateBack() returns. The application must not change the window/output buffer until inflateBack() returns. @@ -243,12 +245,13 @@ out_func out; void FAR *out_desc; { struct inflate_state FAR *state; - unsigned char *next, *put; /* next input and output */ + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ unsigned have, left; /* available input and output */ unsigned long hold; /* bit buffer */ unsigned bits; /* bits in bit buffer */ unsigned copy; /* number of stored or match bytes to copy */ - unsigned char *from; /* where to copy match bytes from */ + unsigned char FAR *from; /* where to copy match bytes from */ code this; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ @@ -265,6 +268,7 @@ void FAR *out_desc; strm->msg = Z_NULL; state->mode = TYPE; state->last = 0; + state->whave = 0; next = strm->next_in; have = next != Z_NULL ? strm->avail_in : 0; hold = 0; @@ -457,6 +461,8 @@ void FAR *out_desc; /* use inflate_fast() if we have enough input and output */ if (have >= 6 && left >= 258) { RESTORE(); + if (state->whave < state->wsize) + state->whave = state->wsize - left; inflate_fast(strm, state->wsize); LOAD(); break; @@ -547,7 +553,8 @@ void FAR *out_desc; state->offset += BITS(state->extra); DROPBITS(state->extra); } - if (state->offset > state->wsize) { + if (state->offset > state->wsize - (state->whave < state->wsize ? + left : 0)) { strm->msg = (char *)"invalid distance too far back"; state->mode = BAD; break; diff --git a/inflate.c b/inflate.c index 0fd158d8f..da2bb59f2 100644 --- a/inflate.c +++ b/inflate.c @@ -113,6 +113,7 @@ z_streamp strm; state->last = 0; state->havedict = 0; state->wsize = 0; + state->whave = 0; state->hold = 0; state->bits = 0; state->lencode = state->distcode = state->next = state->codes; @@ -150,7 +151,7 @@ int stream_size; else { state->wrap = (windowBits >> 4) + 1; #ifdef GUNZIP - windowBits &= 15; + if (windowBits < 48) windowBits &= 15; #endif } if (windowBits < 8 || windowBits > 15) { @@ -320,6 +321,7 @@ unsigned out; if (state->wsize == 0) { state->wsize = 1U << state->wbits; state->write = 0; + state->whave = 0; } /* copy state->wsize or less output bytes into the circular window */ @@ -327,6 +329,7 @@ unsigned out; if (copy >= state->wsize) { zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); state->write = 0; + state->whave = state->wsize; } else { dist = state->wsize - state->write; @@ -336,10 +339,12 @@ unsigned out; if (copy) { zmemcpy(state->window, strm->next_out - copy, copy); state->write = copy; + state->whave = state->wsize; } else { state->write += dist; if (state->write == state->wsize) state->write = 0; + if (state->whave < state->wsize) state->whave += dist; } } return 0; @@ -531,13 +536,14 @@ z_streamp strm; int flush; { struct inflate_state FAR *state; - unsigned char *next, *put; /* next input and output */ + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ unsigned have, left; /* available input and output */ unsigned long hold; /* bit buffer */ unsigned bits; /* bits in bit buffer */ unsigned in, out; /* save starting available input and output */ unsigned copy; /* number of stored or match bytes to copy */ - unsigned char *from; /* where to copy match bytes from */ + unsigned char FAR *from; /* where to copy match bytes from */ code this; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ @@ -956,8 +962,7 @@ int flush; state->offset += BITS(state->extra); DROPBITS(state->extra); } - if (state->offset > (state->wsize ? state->wsize : - out - left)) { + if (state->offset > state->whave + out - left) { strm->msg = (char *)"invalid distance too far back"; state->mode = BAD; break; @@ -1108,12 +1113,16 @@ uInt dictLength; state->mode = MEM; return Z_MEM_ERROR; } - if (dictLength > state->wsize) + if (dictLength > state->wsize) { zmemcpy(state->window, dictionary + dictLength - state->wsize, state->wsize); - else + state->whave = state->wsize; + } + else { zmemcpy(state->window + state->wsize - dictLength, dictionary, dictLength); + state->whave = dictLength; + } state->havedict = 1; Tracev((stderr, "inflate: dictionary set\n")); return Z_OK; @@ -1131,7 +1140,7 @@ uInt dictLength; zero for the first call. */ local unsigned syncsearch(have, buf, len) -unsigned *have; +unsigned FAR *have; unsigned char FAR *buf; unsigned len; { diff --git a/inflate.h b/inflate.h index 2221b2305..8bd40a5d9 100644 --- a/inflate.h +++ b/inflate.h @@ -8,11 +8,11 @@ subject to change. Applications should only use zlib.h. */ -/* define NO_GUNZIP when compiling if you want to disable gzip header and - trailer decoding by inflate(). NO_GUNZIP would be used to avoid linking in +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in the crc code when it is not needed. For shared libraries, gzip decoding should be left enabled. */ -#ifndef NO_GUNZIP +#ifndef NO_GZIP # define GUNZIP #endif @@ -88,6 +88,7 @@ struct inflate_state { /* sliding window */ unsigned wbits; /* log base 2 of requested window size */ unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ unsigned write; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if needed */ /* bit accumulator */ diff --git a/inftrees.c b/inftrees.c index 35ab097f5..f99f14e2a 100644 --- a/inftrees.c +++ b/inftrees.c @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.0.3 Copyright 1995-2003 Mark Adler "; + " inflate 1.2.0.4 Copyright 1995-2003 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -33,8 +33,8 @@ int inflate_table(type, lens, codes, table, bits, work) codetype type; unsigned short FAR *lens; unsigned codes; -code * FAR *table; -unsigned *bits; +code FAR * FAR *table; +unsigned FAR *bits; unsigned short FAR *work; { unsigned len; /* a code's length in bits */ @@ -52,8 +52,8 @@ unsigned short FAR *work; unsigned mask; /* mask for low root bits */ code this; /* table entry for duplication */ code FAR *next; /* next available space in table */ - const unsigned short *base; /* base value table to use */ - const unsigned short *extra; /* extra bits table to use */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ int end; /* use base and extra for symbol > end */ unsigned short count[MAXBITS+1]; /* number of codes of each length */ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ @@ -62,7 +62,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 193, 193}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 192}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/inftrees.h b/inftrees.h index 49eeeb9da..82d365a7e 100644 --- a/inftrees.h +++ b/inftrees.h @@ -51,5 +51,5 @@ typedef enum { } codetype; extern int inflate_table OF((codetype type, unsigned short FAR *lens, - unsigned codes, code * FAR *table, unsigned *bits, - unsigned short FAR *work)); + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/minigzip.c b/minigzip.c index e75108f14..68e20c246 100644 --- a/minigzip.c +++ b/minigzip.c @@ -60,7 +60,7 @@ #ifndef GZ_SUFFIX # define GZ_SUFFIX ".gz" #endif -#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) +#define SUFFIX_LEN ((int)sizeof(GZ_SUFFIX)-1) #define BUFLEN 16384 #define MAX_NAME_LEN 1024 diff --git a/qnx/package.qpg b/qnx/package.qpg new file mode 100644 index 000000000..951f6fa7a --- /dev/null +++ b/qnx/package.qpg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Library + + Medium + + 2.0 + + + + zlib + zlib + alain.bonnefoy@icbt.com + Public + public + www.gzip.org/zlib + + + Jean-Loup Gailly,Mark Adler + www.gzip.org/zlib + + zlib@gzip.org + + + A massively spiffy yet delicately unobtrusive compression library. + zlib is designed to be a free, general-purpose, legally unencumbered, lossless data compression library for use on virtually any computer hardware and operating system. + http://www.gzip.org/zlib + + + + + 1.2.0.4 + Medium + Stable + + + + + + + No License + + + + Software Development/Libraries and Extensions/C Libraries + zlib,compression + qnx6 + qnx6 + None + Developer + + + + + + + + + + + + + + Install + Post + No + Ignore + + No + Optional + + + + + + + + + + + + + InstallOver + zlib + + + + + + + + + + + + + InstallOver + zlib-dev + + + + + + + + + diff --git a/zlib.3 b/zlib.3 index 69cdce262..f5bdb8d14 100644 --- a/zlib.3 +++ b/zlib.3 @@ -1,4 +1,4 @@ -.TH ZLIB 3 "12 May 2003" +.TH ZLIB 3 "xx July 2003" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS @@ -133,7 +133,7 @@ before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). .SH AUTHORS -Version 1.2.0.3 +Version 1.2.0.4 Copyright (C) 1995-2003 Jean-loup Gailly (jloup@gzip.org) and Mark Adler (madler@alumni.caltech.edu). .LP diff --git a/zlib.h b/zlib.h index 43a1ac6fa..3c4218a2b 100644 --- a/zlib.h +++ b/zlib.h @@ -1,5 +1,5 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.0.3, July 19th, 2003 + version 1.2.0.4, August 10th, 2003 Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler @@ -37,8 +37,8 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.0.3" -#define ZLIB_VERNUM 0x1203 +#define ZLIB_VERSION "1.2.0.4" +#define ZLIB_VERNUM 0x1204 /* The 'zlib' compression library provides in-memory compression and @@ -446,15 +446,21 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, this version of the library. The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this + (the size of the history buffer). It should be in the range 8..15 for this version of the library. Larger values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + 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. + 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). + 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 @@ -801,8 +807,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); Library content (indicates missing functionality): 16: NO_DEFLATE -- gz* functions cannot compress (to avoid linking deflate code when not needed) - 17: NO_GUNZIP -- inflate can't detect and decode gzip streams, to avoid - linking crc code + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) 18-19: 0 (reserved) Operation variations (changes in library functionality): diff --git a/zutil.c b/zutil.c index b8d11a11c..c85e1d5b2 100644 --- a/zutil.c +++ b/zutil.c @@ -74,7 +74,7 @@ uLong ZEXPORT zlibCompileFlags() #ifdef NO_DEFLATE flags += 1 << 16; #endif -#ifdef NO_GUNZIP +#ifdef NO_GZIP flags += 1 << 17; #endif #ifdef PKZIP_BUG_WORKAROUND