summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2011-09-09 23:26:29 -0700
committerMark Adler <madler@alumni.caltech.edu>2011-09-09 23:26:29 -0700
commit639be997883d9016baaf46017a2802b2ce1698bd (patch)
treedb90fc577d10564b335980824111e8d11c5527e2
parentd6231142d2b883a8c3b253fa34992b5cdb4ac2fe (diff)
downloadzlib-1.2.3.3.tar.gz
zlib-1.2.3.3.tar.bz2
zlib-1.2.3.3.zip
zlib 1.2.3.3v1.2.3.3
-rw-r--r--ChangeLog14
-rw-r--r--Makefile41
-rw-r--r--Makefile.in41
-rw-r--r--README4
-rw-r--r--adler32.c44
-rw-r--r--as400/zlib.inc6
-rwxr-xr-xconfigure49
-rw-r--r--contrib/infback9/infback9.c80
-rw-r--r--contrib/infback9/inftree9.c4
-rw-r--r--contrib/vstudio/vc7/zlib.rc6
-rw-r--r--crc32.c41
-rw-r--r--deflate.c2
-rw-r--r--gzio.c121
-rw-r--r--infback.c80
-rw-r--r--inffast.c57
-rw-r--r--inflate.c123
-rw-r--r--inflate.h1
-rw-r--r--inftrees.c42
-rw-r--r--qnx/package.qpg10
-rw-r--r--zlib.36
-rw-r--r--zlib.h45
-rw-r--r--zutil.h6
22 files changed, 583 insertions, 240 deletions
diff --git a/ChangeLog b/ChangeLog
index 3fa7ae1..1bc7105 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,20 @@
1 1
2 ChangeLog file for zlib 2 ChangeLog file for zlib
3 3
4Changes in 1.2.3.3 (2 October 2006)
5- Make --shared the default for configure, add a --static option
6- Add compile option to permit invalid distance-too-far streams
7- Add inflateUndermine() function which is required to enable above
8- Remove use of "this" variable name for C++ compatibility [Marquess]
9- Add testing of shared library in make test, if shared library built
10- Use ftello() and fseeko() if available instead of ftell() and fseek()
11- Provide two versions of all functions that use the z_off_t type for
12 binary compatibility -- a normal version and a 64-bit offset version,
13 per the Large File Support Extension when _LARGEFILE64_SUPPORT is
14 defined; use the 64-bit versions by default when _FILE_OFFSET_BITS
15 is defined to be 64
16- Add a --uname= option to configure to perhaps help with cross-compiling
17
4Changes in 1.2.3.2 (3 September 2006) 18Changes in 1.2.3.2 (3 September 2006)
5- Turn off silly Borland warnings [Hay] 19- Turn off silly Borland warnings [Hay]
6- Use off64_t and define _LARGEFILE64_SOURCE when present 20- Use off64_t and define _LARGEFILE64_SOURCE when present
diff --git a/Makefile b/Makefile
index 8c77268..2fa2e25 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ CPP=$(CC) -E
32 32
33LIBS=libz.a 33LIBS=libz.a
34SHAREDLIB=libz.so 34SHAREDLIB=libz.so
35SHAREDLIBV=libz.so.1.2.3.2 35SHAREDLIBV=libz.so.1.2.3.3
36SHAREDLIBM=libz.so.1 36SHAREDLIBM=libz.so.1
37 37
38AR=ar 38AR=ar
@@ -61,12 +61,14 @@ PIC_OBJS = $(OBJS:%.o=%.lo)
61 61
62TEST_OBJS = example.o minigzip.o 62TEST_OBJS = example.o minigzip.o
63 63
64all: example$(EXE) minigzip$(EXE) 64allstatic: example$(EXE) minigzip$(EXE)
65 65
66check: test 66allshared: examplesh$(EXE) minigzipsh$(EXE)
67test: all 67
68 @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ 68all: allstatic allshared
69 echo hello world | ./minigzip | ./minigzip -d || \ 69
70teststatic: allstatic
71 @echo hello world | ./minigzip | ./minigzip -d || \
70 echo ' *** minigzip test FAILED ***' ; \ 72 echo ' *** minigzip test FAILED ***' ; \
71 if ./example; then \ 73 if ./example; then \
72 echo ' *** zlib test OK ***'; \ 74 echo ' *** zlib test OK ***'; \
@@ -74,6 +76,22 @@ test: all
74 echo ' *** zlib test FAILED ***'; \ 76 echo ' *** zlib test FAILED ***'; \
75 fi 77 fi
76 78
79testshared: allshared
80 @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
81 DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
82 SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
83 echo hello world | ./minigzipsh | ./minigzipsh -d || \
84 echo ' *** minigzip shared test FAILED ***' ; \
85 if ./examplesh; then \
86 echo ' *** zlib shared test OK ***'; \
87 else \
88 echo ' *** zlib shared test FAILED ***'; \
89 fi
90
91test: teststatic testshared
92
93check: test
94
77libz.a: $(OBJS) 95libz.a: $(OBJS)
78 $(AR) $@ $(OBJS) 96 $(AR) $@ $(OBJS)
79 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 97 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
@@ -105,6 +123,12 @@ example$(EXE): example.o $(LIBS)
105minigzip$(EXE): minigzip.o $(LIBS) 123minigzip$(EXE): minigzip.o $(LIBS)
106 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) 124 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
107 125
126examplesh$(EXE): example.o $(LIBS)
127 $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIB)
128
129minigzipsh$(EXE): minigzip.o $(LIBS)
130 $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIB)
131
108install-libs: $(LIBS) 132install-libs: $(LIBS)
109 -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi 133 -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
110 -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi 134 -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi
@@ -142,7 +166,8 @@ uninstall:
142 166
143mostlyclean: clean 167mostlyclean: clean
144clean: 168clean:
145 rm -f *.o *.lo *~ example$(EXE) minigzip$(EXE) \ 169 rm -f *.o *.lo *~ \
170 example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
146 libz.* foo.gz so_locations \ 171 libz.* foo.gz so_locations \
147 _match.s maketree contrib/infback9/*.o 172 _match.s maketree contrib/infback9/*.o
148 173
@@ -180,13 +205,11 @@ adler32.lo: zlib.h zconf.h zlibdefs.h
180compress.lo: zlib.h zconf.h zlibdefs.h 205compress.lo: zlib.h zconf.h zlibdefs.h
181crc32.lo: crc32.h zlib.h zconf.h zlibdefs.h 206crc32.lo: crc32.h zlib.h zconf.h zlibdefs.h
182deflate.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h 207deflate.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h
183example.lo: zlib.h zconf.h zlibdefs.h
184gzio.lo: zutil.h zlib.h zconf.h zlibdefs.h 208gzio.lo: zutil.h zlib.h zconf.h zlibdefs.h
185inffast.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h 209inffast.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h
186inflate.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h 210inflate.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h
187infback.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h 211infback.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h
188inftrees.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h 212inftrees.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h
189minigzip.lo: zlib.h zconf.h zlibdefs.h
190trees.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h 213trees.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h
191uncompr.lo: zlib.h zconf.h zlibdefs.h 214uncompr.lo: zlib.h zconf.h zlibdefs.h
192zutil.lo: zutil.h zlib.h zconf.h zlibdefs.h 215zutil.lo: zutil.h zlib.h zconf.h zlibdefs.h
diff --git a/Makefile.in b/Makefile.in
index 8c77268..2fa2e25 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -32,7 +32,7 @@ CPP=$(CC) -E
32 32
33LIBS=libz.a 33LIBS=libz.a
34SHAREDLIB=libz.so 34SHAREDLIB=libz.so
35SHAREDLIBV=libz.so.1.2.3.2 35SHAREDLIBV=libz.so.1.2.3.3
36SHAREDLIBM=libz.so.1 36SHAREDLIBM=libz.so.1
37 37
38AR=ar 38AR=ar
@@ -61,12 +61,14 @@ PIC_OBJS = $(OBJS:%.o=%.lo)
61 61
62TEST_OBJS = example.o minigzip.o 62TEST_OBJS = example.o minigzip.o
63 63
64all: example$(EXE) minigzip$(EXE) 64allstatic: example$(EXE) minigzip$(EXE)
65 65
66check: test 66allshared: examplesh$(EXE) minigzipsh$(EXE)
67test: all 67
68 @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ 68all: allstatic allshared
69 echo hello world | ./minigzip | ./minigzip -d || \ 69
70teststatic: allstatic
71 @echo hello world | ./minigzip | ./minigzip -d || \
70 echo ' *** minigzip test FAILED ***' ; \ 72 echo ' *** minigzip test FAILED ***' ; \
71 if ./example; then \ 73 if ./example; then \
72 echo ' *** zlib test OK ***'; \ 74 echo ' *** zlib test OK ***'; \
@@ -74,6 +76,22 @@ test: all
74 echo ' *** zlib test FAILED ***'; \ 76 echo ' *** zlib test FAILED ***'; \
75 fi 77 fi
76 78
79testshared: allshared
80 @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
81 DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
82 SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
83 echo hello world | ./minigzipsh | ./minigzipsh -d || \
84 echo ' *** minigzip shared test FAILED ***' ; \
85 if ./examplesh; then \
86 echo ' *** zlib shared test OK ***'; \
87 else \
88 echo ' *** zlib shared test FAILED ***'; \
89 fi
90
91test: teststatic testshared
92
93check: test
94
77libz.a: $(OBJS) 95libz.a: $(OBJS)
78 $(AR) $@ $(OBJS) 96 $(AR) $@ $(OBJS)
79 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 97 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
@@ -105,6 +123,12 @@ example$(EXE): example.o $(LIBS)
105minigzip$(EXE): minigzip.o $(LIBS) 123minigzip$(EXE): minigzip.o $(LIBS)
106 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) 124 $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
107 125
126examplesh$(EXE): example.o $(LIBS)
127 $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIB)
128
129minigzipsh$(EXE): minigzip.o $(LIBS)
130 $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIB)
131
108install-libs: $(LIBS) 132install-libs: $(LIBS)
109 -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi 133 -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
110 -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi 134 -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi
@@ -142,7 +166,8 @@ uninstall:
142 166
143mostlyclean: clean 167mostlyclean: clean
144clean: 168clean:
145 rm -f *.o *.lo *~ example$(EXE) minigzip$(EXE) \ 169 rm -f *.o *.lo *~ \
170 example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
146 libz.* foo.gz so_locations \ 171 libz.* foo.gz so_locations \
147 _match.s maketree contrib/infback9/*.o 172 _match.s maketree contrib/infback9/*.o
148 173
@@ -180,13 +205,11 @@ adler32.lo: zlib.h zconf.h zlibdefs.h
180compress.lo: zlib.h zconf.h zlibdefs.h 205compress.lo: zlib.h zconf.h zlibdefs.h
181crc32.lo: crc32.h zlib.h zconf.h zlibdefs.h 206crc32.lo: crc32.h zlib.h zconf.h zlibdefs.h
182deflate.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h 207deflate.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h
183example.lo: zlib.h zconf.h zlibdefs.h
184gzio.lo: zutil.h zlib.h zconf.h zlibdefs.h 208gzio.lo: zutil.h zlib.h zconf.h zlibdefs.h
185inffast.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h 209inffast.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h
186inflate.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h 210inflate.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h
187infback.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h 211infback.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h
188inftrees.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h 212inftrees.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h
189minigzip.lo: zlib.h zconf.h zlibdefs.h
190trees.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h 213trees.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h
191uncompr.lo: zlib.h zconf.h zlibdefs.h 214uncompr.lo: zlib.h zconf.h zlibdefs.h
192zutil.lo: zutil.h zlib.h zconf.h zlibdefs.h 215zutil.lo: zutil.h zlib.h zconf.h zlibdefs.h
diff --git a/README b/README
index e22d1fa..75cae36 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
1ZLIB DATA COMPRESSION LIBRARY 1ZLIB DATA COMPRESSION LIBRARY
2 2
3zlib 1.2.3.2 is a general purpose data compression library. All the code is 3zlib 1.2.3.3 is a general purpose data compression library. All the code is
4thread safe. The data format used by the zlib library is described by RFCs 4thread safe. The data format used by the zlib library is described by RFCs
5(Request for Comments) 1950 to 1952 in the files 5(Request for Comments) 1950 to 1952 in the files
6http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) 6http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
@@ -33,7 +33,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
33issue of Dr. Dobb's Journal; a copy of the article is available in 33issue of Dr. Dobb's Journal; a copy of the article is available in
34http://dogma.net/markn/articles/zlibtool/zlibtool.htm 34http://dogma.net/markn/articles/zlibtool/zlibtool.htm
35 35
36The changes made in version 1.2.3.2 are documented in the file ChangeLog. 36The changes made in version 1.2.3.3 are documented in the file ChangeLog.
37 37
38Unsupported third party contributions are provided in directory "contrib". 38Unsupported third party contributions are provided in directory "contrib".
39 39
diff --git a/adler32.c b/adler32.c
index 007ba26..8bf7dc4 100644
--- a/adler32.c
+++ b/adler32.c
@@ -1,5 +1,5 @@
1/* adler32.c -- compute the Adler-32 checksum of a data stream 1/* adler32.c -- compute the Adler-32 checksum of a data stream
2 * Copyright (C) 1995-2004 Mark Adler 2 * Copyright (C) 1995-2006 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */ 4 */
5 5
@@ -8,6 +8,15 @@
8#define ZLIB_INTERNAL 8#define ZLIB_INTERNAL
9#include "zlib.h" 9#include "zlib.h"
10 10
11#define local static
12
13#ifdef _LARGEFILE64_SOURCE
14 local uLong adler32_combine_(uLong adler1, uLong adler2, off64_t len2);
15#else
16 local uLong adler32_combine_(uLong adler1, uLong adler2, z_off_t len2);
17#endif
18
19
11#define BASE 65521UL /* largest prime smaller than 65536 */ 20#define BASE 65521UL /* largest prime smaller than 65536 */
12#define NMAX 5552 21#define NMAX 5552
13/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ 22/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
@@ -125,10 +134,14 @@ uLong ZEXPORT adler32(adler, buf, len)
125} 134}
126 135
127/* ========================================================================= */ 136/* ========================================================================= */
128uLong ZEXPORT adler32_combine(adler1, adler2, len2) 137local uLong adler32_combine_(adler1, adler2, len2)
129 uLong adler1; 138 uLong adler1;
130 uLong adler2; 139 uLong adler2;
140#ifdef _LARGEFILE64_SOURCE
141 off64_t len2;
142#else
131 z_off_t len2; 143 z_off_t len2;
144#endif
132{ 145{
133 unsigned long sum1; 146 unsigned long sum1;
134 unsigned long sum2; 147 unsigned long sum2;
@@ -147,3 +160,30 @@ uLong ZEXPORT adler32_combine(adler1, adler2, len2)
147 if (sum2 > BASE) sum2 -= BASE; 160 if (sum2 > BASE) sum2 -= BASE;
148 return sum1 | (sum2 << 16); 161 return sum1 | (sum2 << 16);
149} 162}
163
164/* ========================================================================= */
165uLong ZEXPORT adler32_combine(adler1, adler2, len2)
166 uLong adler1;
167 uLong adler2;
168 z_off_t len2;
169{
170 return adler32_combine_(adler1, adler2, len2);
171}
172
173#ifdef _LARGEFILE64_SOURCE
174uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
175 uLong adler1;
176 uLong adler2;
177 off64_t len2;
178{
179 return adler32_combine_(adler1, adler2, len2);
180}
181#else
182uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
183 uLong adler1;
184 uLong adler2;
185 z_off_t len2;
186{
187 return adler32_combine_(adler1, adler2, len2);
188}
189#endif
diff --git a/as400/zlib.inc b/as400/zlib.inc
index fcf1791..4436477 100644
--- a/as400/zlib.inc
+++ b/as400/zlib.inc
@@ -1,7 +1,7 @@
1 * ZLIB.INC - Interface to the general purpose compression library 1 * ZLIB.INC - Interface to the general purpose compression library
2 * 2 *
3 * ILE RPG400 version by Patrick Monnerat, DATASPHERE. 3 * ILE RPG400 version by Patrick Monnerat, DATASPHERE.
4 * Version 1.2.3.2 4 * Version 1.2.3.3
5 * 5 *
6 * 6 *
7 * WARNING: 7 * WARNING:
@@ -22,8 +22,8 @@
22 * 22 *
23 * Versioning information. 23 * Versioning information.
24 * 24 *
25 D ZLIB_VERSION C '1.2.3.2' 25 D ZLIB_VERSION C '1.2.3.3'
26 D ZLIB_VERNUM C X'1232' 26 D ZLIB_VERNUM C X'1233'
27 * 27 *
28 * Other equates. 28 * Other equates.
29 * 29 *
diff --git a/configure b/configure
index 6e8060e..cc97872 100755
--- a/configure
+++ b/configure
@@ -32,7 +32,7 @@ libdir=${libdir-'${exec_prefix}/lib'}
32includedir=${includedir-'${prefix}/include'} 32includedir=${includedir-'${prefix}/include'}
33mandir=${mandir-'${prefix}/share/man'} 33mandir=${mandir-'${prefix}/share/man'}
34shared_ext='.so' 34shared_ext='.so'
35shared=0 35shared=1
36zprefix=0 36zprefix=0
37gcc=0 37gcc=0
38old_cc="$CC" 38old_cc="$CC"
@@ -50,11 +50,13 @@ case "$1" in
50 -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; 50 -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
51 -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; 51 -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
52 -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;; 52 -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;;
53 -u*=* | --uname=*) uname=`echo $1 | sed 's/[-a-z_]*=//'`;shift;;
53 -p* | --prefix) prefix="$2"; shift; shift;; 54 -p* | --prefix) prefix="$2"; shift; shift;;
54 -e* | --eprefix) exec_prefix="$2"; shift; shift;; 55 -e* | --eprefix) exec_prefix="$2"; shift; shift;;
55 -l* | --libdir) libdir="$2"; shift; shift;; 56 -l* | --libdir) libdir="$2"; shift; shift;;
56 -i* | --includedir) includedir="$2"; shift; shift;; 57 -i* | --includedir) includedir="$2"; shift; shift;;
57 -s* | --shared | --enable-shared) shared=1; shift;; 58 -s* | --shared | --enable-shared) shared=1; shift;;
59 -t | --static) shared=0; shift;;
58 -z* | --zprefix) zprefix=1; shift;; 60 -z* | --zprefix) zprefix=1; shift;;
59 --sysconfdir=*) echo "ignored option: --sysconfdir"; shift;; 61 --sysconfdir=*) echo "ignored option: --sysconfdir"; shift;;
60 --localstatedir=*) echo "ignored option: --localstatedir"; shift;; 62 --localstatedir=*) echo "ignored option: --localstatedir"; shift;;
@@ -80,7 +82,10 @@ if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
80 CC="$cc" 82 CC="$cc"
81 SFLAGS="${CFLAGS-"-O3"} -fPIC" 83 SFLAGS="${CFLAGS-"-O3"} -fPIC"
82 CFLAGS="${CFLAGS-"-O3"}" 84 CFLAGS="${CFLAGS-"-O3"}"
83 case `(uname -s || echo unknown) 2>/dev/null` in 85 if test -z $uname; then
86 uname=`(uname -s || echo unknown) 2>/dev/null`
87 fi
88 case "$uname" in
84 Linux | linux | GNU | GNU/*) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"};; 89 Linux | linux | GNU | GNU/*) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"};;
85 CYGWIN* | Cygwin* | cygwin* | OS/2* ) 90 CYGWIN* | Cygwin* | cygwin* | OS/2* )
86 EXE='.exe';; 91 EXE='.exe';;
@@ -107,7 +112,10 @@ if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
107else 112else
108 # find system name and corresponding cc options 113 # find system name and corresponding cc options
109 CC=${CC-cc} 114 CC=${CC-cc}
110 case `(uname -sr || echo unknown) 2>/dev/null` in 115 if test -z $uname; then
116 uname=`(uname -sr || echo unknown) 2>/dev/null`
117 fi
118 case "$uname" in
111 HP-UX*) SFLAGS=${CFLAGS-"-O +z"} 119 HP-UX*) SFLAGS=${CFLAGS-"-O +z"}
112 CFLAGS=${CFLAGS-"-O"} 120 CFLAGS=${CFLAGS-"-O"}
113# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} 121# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
@@ -200,7 +208,12 @@ if test $shared -eq 1; then
200fi 208fi
201if test $shared -eq 0; then 209if test $shared -eq 0; then
202 LDSHARED="$CC" 210 LDSHARED="$CC"
211 ALL="allstatic"
212 TEST="teststatic"
203 echo Building static library $LIBS version $VER with $CC. 213 echo Building static library $LIBS version $VER with $CC.
214else
215 ALL="allstatic allshared"
216 TEST="teststatic testshared"
204fi 217fi
205 218
206cat > zlibdefs.h << EOF 219cat > zlibdefs.h << EOF
@@ -215,15 +228,27 @@ cat > $test.c <<EOF
215#include <sys/types.h> 228#include <sys/types.h>
216off64_t dummy = 0; 229off64_t dummy = 0;
217EOF 230EOF
218if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE $test.c) 2>&1`" = ""; then 231if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`" = ""; then
219 cat >> zlibdefs.h <<EOF 232 CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
220#define z_off_t off64_t 233 SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
221EOF
222 CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE"
223 SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE"
224 echo "Checking for off64_t... Yes." 234 echo "Checking for off64_t... Yes."
235 echo "Checking for fseeko... Yes."
225else 236else
226 echo "Checking for off64_t... No." 237 echo "Checking for off64_t... No."
238 cat > $test.c <<EOF
239#include <stdio.h>
240int main(void) {
241 fseeko(NULL, 0, 0);
242 return 0;
243}
244EOF
245 if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
246 echo "Checking for fseeko... Yes."
247 else
248 CFLAGS="${CFLAGS} -DNO_FSEEKO"
249 SFLAGS="${SFLAGS} -DNO_FSEEKO"
250 echo "Checking for fseeko... No."
251 fi
227fi 252fi
228 253
229cat > $test.c <<EOF 254cat > $test.c <<EOF
@@ -491,8 +516,9 @@ sed < Makefile.in "
491/^CC *=/s#=.*#=$CC# 516/^CC *=/s#=.*#=$CC#
492/^CFLAGS *=/s#=.*#=$CFLAGS# 517/^CFLAGS *=/s#=.*#=$CFLAGS#
493/^SFLAGS *=/s#=.*#=$SFLAGS# 518/^SFLAGS *=/s#=.*#=$SFLAGS#
494/^CPP *=/s#=.*#=$CPP# 519/^LDFLAGS *=/s#=.*#=$LDFLAGS#
495/^LDSHARED *=/s#=.*#=$LDSHARED# 520/^LDSHARED *=/s#=.*#=$LDSHARED#
521/^CPP *=/s#=.*#=$CPP#
496/^LIBS *=/s#=.*#=$LIBS# 522/^LIBS *=/s#=.*#=$LIBS#
497/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# 523/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
498/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# 524/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
@@ -505,7 +531,8 @@ sed < Makefile.in "
505/^libdir *=/s#=.*#=$libdir# 531/^libdir *=/s#=.*#=$libdir#
506/^includedir *=/s#=.*#=$includedir# 532/^includedir *=/s#=.*#=$includedir#
507/^mandir *=/s#=.*#=$mandir# 533/^mandir *=/s#=.*#=$mandir#
508/^LDFLAGS *=/s#=.*#=$LDFLAGS# 534/^all: */s#:.*#: $ALL#
535/^test: */s#:.*#: $TEST#
509" > Makefile 536" > Makefile
510 537
511sed < zlib.pc.in " 538sed < zlib.pc.in "
diff --git a/contrib/infback9/infback9.c b/contrib/infback9/infback9.c
index f5ddde6..c5547ae 100644
--- a/contrib/infback9/infback9.c
+++ b/contrib/infback9/infback9.c
@@ -1,5 +1,5 @@
1/* infback9.c -- inflate deflate64 data using a call-back interface 1/* infback9.c -- inflate deflate64 data using a call-back interface
2 * Copyright (C) 1995-2003 Mark Adler 2 * Copyright (C) 1995-2006 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */ 4 */
5 5
@@ -242,7 +242,7 @@ void FAR *out_desc;
242 code const FAR *distcode; /* starting table for distance codes */ 242 code const FAR *distcode; /* starting table for distance codes */
243 unsigned lenbits; /* index bits for lencode */ 243 unsigned lenbits; /* index bits for lencode */
244 unsigned distbits; /* index bits for distcode */ 244 unsigned distbits; /* index bits for distcode */
245 code this; /* current decoding table entry */ 245 code here; /* current decoding table entry */
246 code last; /* parent table entry */ 246 code last; /* parent table entry */
247 unsigned len; /* length to copy for repeats, bits to drop */ 247 unsigned len; /* length to copy for repeats, bits to drop */
248 int ret; /* return code */ 248 int ret; /* return code */
@@ -384,19 +384,19 @@ void FAR *out_desc;
384 state->have = 0; 384 state->have = 0;
385 while (state->have < state->nlen + state->ndist) { 385 while (state->have < state->nlen + state->ndist) {
386 for (;;) { 386 for (;;) {
387 this = lencode[BITS(lenbits)]; 387 here = lencode[BITS(lenbits)];
388 if ((unsigned)(this.bits) <= bits) break; 388 if ((unsigned)(here.bits) <= bits) break;
389 PULLBYTE(); 389 PULLBYTE();
390 } 390 }
391 if (this.val < 16) { 391 if (here.val < 16) {
392 NEEDBITS(this.bits); 392 NEEDBITS(here.bits);
393 DROPBITS(this.bits); 393 DROPBITS(here.bits);
394 state->lens[state->have++] = this.val; 394 state->lens[state->have++] = here.val;
395 } 395 }
396 else { 396 else {
397 if (this.val == 16) { 397 if (here.val == 16) {
398 NEEDBITS(this.bits + 2); 398 NEEDBITS(here.bits + 2);
399 DROPBITS(this.bits); 399 DROPBITS(here.bits);
400 if (state->have == 0) { 400 if (state->have == 0) {
401 strm->msg = (char *)"invalid bit length repeat"; 401 strm->msg = (char *)"invalid bit length repeat";
402 mode = BAD; 402 mode = BAD;
@@ -406,16 +406,16 @@ void FAR *out_desc;
406 copy = 3 + BITS(2); 406 copy = 3 + BITS(2);
407 DROPBITS(2); 407 DROPBITS(2);
408 } 408 }
409 else if (this.val == 17) { 409 else if (here.val == 17) {
410 NEEDBITS(this.bits + 3); 410 NEEDBITS(here.bits + 3);
411 DROPBITS(this.bits); 411 DROPBITS(here.bits);
412 len = 0; 412 len = 0;
413 copy = 3 + BITS(3); 413 copy = 3 + BITS(3);
414 DROPBITS(3); 414 DROPBITS(3);
415 } 415 }
416 else { 416 else {
417 NEEDBITS(this.bits + 7); 417 NEEDBITS(here.bits + 7);
418 DROPBITS(this.bits); 418 DROPBITS(here.bits);
419 len = 0; 419 len = 0;
420 copy = 11 + BITS(7); 420 copy = 11 + BITS(7);
421 DROPBITS(7); 421 DROPBITS(7);
@@ -460,28 +460,28 @@ void FAR *out_desc;
460 case LEN: 460 case LEN:
461 /* get a literal, length, or end-of-block code */ 461 /* get a literal, length, or end-of-block code */
462 for (;;) { 462 for (;;) {
463 this = lencode[BITS(lenbits)]; 463 here = lencode[BITS(lenbits)];
464 if ((unsigned)(this.bits) <= bits) break; 464 if ((unsigned)(here.bits) <= bits) break;
465 PULLBYTE(); 465 PULLBYTE();
466 } 466 }
467 if (this.op && (this.op & 0xf0) == 0) { 467 if (here.op && (here.op & 0xf0) == 0) {
468 last = this; 468 last = here;
469 for (;;) { 469 for (;;) {
470 this = lencode[last.val + 470 here = lencode[last.val +
471 (BITS(last.bits + last.op) >> last.bits)]; 471 (BITS(last.bits + last.op) >> last.bits)];
472 if ((unsigned)(last.bits + this.bits) <= bits) break; 472 if ((unsigned)(last.bits + here.bits) <= bits) break;
473 PULLBYTE(); 473 PULLBYTE();
474 } 474 }
475 DROPBITS(last.bits); 475 DROPBITS(last.bits);
476 } 476 }
477 DROPBITS(this.bits); 477 DROPBITS(here.bits);
478 length = (unsigned)this.val; 478 length = (unsigned)here.val;
479 479
480 /* process literal */ 480 /* process literal */
481 if (this.op == 0) { 481 if (here.op == 0) {
482 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? 482 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
483 "inflate: literal '%c'\n" : 483 "inflate: literal '%c'\n" :
484 "inflate: literal 0x%02x\n", this.val)); 484 "inflate: literal 0x%02x\n", here.val));
485 ROOM(); 485 ROOM();
486 *put++ = (unsigned char)(length); 486 *put++ = (unsigned char)(length);
487 left--; 487 left--;
@@ -490,21 +490,21 @@ void FAR *out_desc;
490 } 490 }
491 491
492 /* process end of block */ 492 /* process end of block */
493 if (this.op & 32) { 493 if (here.op & 32) {
494 Tracevv((stderr, "inflate: end of block\n")); 494 Tracevv((stderr, "inflate: end of block\n"));
495 mode = TYPE; 495 mode = TYPE;
496 break; 496 break;
497 } 497 }
498 498
499 /* invalid code */ 499 /* invalid code */
500 if (this.op & 64) { 500 if (here.op & 64) {
501 strm->msg = (char *)"invalid literal/length code"; 501 strm->msg = (char *)"invalid literal/length code";
502 mode = BAD; 502 mode = BAD;
503 break; 503 break;
504 } 504 }
505 505
506 /* length code -- get extra bits, if any */ 506 /* length code -- get extra bits, if any */
507 extra = (unsigned)(this.op) & 31; 507 extra = (unsigned)(here.op) & 31;
508 if (extra != 0) { 508 if (extra != 0) {
509 NEEDBITS(extra); 509 NEEDBITS(extra);
510 length += BITS(extra); 510 length += BITS(extra);
@@ -514,30 +514,30 @@ void FAR *out_desc;
514 514
515 /* get distance code */ 515 /* get distance code */
516 for (;;) { 516 for (;;) {
517 this = distcode[BITS(distbits)]; 517 here = distcode[BITS(distbits)];
518 if ((unsigned)(this.bits) <= bits) break; 518 if ((unsigned)(here.bits) <= bits) break;
519 PULLBYTE(); 519 PULLBYTE();
520 } 520 }
521 if ((this.op & 0xf0) == 0) { 521 if ((here.op & 0xf0) == 0) {
522 last = this; 522 last = here;
523 for (;;) { 523 for (;;) {
524 this = distcode[last.val + 524 here = distcode[last.val +
525 (BITS(last.bits + last.op) >> last.bits)]; 525 (BITS(last.bits + last.op) >> last.bits)];
526 if ((unsigned)(last.bits + this.bits) <= bits) break; 526 if ((unsigned)(last.bits + here.bits) <= bits) break;
527 PULLBYTE(); 527 PULLBYTE();
528 } 528 }
529 DROPBITS(last.bits); 529 DROPBITS(last.bits);
530 } 530 }
531 DROPBITS(this.bits); 531 DROPBITS(here.bits);
532 if (this.op & 64) { 532 if (here.op & 64) {
533 strm->msg = (char *)"invalid distance code"; 533 strm->msg = (char *)"invalid distance code";
534 mode = BAD; 534 mode = BAD;
535 break; 535 break;
536 } 536 }
537 offset = (unsigned)this.val; 537 offset = (unsigned)here.val;
538 538
539 /* get distance extra bits, if any */ 539 /* get distance extra bits, if any */
540 extra = (unsigned)(this.op) & 15; 540 extra = (unsigned)(here.op) & 15;
541 if (extra != 0) { 541 if (extra != 0) {
542 NEEDBITS(extra); 542 NEEDBITS(extra);
543 offset += BITS(extra); 543 offset += BITS(extra);
diff --git a/contrib/infback9/inftree9.c b/contrib/infback9/inftree9.c
index dede93b..c24302b 100644
--- a/contrib/infback9/inftree9.c
+++ b/contrib/infback9/inftree9.c
@@ -9,7 +9,7 @@
9#define MAXBITS 15 9#define MAXBITS 15
10 10
11const char inflate9_copyright[] = 11const char inflate9_copyright[] =
12 " inflate9 1.2.3.2 Copyright 1995-2006 Mark Adler "; 12 " inflate9 1.2.3.3 Copyright 1995-2006 Mark Adler ";
13/* 13/*
14 If you use the zlib library in a product, an acknowledgment is welcome 14 If you use the zlib library in a product, an acknowledgment is welcome
15 in the documentation of your product. If for some reason you cannot 15 in the documentation of your product. If for some reason you cannot
@@ -64,7 +64,7 @@ unsigned short FAR *work;
64 static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 64 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
65 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 65 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
66 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, 66 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
67 133, 133, 133, 133, 144, 192, 204}; 67 133, 133, 133, 133, 144, 201, 203};
68 static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ 68 static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
69 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 69 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
70 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 70 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
diff --git a/contrib/vstudio/vc7/zlib.rc b/contrib/vstudio/vc7/zlib.rc
index 71d827b..39eca7e 100644
--- a/contrib/vstudio/vc7/zlib.rc
+++ b/contrib/vstudio/vc7/zlib.rc
@@ -2,8 +2,8 @@
2 2
3#define IDR_VERSION1 1 3#define IDR_VERSION1 1
4IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE 4IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1,2,3,2 5 FILEVERSION 1,2,3,3
6 PRODUCTVERSION 1,2,3,2 6 PRODUCTVERSION 1,2,3,3
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK 7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0 8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32 9 FILEOS VOS_DOS_WINDOWS32
@@ -17,7 +17,7 @@ BEGIN
17 17
18 BEGIN 18 BEGIN
19 VALUE "FileDescription", "zlib data compression library\0" 19 VALUE "FileDescription", "zlib data compression library\0"
20 VALUE "FileVersion", "1.2.3.2\0" 20 VALUE "FileVersion", "1.2.3.3\0"
21 VALUE "InternalName", "zlib\0" 21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlib.dll\0" 22 VALUE "OriginalFilename", "zlib.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0" 23 VALUE "ProductName", "ZLib.DLL\0"
diff --git a/crc32.c b/crc32.c
index f658a9e..b34a510 100644
--- a/crc32.c
+++ b/crc32.c
@@ -1,5 +1,5 @@
1/* crc32.c -- compute the CRC-32 of a data stream 1/* crc32.c -- compute the CRC-32 of a data stream
2 * Copyright (C) 1995-2005 Mark Adler 2 * Copyright (C) 1995-2006 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 * 4 *
5 * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster 5 * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
@@ -68,6 +68,12 @@
68local unsigned long gf2_matrix_times OF((unsigned long *mat, 68local unsigned long gf2_matrix_times OF((unsigned long *mat,
69 unsigned long vec)); 69 unsigned long vec));
70local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); 70local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
71#ifdef _LARGEFILE64_SOURCE
72 local uLong crc32_combine_(uLong crc1, uLong crc2, off64_t len2);
73#else
74 local uLong crc32_combine_(uLong crc1, uLong crc2, z_off_t len2);
75#endif
76
71 77
72#ifdef DYNAMIC_CRC_TABLE 78#ifdef DYNAMIC_CRC_TABLE
73 79
@@ -367,10 +373,14 @@ local void gf2_matrix_square(square, mat)
367} 373}
368 374
369/* ========================================================================= */ 375/* ========================================================================= */
370uLong ZEXPORT crc32_combine(crc1, crc2, len2) 376local uLong crc32_combine_(crc1, crc2, len2)
371 uLong crc1; 377 uLong crc1;
372 uLong crc2; 378 uLong crc2;
379#ifdef _LARGEFILE64_SOURCE
380 off64_t len2;
381#else
373 z_off_t len2; 382 z_off_t len2;
383#endif
374{ 384{
375 int n; 385 int n;
376 unsigned long row; 386 unsigned long row;
@@ -421,3 +431,30 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2)
421 crc1 ^= crc2; 431 crc1 ^= crc2;
422 return crc1; 432 return crc1;
423} 433}
434
435/* ========================================================================= */
436uLong ZEXPORT crc32_combine(crc1, crc2, len2)
437 uLong crc1;
438 uLong crc2;
439 z_off_t len2;
440{
441 return crc32_combine_(crc1, crc2, len2);
442}
443
444#ifdef _LARGEFILE64_SOURCE
445uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
446 uLong crc1;
447 uLong crc2;
448 off64_t len2;
449{
450 return crc32_combine_(crc1, crc2, len2);
451}
452#else
453uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
454 uLong crc1;
455 uLong crc2;
456 z_off_t len2;
457{
458 return crc32_combine_(crc1, crc2, len2);
459}
460#endif
diff --git a/deflate.c b/deflate.c
index 181159e..fc41b80 100644
--- a/deflate.c
+++ b/deflate.c
@@ -52,7 +52,7 @@
52#include "deflate.h" 52#include "deflate.h"
53 53
54const char deflate_copyright[] = 54const char deflate_copyright[] =
55 " deflate 1.2.3.2 Copyright 1995-2006 Jean-loup Gailly "; 55 " deflate 1.2.3.3 Copyright 1995-2006 Jean-loup Gailly ";
56/* 56/*
57 If you use the zlib library in a product, an acknowledgment is welcome 57 If you use the zlib library in a product, an acknowledgment is welcome
58 in the documentation of your product. If for some reason you cannot 58 in the documentation of your product. If for some reason you cannot
diff --git a/gzio.c b/gzio.c
index a8130ef..df34620 100644
--- a/gzio.c
+++ b/gzio.c
@@ -7,6 +7,15 @@
7 7
8/* @(#) $Id$ */ 8/* @(#) $Id$ */
9 9
10#ifdef _LARGEFILE64_SOURCE
11# ifndef _LARGEFILE_SOURCE
12# define _LARGEFILE_SOURCE
13# endif
14# ifdef _FILE_OFFSET_BITS
15# undef _FILE_OFFSET_BITS
16# endif
17#endif
18
10#include "zutil.h" 19#include "zutil.h"
11#include <stdio.h> 20#include <stdio.h>
12 21
@@ -39,6 +48,14 @@ extern voidp malloc OF((uInt size));
39extern void free OF((voidpf ptr)); 48extern void free OF((voidpf ptr));
40#endif 49#endif
41 50
51#ifdef NO_FSEEKO
52# define FSEEK fseek
53# define FTELL ftell
54#else
55# define FSEEK fseeko
56# define FTELL ftello
57#endif
58
42#define ALLOC(size) malloc(size) 59#define ALLOC(size) malloc(size)
43#define TRYFREE(p) {if (p) free(p);} 60#define TRYFREE(p) {if (p) free(p);}
44 61
@@ -64,15 +81,27 @@ typedef struct gz_stream {
64 char *path; /* path name for debugging only */ 81 char *path; /* path name for debugging only */
65 int transparent; /* 1 if input file is not a .gz file */ 82 int transparent; /* 1 if input file is not a .gz file */
66 char mode; /* 'w' or 'r' */ 83 char mode; /* 'w' or 'r' */
84#ifdef _LARGEFILE64_SOURCE
85 off64_t start; /* start of compressed data in file (header skipped) */
86 off64_t in; /* bytes into deflate or inflate */
87 off64_t out; /* bytes out of deflate or inflate */
88#else
67 z_off_t start; /* start of compressed data in file (header skipped) */ 89 z_off_t start; /* start of compressed data in file (header skipped) */
68 z_off_t in; /* bytes into deflate or inflate */ 90 z_off_t in; /* bytes into deflate or inflate */
69 z_off_t out; /* bytes out of deflate or inflate */ 91 z_off_t out; /* bytes out of deflate or inflate */
92#endif
70 int back; /* one character push-back */ 93 int back; /* one character push-back */
71 int last; /* true if push-back is last character */ 94 int last; /* true if push-back is last character */
72} gz_stream; 95} gz_stream;
73 96
74 97
75local gzFile gz_open OF((const char *path, const char *mode, int fd)); 98local gzFile gz_open OF((const char *path, const char *mode, int fd,
99 int use64));
100#ifdef _LARGEFILE64_SOURCE
101local off64_t gz_seek OF((gzFile file, off64_t offset, int whence, int use64));
102#else
103local z_off_t gz_seek OF((gzFile file, z_off_t offset, int whence, int use64));
104#endif
76local int do_flush OF((gzFile file, int flush)); 105local int do_flush OF((gzFile file, int flush));
77local int get_byte OF((gz_stream *s)); 106local int get_byte OF((gz_stream *s));
78local void check_header OF((gz_stream *s)); 107local void check_header OF((gz_stream *s));
@@ -89,10 +118,11 @@ local uLong getLong OF((gz_stream *s));
89 can be checked to distinguish the two cases (if errno is zero, the 118 can be checked to distinguish the two cases (if errno is zero, the
90 zlib error is Z_MEM_ERROR). 119 zlib error is Z_MEM_ERROR).
91*/ 120*/
92local gzFile gz_open (path, mode, fd) 121local gzFile gz_open (path, mode, fd, use64)
93 const char *path; 122 const char *path;
94 const char *mode; 123 const char *mode;
95 int fd; 124 int fd;
125 int use64;
96{ 126{
97 int err; 127 int err;
98 int level = Z_DEFAULT_COMPRESSION; /* compression level */ 128 int level = Z_DEFAULT_COMPRESSION; /* compression level */
@@ -164,12 +194,7 @@ local gzFile gz_open (path, mode, fd)
164 s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); 194 s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);
165 195
166 err = inflateInit2(&(s->stream), -MAX_WBITS); 196 err = inflateInit2(&(s->stream), -MAX_WBITS);
167 /* windowBits is passed < 0 to tell that there is no zlib header. 197 /* windowBits is passed < 0 to tell that there is no zlib header */
168 * Note that in this case inflate *requires* an extra "dummy" byte
169 * after the compressed stream in order to complete decompression and
170 * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are
171 * present after the compressed stream.
172 */
173 if (err != Z_OK || s->inbuf == Z_NULL) { 198 if (err != Z_OK || s->inbuf == Z_NULL) {
174 return destroy(s), (gzFile)Z_NULL; 199 return destroy(s), (gzFile)Z_NULL;
175 } 200 }
@@ -177,7 +202,8 @@ local gzFile gz_open (path, mode, fd)
177 s->stream.avail_out = Z_BUFSIZE; 202 s->stream.avail_out = Z_BUFSIZE;
178 203
179 errno = 0; 204 errno = 0;
180 s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); 205 s->file = fd < 0 ? (use64 ? F_OPEN64(path, fmode) : F_OPEN(path, fmode)) :
206 (FILE*)fdopen(fd, fmode);
181 207
182 if (s->file == NULL) { 208 if (s->file == NULL) {
183 return destroy(s), (gzFile)Z_NULL; 209 return destroy(s), (gzFile)Z_NULL;
@@ -198,7 +224,7 @@ local gzFile gz_open (path, mode, fd)
198 */ 224 */
199 } else { 225 } else {
200 check_header(s); /* skip the .gz header */ 226 check_header(s); /* skip the .gz header */
201 s->start = ftell(s->file) - s->stream.avail_in; 227 s->start = FTELL(s->file) - s->stream.avail_in;
202 } 228 }
203 229
204 return (gzFile)s; 230 return (gzFile)s;
@@ -211,7 +237,17 @@ gzFile ZEXPORT gzopen (path, mode)
211 const char *path; 237 const char *path;
212 const char *mode; 238 const char *mode;
213{ 239{
214 return gz_open (path, mode, -1); 240 return gz_open (path, mode, -1, 0);
241}
242
243/* ===========================================================================
244 Opens a gzip (.gz) file for reading or writing for 64-bit offsets
245*/
246gzFile ZEXPORT gzopen64 (path, mode)
247 const char *path;
248 const char *mode;
249{
250 return gz_open (path, mode, -1, 1);
215} 251}
216 252
217/* =========================================================================== 253/* ===========================================================================
@@ -227,7 +263,7 @@ gzFile ZEXPORT gzdopen (fd, mode)
227 if (fd < 0) return (gzFile)Z_NULL; 263 if (fd < 0) return (gzFile)Z_NULL;
228 sprintf(name, "<fd:%d>", fd); /* for debugging */ 264 sprintf(name, "<fd:%d>", fd); /* for debugging */
229 265
230 return gz_open (name, mode, fd); 266 return gz_open (name, mode, fd, 0);
231} 267}
232 268
233/* =========================================================================== 269/* ===========================================================================
@@ -767,10 +803,17 @@ int ZEXPORT gzflush (file, flush)
767 SEEK_END is not implemented, returns error. 803 SEEK_END is not implemented, returns error.
768 In this version of the library, gzseek can be extremely slow. 804 In this version of the library, gzseek can be extremely slow.
769*/ 805*/
770z_off_t ZEXPORT gzseek (file, offset, whence) 806#ifdef _LARGEFILE64_SOURCE
807local off64_t gz_seek (file, offset, whence, use64)
808 gzFile file;
809 off64_t offset;
810#else
811local z_off_t gz_seek (file, offset, whence, use64)
771 gzFile file; 812 gzFile file;
772 z_off_t offset; 813 z_off_t offset;
814#endif
773 int whence; 815 int whence;
816 int use64;
774{ 817{
775 gz_stream *s = (gz_stream*)file; 818 gz_stream *s = (gz_stream*)file;
776 819
@@ -819,7 +862,13 @@ z_off_t ZEXPORT gzseek (file, offset, whence)
819 s->back = EOF; 862 s->back = EOF;
820 s->stream.avail_in = 0; 863 s->stream.avail_in = 0;
821 s->stream.next_in = s->inbuf; 864 s->stream.next_in = s->inbuf;
822 if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; 865#ifdef _LARGEFILE64_SOURCE
866 if ((use64 ? fseeko64(s->file, offset, SEEK_SET) :
867 FSEEK(s->file, offset, SEEK_SET)) < 0)
868 return -1L;
869#else
870 if (FSEEK(s->file, offset, SEEK_SET) < 0) return -1L;
871#endif
823 872
824 s->in = s->out = offset; 873 s->in = s->out = offset;
825 return offset; 874 return offset;
@@ -855,6 +904,35 @@ z_off_t ZEXPORT gzseek (file, offset, whence)
855} 904}
856 905
857/* =========================================================================== 906/* ===========================================================================
907 Define external functions gzseek() and gzseek64() using local gz_seek().
908*/
909z_off_t ZEXPORT gzseek (file, offset, whence)
910 gzFile file;
911 z_off_t offset;
912 int whence;
913{
914 return (z_off_t)gz_seek(file, offset, whence, 0);
915}
916
917#ifdef _LARGEFILE64_SOURCE
918off64_t ZEXPORT gzseek64 (file, offset, whence)
919 gzFile file;
920 off64_t offset;
921 int whence;
922{
923 return gz_seek(file, offset, whence, 1);
924}
925#else
926z_off_t ZEXPORT gzseek64 (file, offset, whence)
927 gzFile file;
928 z_off_t offset;
929 int whence;
930{
931 return gz_seek(file, offset, whence, 0);
932}
933#endif
934
935/* ===========================================================================
858 Rewinds input file. 936 Rewinds input file.
859*/ 937*/
860int ZEXPORT gzrewind (file) 938int ZEXPORT gzrewind (file)
@@ -873,7 +951,7 @@ int ZEXPORT gzrewind (file)
873 if (!s->transparent) (void)inflateReset(&s->stream); 951 if (!s->transparent) (void)inflateReset(&s->stream);
874 s->in = 0; 952 s->in = 0;
875 s->out = 0; 953 s->out = 0;
876 return fseek(s->file, s->start, SEEK_SET); 954 return FSEEK(s->file, s->start, SEEK_SET);
877} 955}
878 956
879/* =========================================================================== 957/* ===========================================================================
@@ -888,6 +966,19 @@ z_off_t ZEXPORT gztell (file)
888} 966}
889 967
890/* =========================================================================== 968/* ===========================================================================
969 64-bit version
970*/
971#ifdef _LARGEFILE64_SOURCE
972off64_t ZEXPORT gztell64 (file)
973#else
974z_off_t ZEXPORT gztell64 (file)
975#endif
976 gzFile file;
977{
978 return gzseek64(file, 0L, SEEK_CUR);
979}
980
981/* ===========================================================================
891 Returns 1 when EOF has previously been detected reading the given 982 Returns 1 when EOF has previously been detected reading the given
892 input stream, otherwise zero. 983 input stream, otherwise zero.
893*/ 984*/
diff --git a/infback.c b/infback.c
index 455dbc9..be0b3dc 100644
--- a/infback.c
+++ b/infback.c
@@ -1,5 +1,5 @@
1/* infback.c -- inflate using a call-back interface 1/* infback.c -- inflate using a call-back interface
2 * Copyright (C) 1995-2005 Mark Adler 2 * Copyright (C) 1995-2006 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */ 4 */
5 5
@@ -253,7 +253,7 @@ void FAR *out_desc;
253 unsigned bits; /* bits in bit buffer */ 253 unsigned bits; /* bits in bit buffer */
254 unsigned copy; /* number of stored or match bytes to copy */ 254 unsigned copy; /* number of stored or match bytes to copy */
255 unsigned char FAR *from; /* where to copy match bytes from */ 255 unsigned char FAR *from; /* where to copy match bytes from */
256 code this; /* current decoding table entry */ 256 code here; /* current decoding table entry */
257 code last; /* parent table entry */ 257 code last; /* parent table entry */
258 unsigned len; /* length to copy for repeats, bits to drop */ 258 unsigned len; /* length to copy for repeats, bits to drop */
259 int ret; /* return code */ 259 int ret; /* return code */
@@ -389,19 +389,19 @@ void FAR *out_desc;
389 state->have = 0; 389 state->have = 0;
390 while (state->have < state->nlen + state->ndist) { 390 while (state->have < state->nlen + state->ndist) {
391 for (;;) { 391 for (;;) {
392 this = state->lencode[BITS(state->lenbits)]; 392 here = state->lencode[BITS(state->lenbits)];
393 if ((unsigned)(this.bits) <= bits) break; 393 if ((unsigned)(here.bits) <= bits) break;
394 PULLBYTE(); 394 PULLBYTE();
395 } 395 }
396 if (this.val < 16) { 396 if (here.val < 16) {
397 NEEDBITS(this.bits); 397 NEEDBITS(here.bits);
398 DROPBITS(this.bits); 398 DROPBITS(here.bits);
399 state->lens[state->have++] = this.val; 399 state->lens[state->have++] = here.val;
400 } 400 }
401 else { 401 else {
402 if (this.val == 16) { 402 if (here.val == 16) {
403 NEEDBITS(this.bits + 2); 403 NEEDBITS(here.bits + 2);
404 DROPBITS(this.bits); 404 DROPBITS(here.bits);
405 if (state->have == 0) { 405 if (state->have == 0) {
406 strm->msg = (char *)"invalid bit length repeat"; 406 strm->msg = (char *)"invalid bit length repeat";
407 state->mode = BAD; 407 state->mode = BAD;
@@ -411,16 +411,16 @@ void FAR *out_desc;
411 copy = 3 + BITS(2); 411 copy = 3 + BITS(2);
412 DROPBITS(2); 412 DROPBITS(2);
413 } 413 }
414 else if (this.val == 17) { 414 else if (here.val == 17) {
415 NEEDBITS(this.bits + 3); 415 NEEDBITS(here.bits + 3);
416 DROPBITS(this.bits); 416 DROPBITS(here.bits);
417 len = 0; 417 len = 0;
418 copy = 3 + BITS(3); 418 copy = 3 + BITS(3);
419 DROPBITS(3); 419 DROPBITS(3);
420 } 420 }
421 else { 421 else {
422 NEEDBITS(this.bits + 7); 422 NEEDBITS(here.bits + 7);
423 DROPBITS(this.bits); 423 DROPBITS(here.bits);
424 len = 0; 424 len = 0;
425 copy = 11 + BITS(7); 425 copy = 11 + BITS(7);
426 DROPBITS(7); 426 DROPBITS(7);
@@ -474,28 +474,28 @@ void FAR *out_desc;
474 474
475 /* get a literal, length, or end-of-block code */ 475 /* get a literal, length, or end-of-block code */
476 for (;;) { 476 for (;;) {
477 this = state->lencode[BITS(state->lenbits)]; 477 here = state->lencode[BITS(state->lenbits)];
478 if ((unsigned)(this.bits) <= bits) break; 478 if ((unsigned)(here.bits) <= bits) break;
479 PULLBYTE(); 479 PULLBYTE();
480 } 480 }
481 if (this.op && (this.op & 0xf0) == 0) { 481 if (here.op && (here.op & 0xf0) == 0) {
482 last = this; 482 last = here;
483 for (;;) { 483 for (;;) {
484 this = state->lencode[last.val + 484 here = state->lencode[last.val +
485 (BITS(last.bits + last.op) >> last.bits)]; 485 (BITS(last.bits + last.op) >> last.bits)];
486 if ((unsigned)(last.bits + this.bits) <= bits) break; 486 if ((unsigned)(last.bits + here.bits) <= bits) break;
487 PULLBYTE(); 487 PULLBYTE();
488 } 488 }
489 DROPBITS(last.bits); 489 DROPBITS(last.bits);
490 } 490 }
491 DROPBITS(this.bits); 491 DROPBITS(here.bits);
492 state->length = (unsigned)this.val; 492 state->length = (unsigned)here.val;
493 493
494 /* process literal */ 494 /* process literal */
495 if (this.op == 0) { 495 if (here.op == 0) {
496 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? 496 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
497 "inflate: literal '%c'\n" : 497 "inflate: literal '%c'\n" :
498 "inflate: literal 0x%02x\n", this.val)); 498 "inflate: literal 0x%02x\n", here.val));
499 ROOM(); 499 ROOM();
500 *put++ = (unsigned char)(state->length); 500 *put++ = (unsigned char)(state->length);
501 left--; 501 left--;
@@ -504,21 +504,21 @@ void FAR *out_desc;
504 } 504 }
505 505
506 /* process end of block */ 506 /* process end of block */
507 if (this.op & 32) { 507 if (here.op & 32) {
508 Tracevv((stderr, "inflate: end of block\n")); 508 Tracevv((stderr, "inflate: end of block\n"));
509 state->mode = TYPE; 509 state->mode = TYPE;
510 break; 510 break;
511 } 511 }
512 512
513 /* invalid code */ 513 /* invalid code */
514 if (this.op & 64) { 514 if (here.op & 64) {
515 strm->msg = (char *)"invalid literal/length code"; 515 strm->msg = (char *)"invalid literal/length code";
516 state->mode = BAD; 516 state->mode = BAD;
517 break; 517 break;
518 } 518 }
519 519
520 /* length code -- get extra bits, if any */ 520 /* length code -- get extra bits, if any */
521 state->extra = (unsigned)(this.op) & 15; 521 state->extra = (unsigned)(here.op) & 15;
522 if (state->extra != 0) { 522 if (state->extra != 0) {
523 NEEDBITS(state->extra); 523 NEEDBITS(state->extra);
524 state->length += BITS(state->extra); 524 state->length += BITS(state->extra);
@@ -528,30 +528,30 @@ void FAR *out_desc;
528 528
529 /* get distance code */ 529 /* get distance code */
530 for (;;) { 530 for (;;) {
531 this = state->distcode[BITS(state->distbits)]; 531 here = state->distcode[BITS(state->distbits)];
532 if ((unsigned)(this.bits) <= bits) break; 532 if ((unsigned)(here.bits) <= bits) break;
533 PULLBYTE(); 533 PULLBYTE();
534 } 534 }
535 if ((this.op & 0xf0) == 0) { 535 if ((here.op & 0xf0) == 0) {
536 last = this; 536 last = here;
537 for (;;) { 537 for (;;) {
538 this = state->distcode[last.val + 538 here = state->distcode[last.val +
539 (BITS(last.bits + last.op) >> last.bits)]; 539 (BITS(last.bits + last.op) >> last.bits)];
540 if ((unsigned)(last.bits + this.bits) <= bits) break; 540 if ((unsigned)(last.bits + here.bits) <= bits) break;
541 PULLBYTE(); 541 PULLBYTE();
542 } 542 }
543 DROPBITS(last.bits); 543 DROPBITS(last.bits);
544 } 544 }
545 DROPBITS(this.bits); 545 DROPBITS(here.bits);
546 if (this.op & 64) { 546 if (here.op & 64) {
547 strm->msg = (char *)"invalid distance code"; 547 strm->msg = (char *)"invalid distance code";
548 state->mode = BAD; 548 state->mode = BAD;
549 break; 549 break;
550 } 550 }
551 state->offset = (unsigned)this.val; 551 state->offset = (unsigned)here.val;
552 552
553 /* get distance extra bits, if any */ 553 /* get distance extra bits, if any */
554 state->extra = (unsigned)(this.op) & 15; 554 state->extra = (unsigned)(here.op) & 15;
555 if (state->extra != 0) { 555 if (state->extra != 0) {
556 NEEDBITS(state->extra); 556 NEEDBITS(state->extra);
557 state->offset += BITS(state->extra); 557 state->offset += BITS(state->extra);
diff --git a/inffast.c b/inffast.c
index bbee92e..0b919bb 100644
--- a/inffast.c
+++ b/inffast.c
@@ -1,5 +1,5 @@
1/* inffast.c -- fast decoding 1/* inffast.c -- fast decoding
2 * Copyright (C) 1995-2004 Mark Adler 2 * Copyright (C) 1995-2006 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */ 4 */
5 5
@@ -87,7 +87,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
87 code const FAR *dcode; /* local strm->distcode */ 87 code const FAR *dcode; /* local strm->distcode */
88 unsigned lmask; /* mask for first level of length codes */ 88 unsigned lmask; /* mask for first level of length codes */
89 unsigned dmask; /* mask for first level of distance codes */ 89 unsigned dmask; /* mask for first level of distance codes */
90 code this; /* retrieved table entry */ 90 code here; /* retrieved table entry */
91 unsigned op; /* code bits, operation, extra bits, or */ 91 unsigned op; /* code bits, operation, extra bits, or */
92 /* window position, window bytes to copy */ 92 /* window position, window bytes to copy */
93 unsigned len; /* match length, unused bytes */ 93 unsigned len; /* match length, unused bytes */
@@ -124,20 +124,20 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
124 hold += (unsigned long)(PUP(in)) << bits; 124 hold += (unsigned long)(PUP(in)) << bits;
125 bits += 8; 125 bits += 8;
126 } 126 }
127 this = lcode[hold & lmask]; 127 here = lcode[hold & lmask];
128 dolen: 128 dolen:
129 op = (unsigned)(this.bits); 129 op = (unsigned)(here.bits);
130 hold >>= op; 130 hold >>= op;
131 bits -= op; 131 bits -= op;
132 op = (unsigned)(this.op); 132 op = (unsigned)(here.op);
133 if (op == 0) { /* literal */ 133 if (op == 0) { /* literal */
134 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? 134 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
135 "inflate: literal '%c'\n" : 135 "inflate: literal '%c'\n" :
136 "inflate: literal 0x%02x\n", this.val)); 136 "inflate: literal 0x%02x\n", here.val));
137 PUP(out) = (unsigned char)(this.val); 137 PUP(out) = (unsigned char)(here.val);
138 } 138 }
139 else if (op & 16) { /* length base */ 139 else if (op & 16) { /* length base */
140 len = (unsigned)(this.val); 140 len = (unsigned)(here.val);
141 op &= 15; /* number of extra bits */ 141 op &= 15; /* number of extra bits */
142 if (op) { 142 if (op) {
143 if (bits < op) { 143 if (bits < op) {
@@ -155,14 +155,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
155 hold += (unsigned long)(PUP(in)) << bits; 155 hold += (unsigned long)(PUP(in)) << bits;
156 bits += 8; 156 bits += 8;
157 } 157 }
158 this = dcode[hold & dmask]; 158 here = dcode[hold & dmask];
159 dodist: 159 dodist:
160 op = (unsigned)(this.bits); 160 op = (unsigned)(here.bits);
161 hold >>= op; 161 hold >>= op;
162 bits -= op; 162 bits -= op;
163 op = (unsigned)(this.op); 163 op = (unsigned)(here.op);
164 if (op & 16) { /* distance base */ 164 if (op & 16) { /* distance base */
165 dist = (unsigned)(this.val); 165 dist = (unsigned)(here.val);
166 op &= 15; /* number of extra bits */ 166 op &= 15; /* number of extra bits */
167 if (bits < op) { 167 if (bits < op) {
168 hold += (unsigned long)(PUP(in)) << bits; 168 hold += (unsigned long)(PUP(in)) << bits;
@@ -187,9 +187,30 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
187 if (dist > op) { /* see if copy from window */ 187 if (dist > op) { /* see if copy from window */
188 op = dist - op; /* distance back in window */ 188 op = dist - op; /* distance back in window */
189 if (op > whave) { 189 if (op > whave) {
190 strm->msg = (char *)"invalid distance too far back"; 190 if (state->sane) {
191 state->mode = BAD; 191 strm->msg = (char *)"invalid distance too far back";
192 break; 192 state->mode = BAD;
193 break;
194 }
195#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
196 if (len <= op - whave) {
197 do {
198 PUP(out) = 0;
199 } while (--len);
200 continue;
201 }
202 len -= op - whave;
203 do {
204 PUP(out) = 0;
205 } while (--op > whave);
206 if (op == 0) {
207 from = out - dist;
208 do {
209 PUP(out) = PUP(from);
210 } while (--len);
211 continue;
212 }
213#endif
193 } 214 }
194 from = window - OFF; 215 from = window - OFF;
195 if (write == 0) { /* very common case */ 216 if (write == 0) { /* very common case */
@@ -259,7 +280,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
259 } 280 }
260 } 281 }
261 else if ((op & 64) == 0) { /* 2nd level distance code */ 282 else if ((op & 64) == 0) { /* 2nd level distance code */
262 this = dcode[this.val + (hold & ((1U << op) - 1))]; 283 here = dcode[here.val + (hold & ((1U << op) - 1))];
263 goto dodist; 284 goto dodist;
264 } 285 }
265 else { 286 else {
@@ -269,7 +290,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
269 } 290 }
270 } 291 }
271 else if ((op & 64) == 0) { /* 2nd level length code */ 292 else if ((op & 64) == 0) { /* 2nd level length code */
272 this = lcode[this.val + (hold & ((1U << op) - 1))]; 293 here = lcode[here.val + (hold & ((1U << op) - 1))];
273 goto dolen; 294 goto dolen;
274 } 295 }
275 else if (op & 32) { /* end-of-block */ 296 else if (op & 32) { /* end-of-block */
diff --git a/inflate.c b/inflate.c
index 792fdee..d3c718c 100644
--- a/inflate.c
+++ b/inflate.c
@@ -1,5 +1,5 @@
1/* inflate.c -- zlib decompression 1/* inflate.c -- zlib decompression
2 * Copyright (C) 1995-2005 Mark Adler 2 * Copyright (C) 1995-2006 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h 3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */ 4 */
5 5
@@ -121,6 +121,7 @@ z_streamp strm;
121 state->hold = 0; 121 state->hold = 0;
122 state->bits = 0; 122 state->bits = 0;
123 state->lencode = state->distcode = state->next = state->codes; 123 state->lencode = state->distcode = state->next = state->codes;
124 state->sane = 1;
124 Tracev((stderr, "inflate: reset\n")); 125 Tracev((stderr, "inflate: reset\n"));
125 return Z_OK; 126 return Z_OK;
126} 127}
@@ -564,7 +565,7 @@ int flush;
564 unsigned in, out; /* save starting available input and output */ 565 unsigned in, out; /* save starting available input and output */
565 unsigned copy; /* number of stored or match bytes to copy */ 566 unsigned copy; /* number of stored or match bytes to copy */
566 unsigned char FAR *from; /* where to copy match bytes from */ 567 unsigned char FAR *from; /* where to copy match bytes from */
567 code this; /* current decoding table entry */ 568 code here; /* current decoding table entry */
568 code last; /* parent table entry */ 569 code last; /* parent table entry */
569 unsigned len; /* length to copy for repeats, bits to drop */ 570 unsigned len; /* length to copy for repeats, bits to drop */
570 int ret; /* return code */ 571 int ret; /* return code */
@@ -876,19 +877,19 @@ int flush;
876 case CODELENS: 877 case CODELENS:
877 while (state->have < state->nlen + state->ndist) { 878 while (state->have < state->nlen + state->ndist) {
878 for (;;) { 879 for (;;) {
879 this = state->lencode[BITS(state->lenbits)]; 880 here = state->lencode[BITS(state->lenbits)];
880 if ((unsigned)(this.bits) <= bits) break; 881 if ((unsigned)(here.bits) <= bits) break;
881 PULLBYTE(); 882 PULLBYTE();
882 } 883 }
883 if (this.val < 16) { 884 if (here.val < 16) {
884 NEEDBITS(this.bits); 885 NEEDBITS(here.bits);
885 DROPBITS(this.bits); 886 DROPBITS(here.bits);
886 state->lens[state->have++] = this.val; 887 state->lens[state->have++] = here.val;
887 } 888 }
888 else { 889 else {
889 if (this.val == 16) { 890 if (here.val == 16) {
890 NEEDBITS(this.bits + 2); 891 NEEDBITS(here.bits + 2);
891 DROPBITS(this.bits); 892 DROPBITS(here.bits);
892 if (state->have == 0) { 893 if (state->have == 0) {
893 strm->msg = (char *)"invalid bit length repeat"; 894 strm->msg = (char *)"invalid bit length repeat";
894 state->mode = BAD; 895 state->mode = BAD;
@@ -898,16 +899,16 @@ int flush;
898 copy = 3 + BITS(2); 899 copy = 3 + BITS(2);
899 DROPBITS(2); 900 DROPBITS(2);
900 } 901 }
901 else if (this.val == 17) { 902 else if (here.val == 17) {
902 NEEDBITS(this.bits + 3); 903 NEEDBITS(here.bits + 3);
903 DROPBITS(this.bits); 904 DROPBITS(here.bits);
904 len = 0; 905 len = 0;
905 copy = 3 + BITS(3); 906 copy = 3 + BITS(3);
906 DROPBITS(3); 907 DROPBITS(3);
907 } 908 }
908 else { 909 else {
909 NEEDBITS(this.bits + 7); 910 NEEDBITS(here.bits + 7);
910 DROPBITS(this.bits); 911 DROPBITS(here.bits);
911 len = 0; 912 len = 0;
912 copy = 11 + BITS(7); 913 copy = 11 + BITS(7);
913 DROPBITS(7); 914 DROPBITS(7);
@@ -955,40 +956,40 @@ int flush;
955 break; 956 break;
956 } 957 }
957 for (;;) { 958 for (;;) {
958 this = state->lencode[BITS(state->lenbits)]; 959 here = state->lencode[BITS(state->lenbits)];
959 if ((unsigned)(this.bits) <= bits) break; 960 if ((unsigned)(here.bits) <= bits) break;
960 PULLBYTE(); 961 PULLBYTE();
961 } 962 }
962 if (this.op && (this.op & 0xf0) == 0) { 963 if (here.op && (here.op & 0xf0) == 0) {
963 last = this; 964 last = here;
964 for (;;) { 965 for (;;) {
965 this = state->lencode[last.val + 966 here = state->lencode[last.val +
966 (BITS(last.bits + last.op) >> last.bits)]; 967 (BITS(last.bits + last.op) >> last.bits)];
967 if ((unsigned)(last.bits + this.bits) <= bits) break; 968 if ((unsigned)(last.bits + here.bits) <= bits) break;
968 PULLBYTE(); 969 PULLBYTE();
969 } 970 }
970 DROPBITS(last.bits); 971 DROPBITS(last.bits);
971 } 972 }
972 DROPBITS(this.bits); 973 DROPBITS(here.bits);
973 state->length = (unsigned)this.val; 974 state->length = (unsigned)here.val;
974 if ((int)(this.op) == 0) { 975 if ((int)(here.op) == 0) {
975 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? 976 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
976 "inflate: literal '%c'\n" : 977 "inflate: literal '%c'\n" :
977 "inflate: literal 0x%02x\n", this.val)); 978 "inflate: literal 0x%02x\n", here.val));
978 state->mode = LIT; 979 state->mode = LIT;
979 break; 980 break;
980 } 981 }
981 if (this.op & 32) { 982 if (here.op & 32) {
982 Tracevv((stderr, "inflate: end of block\n")); 983 Tracevv((stderr, "inflate: end of block\n"));
983 state->mode = TYPE; 984 state->mode = TYPE;
984 break; 985 break;
985 } 986 }
986 if (this.op & 64) { 987 if (here.op & 64) {
987 strm->msg = (char *)"invalid literal/length code"; 988 strm->msg = (char *)"invalid literal/length code";
988 state->mode = BAD; 989 state->mode = BAD;
989 break; 990 break;
990 } 991 }
991 state->extra = (unsigned)(this.op) & 15; 992 state->extra = (unsigned)(here.op) & 15;
992 state->mode = LENEXT; 993 state->mode = LENEXT;
993 case LENEXT: 994 case LENEXT:
994 if (state->extra) { 995 if (state->extra) {
@@ -1000,28 +1001,28 @@ int flush;
1000 state->mode = DIST; 1001 state->mode = DIST;
1001 case DIST: 1002 case DIST:
1002 for (;;) { 1003 for (;;) {
1003 this = state->distcode[BITS(state->distbits)]; 1004 here = state->distcode[BITS(state->distbits)];
1004 if ((unsigned)(this.bits) <= bits) break; 1005 if ((unsigned)(here.bits) <= bits) break;
1005 PULLBYTE(); 1006 PULLBYTE();
1006 } 1007 }
1007 if ((this.op & 0xf0) == 0) { 1008 if ((here.op & 0xf0) == 0) {
1008 last = this; 1009 last = here;
1009 for (;;) { 1010 for (;;) {
1010 this = state->distcode[last.val + 1011 here = state->distcode[last.val +
1011 (BITS(last.bits + last.op) >> last.bits)]; 1012 (BITS(last.bits + last.op) >> last.bits)];
1012 if ((unsigned)(last.bits + this.bits) <= bits) break; 1013 if ((unsigned)(last.bits + here.bits) <= bits) break;
1013 PULLBYTE(); 1014 PULLBYTE();
1014 } 1015 }
1015 DROPBITS(last.bits); 1016 DROPBITS(last.bits);
1016 } 1017 }
1017 DROPBITS(this.bits); 1018 DROPBITS(here.bits);
1018 if (this.op & 64) { 1019 if (here.op & 64) {
1019 strm->msg = (char *)"invalid distance code"; 1020 strm->msg = (char *)"invalid distance code";
1020 state->mode = BAD; 1021 state->mode = BAD;
1021 break; 1022 break;
1022 } 1023 }
1023 state->offset = (unsigned)this.val; 1024 state->offset = (unsigned)here.val;
1024 state->extra = (unsigned)(this.op) & 15; 1025 state->extra = (unsigned)(here.op) & 15;
1025 state->mode = DISTEXT; 1026 state->mode = DISTEXT;
1026 case DISTEXT: 1027 case DISTEXT:
1027 if (state->extra) { 1028 if (state->extra) {
@@ -1036,11 +1037,6 @@ int flush;
1036 break; 1037 break;
1037 } 1038 }
1038#endif 1039#endif
1039 if (state->offset > state->whave + out - left) {
1040 strm->msg = (char *)"invalid distance too far back";
1041 state->mode = BAD;
1042 break;
1043 }
1044 Tracevv((stderr, "inflate: distance %u\n", state->offset)); 1040 Tracevv((stderr, "inflate: distance %u\n", state->offset));
1045 state->mode = MATCH; 1041 state->mode = MATCH;
1046 case MATCH: 1042 case MATCH:
@@ -1048,6 +1044,26 @@ int flush;
1048 copy = out - left; 1044 copy = out - left;
1049 if (state->offset > copy) { /* copy from window */ 1045 if (state->offset > copy) { /* copy from window */
1050 copy = state->offset - copy; 1046 copy = state->offset - copy;
1047 if (copy > state->whave) {
1048 if (state->sane) {
1049 strm->msg = (char *)"invalid distance too far back";
1050 state->mode = BAD;
1051 break;
1052 }
1053#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1054 Trace((stderr, "inflate.c too far\n"));
1055 copy -= state->whave;
1056 if (copy > state->length) copy = state->length;
1057 if (copy > left) copy = left;
1058 left -= copy;
1059 state->length -= copy;
1060 do {
1061 *put++ = 0;
1062 } while (--copy);
1063 if (state->length == 0) state->mode = LEN;
1064 break;
1065#endif
1066 }
1051 if (copy > state->write) { 1067 if (copy > state->write) {
1052 copy -= state->write; 1068 copy -= state->write;
1053 from = state->window + (state->wsize - copy); 1069 from = state->window + (state->wsize - copy);
@@ -1366,3 +1382,20 @@ z_streamp source;
1366 dest->state = (struct internal_state FAR *)copy; 1382 dest->state = (struct internal_state FAR *)copy;
1367 return Z_OK; 1383 return Z_OK;
1368} 1384}
1385
1386int ZEXPORT inflateUndermine(strm, subvert)
1387z_streamp strm;
1388int subvert;
1389{
1390 struct inflate_state FAR *state;
1391
1392 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1393 state = (struct inflate_state FAR *)strm->state;
1394#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1395 state->sane = !subvert;
1396 return Z_OK;
1397#else
1398 state->sane = 1;
1399 return Z_DATA_ERROR;
1400#endif
1401}
diff --git a/inflate.h b/inflate.h
index d90c6bc..d54a868 100644
--- a/inflate.h
+++ b/inflate.h
@@ -112,4 +112,5 @@ struct inflate_state {
112 unsigned short lens[320]; /* temporary storage for code lengths */ 112 unsigned short lens[320]; /* temporary storage for code lengths */
113 unsigned short work[288]; /* work area for code table building */ 113 unsigned short work[288]; /* work area for code table building */
114 code codes[ENOUGH]; /* space for code tables */ 114 code codes[ENOUGH]; /* space for code tables */
115 int sane; /* if false, allow invalid distance too far */
115}; 116};
diff --git a/inftrees.c b/inftrees.c
index 4ae6502..fb8d843 100644
--- a/inftrees.c
+++ b/inftrees.c
@@ -9,7 +9,7 @@
9#define MAXBITS 15 9#define MAXBITS 15
10 10
11const char inflate_copyright[] = 11const char inflate_copyright[] =
12 " inflate 1.2.3.2 Copyright 1995-2006 Mark Adler "; 12 " inflate 1.2.3.3 Copyright 1995-2006 Mark Adler ";
13/* 13/*
14 If you use the zlib library in a product, an acknowledgment is welcome 14 If you use the zlib library in a product, an acknowledgment is welcome
15 in the documentation of your product. If for some reason you cannot 15 in the documentation of your product. If for some reason you cannot
@@ -50,7 +50,7 @@ unsigned short FAR *work;
50 unsigned fill; /* index for replicating entries */ 50 unsigned fill; /* index for replicating entries */
51 unsigned low; /* low bits for current root entry */ 51 unsigned low; /* low bits for current root entry */
52 unsigned mask; /* mask for low root bits */ 52 unsigned mask; /* mask for low root bits */
53 code this; /* table entry for duplication */ 53 code here; /* table entry for duplication */
54 code FAR *next; /* next available space in table */ 54 code FAR *next; /* next available space in table */
55 const unsigned short FAR *base; /* base value table to use */ 55 const unsigned short FAR *base; /* base value table to use */
56 const unsigned short FAR *extra; /* extra bits table to use */ 56 const unsigned short FAR *extra; /* extra bits table to use */
@@ -62,7 +62,7 @@ unsigned short FAR *work;
62 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; 62 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
63 static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 63 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
64 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 64 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
65 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 192, 204}; 65 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 203};
66 static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 66 static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
67 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 67 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
68 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 68 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -115,11 +115,11 @@ unsigned short FAR *work;
115 if (count[max] != 0) break; 115 if (count[max] != 0) break;
116 if (root > max) root = max; 116 if (root > max) root = max;
117 if (max == 0) { /* no symbols to code at all */ 117 if (max == 0) { /* no symbols to code at all */
118 this.op = (unsigned char)64; /* invalid code marker */ 118 here.op = (unsigned char)64; /* invalid code marker */
119 this.bits = (unsigned char)1; 119 here.bits = (unsigned char)1;
120 this.val = (unsigned short)0; 120 here.val = (unsigned short)0;
121 *(*table)++ = this; /* make a table to force an error */ 121 *(*table)++ = here; /* make a table to force an error */
122 *(*table)++ = this; 122 *(*table)++ = here;
123 *bits = 1; 123 *bits = 1;
124 return 0; /* no symbols, but wait for decoding to report error */ 124 return 0; /* no symbols, but wait for decoding to report error */
125 } 125 }
@@ -215,18 +215,18 @@ unsigned short FAR *work;
215 /* process all codes and make table entries */ 215 /* process all codes and make table entries */
216 for (;;) { 216 for (;;) {
217 /* create table entry */ 217 /* create table entry */
218 this.bits = (unsigned char)(len - drop); 218 here.bits = (unsigned char)(len - drop);
219 if ((int)(work[sym]) < end) { 219 if ((int)(work[sym]) < end) {
220 this.op = (unsigned char)0; 220 here.op = (unsigned char)0;
221 this.val = work[sym]; 221 here.val = work[sym];
222 } 222 }
223 else if ((int)(work[sym]) > end) { 223 else if ((int)(work[sym]) > end) {
224 this.op = (unsigned char)(extra[work[sym]]); 224 here.op = (unsigned char)(extra[work[sym]]);
225 this.val = base[work[sym]]; 225 here.val = base[work[sym]];
226 } 226 }
227 else { 227 else {
228 this.op = (unsigned char)(32 + 64); /* end of block */ 228 here.op = (unsigned char)(32 + 64); /* end of block */
229 this.val = 0; 229 here.val = 0;
230 } 230 }
231 231
232 /* replicate for those indices with low len bits equal to huff */ 232 /* replicate for those indices with low len bits equal to huff */
@@ -235,7 +235,7 @@ unsigned short FAR *work;
235 min = fill; /* save offset to next table */ 235 min = fill; /* save offset to next table */
236 do { 236 do {
237 fill -= incr; 237 fill -= incr;
238 next[(huff >> drop) + fill] = this; 238 next[(huff >> drop) + fill] = here;
239 } while (fill != 0); 239 } while (fill != 0);
240 240
241 /* backwards increment the len-bit code huff */ 241 /* backwards increment the len-bit code huff */
@@ -295,20 +295,20 @@ unsigned short FAR *work;
295 through high index bits. When the current sub-table is filled, the loop 295 through high index bits. When the current sub-table is filled, the loop
296 drops back to the root table to fill in any remaining entries there. 296 drops back to the root table to fill in any remaining entries there.
297 */ 297 */
298 this.op = (unsigned char)64; /* invalid code marker */ 298 here.op = (unsigned char)64; /* invalid code marker */
299 this.bits = (unsigned char)(len - drop); 299 here.bits = (unsigned char)(len - drop);
300 this.val = (unsigned short)0; 300 here.val = (unsigned short)0;
301 while (huff != 0) { 301 while (huff != 0) {
302 /* when done with sub-table, drop back to root table */ 302 /* when done with sub-table, drop back to root table */
303 if (drop != 0 && (huff & mask) != low) { 303 if (drop != 0 && (huff & mask) != low) {
304 drop = 0; 304 drop = 0;
305 len = root; 305 len = root;
306 next = *table; 306 next = *table;
307 this.bits = (unsigned char)len; 307 here.bits = (unsigned char)len;
308 } 308 }
309 309
310 /* put invalid code marker in table */ 310 /* put invalid code marker in table */
311 next[huff >> drop] = this; 311 next[huff >> drop] = here;
312 312
313 /* backwards increment the len-bit code huff */ 313 /* backwards increment the len-bit code huff */
314 incr = 1U << (len - 1); 314 incr = 1U << (len - 1);
diff --git a/qnx/package.qpg b/qnx/package.qpg
index b7e8bf7..be5d5c1 100644
--- a/qnx/package.qpg
+++ b/qnx/package.qpg
@@ -25,10 +25,10 @@
25 <QPG:Files> 25 <QPG:Files>
26 <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/> 26 <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
27 <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/> 27 <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
28 <QPG:Add file="../libz.so.1.2.3.2" install="/opt/lib/" user="root:bin" permission="644"/> 28 <QPG:Add file="../libz.so.1.2.3.3" install="/opt/lib/" user="root:bin" permission="644"/>
29 <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.3.2"/> 29 <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.3.3"/>
30 <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.3.2"/> 30 <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.3.3"/>
31 <QPG:Add file="../libz.so.1.2.3.2" install="/opt/lib/" component="slib"/> 31 <QPG:Add file="../libz.so.1.2.3.3" install="/opt/lib/" component="slib"/>
32 </QPG:Files> 32 </QPG:Files>
33 33
34 <QPG:PackageFilter> 34 <QPG:PackageFilter>
@@ -63,7 +63,7 @@
63 </QPM:ProductDescription> 63 </QPM:ProductDescription>
64 64
65 <QPM:ReleaseDescription> 65 <QPM:ReleaseDescription>
66 <QPM:ReleaseVersion>1.2.3.2</QPM:ReleaseVersion> 66 <QPM:ReleaseVersion>1.2.3.3</QPM:ReleaseVersion>
67 <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency> 67 <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
68 <QPM:ReleaseStability>Stable</QPM:ReleaseStability> 68 <QPM:ReleaseStability>Stable</QPM:ReleaseStability>
69 <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor> 69 <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
diff --git a/zlib.3 b/zlib.3
index 8d22c3f..b83f234 100644
--- a/zlib.3
+++ b/zlib.3
@@ -1,4 +1,4 @@
1.TH ZLIB 3 "xx August 2006" 1.TH ZLIB 3 "2 October 2006"
2.SH NAME 2.SH NAME
3zlib \- compression/decompression library 3zlib \- compression/decompression library
4.SH SYNOPSIS 4.SH SYNOPSIS
@@ -133,8 +133,8 @@ before asking for help.
133Send questions and/or comments to zlib@gzip.org, 133Send questions and/or comments to zlib@gzip.org,
134or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). 134or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
135.SH AUTHORS 135.SH AUTHORS
136Version 1.2.3.2 136Version 1.2.3.3
137Copyright (C) 1995-2005 Jean-loup Gailly (jloup@gzip.org) 137Copyright (C) 1995-2006 Jean-loup Gailly (jloup@gzip.org)
138and Mark Adler (madler@alumni.caltech.edu). 138and Mark Adler (madler@alumni.caltech.edu).
139.LP 139.LP
140This software is provided "as-is," 140This software is provided "as-is,"
diff --git a/zlib.h b/zlib.h
index 44ae5e9..bb164c0 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1,5 +1,5 @@
1/* zlib.h -- interface of the 'zlib' general purpose compression library 1/* zlib.h -- interface of the 'zlib' general purpose compression library
2 version 1.2.3.2, September 3rd, 2006 2 version 1.2.3.3, October 2nd, 2006
3 3
4 Copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler 4 Copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler
5 5
@@ -37,8 +37,8 @@
37extern "C" { 37extern "C" {
38#endif 38#endif
39 39
40#define ZLIB_VERSION "1.2.3.2" 40#define ZLIB_VERSION "1.2.3.3"
41#define ZLIB_VERNUM 0x1232 41#define ZLIB_VERNUM 0x1233
42#define ZLIB_VER_MAJOR 1 42#define ZLIB_VER_MAJOR 1
43#define ZLIB_VER_MINOR 2 43#define ZLIB_VER_MINOR 2
44#define ZLIB_VER_REVISION 3 44#define ZLIB_VER_REVISION 3
@@ -1077,8 +1077,9 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
1077 1077
1078typedef voidp gzFile; 1078typedef voidp gzFile;
1079 1079
1080ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
1081/* 1080/*
1081ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
1082
1082 Opens a gzip (.gz) file for reading or writing. The mode parameter 1083 Opens a gzip (.gz) file for reading or writing. The mode parameter
1083 is as in fopen ("rb" or "wb") but can also include a compression level 1084 is as in fopen ("rb" or "wb") but can also include a compression level
1084 ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for 1085 ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
@@ -1192,9 +1193,10 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
1192 degrade compression. 1193 degrade compression.
1193*/ 1194*/
1194 1195
1196/*
1195ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, 1197ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
1196 z_off_t offset, int whence)); 1198 z_off_t offset, int whence));
1197/* 1199
1198 Sets the starting position for the next gzread or gzwrite on the 1200 Sets the starting position for the next gzread or gzwrite on the
1199 given compressed file. The offset represents a number of bytes in the 1201 given compressed file. The offset represents a number of bytes in the
1200 uncompressed data stream. The whence parameter is defined as in lseek(2); 1202 uncompressed data stream. The whence parameter is defined as in lseek(2);
@@ -1217,8 +1219,9 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
1217 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) 1219 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
1218*/ 1220*/
1219 1221
1220ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
1221/* 1222/*
1223ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
1224
1222 Returns the starting position for the next gzread or gzwrite on the 1225 Returns the starting position for the next gzread or gzwrite on the
1223 given compressed file. This position represents a number of bytes in the 1226 given compressed file. This position represents a number of bytes in the
1224 uncompressed data stream. 1227 uncompressed data stream.
@@ -1289,9 +1292,10 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
1289 if (adler != original_adler) error(); 1292 if (adler != original_adler) error();
1290*/ 1293*/
1291 1294
1295/*
1292ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, 1296ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
1293 z_off_t len2)); 1297 z_off_t len2));
1294/* 1298
1295 Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 1299 Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
1296 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for 1300 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
1297 each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of 1301 each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
@@ -1314,9 +1318,9 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
1314 if (crc != original_crc) error(); 1318 if (crc != original_crc) error();
1315*/ 1319*/
1316 1320
1321/*
1317ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); 1322ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
1318 1323
1319/*
1320 Combine two CRC-32 check values into one. For two sequences of bytes, 1324 Combine two CRC-32 check values into one. For two sequences of bytes,
1321 seq1 and seq2 with lengths len1 and len2, CRC-32 check values were 1325 seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
1322 calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 1326 calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
@@ -1357,13 +1361,36 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
1357 inflateBackInit_((strm), (windowBits), (window), \ 1361 inflateBackInit_((strm), (windowBits), (window), \
1358 ZLIB_VERSION, sizeof(z_stream)) 1362 ZLIB_VERSION, sizeof(z_stream))
1359 1363
1364#ifdef _LARGEFILE64_SOURCE
1365 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
1366 ZEXTERN off64_t ZEXPORT gzseek64 OF((gzFile, off64_t, int));
1367 ZEXTERN off64_t ZEXPORT gztell64 OF((gzFile));
1368 ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, off64_t));
1369 ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, off64_t));
1370#endif
1371
1372#if _FILE_OFFSET_BITS == 64
1373# define gzopen gzopen64
1374# define gzseek gzseek64
1375# define gztell gztell64
1376# define adler32_combine adler32_combine64
1377# define crc32_combine crc32_combine64
1378#else
1379 ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
1380 ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
1381 ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
1382 ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
1383 ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
1384#endif
1385
1360#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) 1386#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
1361 struct internal_state {int dummy;}; /* hack for buggy compilers */ 1387 struct internal_state {int dummy;}; /* hack for buggy compilers */
1362#endif 1388#endif
1363 1389
1364ZEXTERN const char * ZEXPORT zError OF((int)); 1390ZEXTERN const char * ZEXPORT zError OF((int));
1365ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); 1391ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
1366ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); 1392ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
1393ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
1367 1394
1368#ifdef __cplusplus 1395#ifdef __cplusplus
1369} 1396}
diff --git a/zutil.h b/zutil.h
index 3568c44..32e9c89 100644
--- a/zutil.h
+++ b/zutil.h
@@ -177,6 +177,12 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
177# define F_OPEN(name, mode) fopen((name), (mode)) 177# define F_OPEN(name, mode) fopen((name), (mode))
178#endif 178#endif
179 179
180#ifdef _LARGEFILE64_SOURCE
181# define F_OPEN64(name, mode) fopen64((name), (mode))
182#else
183# define F_OPEN64(name, mode) fopen((name), (mode))
184#endif
185
180 /* functions */ 186 /* functions */
181 187
182#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) 188#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)