zlib 1.0.7
This commit is contained in:
		
							
								
								
									
										90
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,6 +1,96 @@
 | 
			
		||||
 | 
			
		||||
		ChangeLog file for zlib
 | 
			
		||||
 | 
			
		||||
Changes in 1.0.7 (20 Jan 1998)
 | 
			
		||||
- fix gzseek which was broken in write mode
 | 
			
		||||
- return error for gzseek to negative absolute position
 | 
			
		||||
- fix configure for Linux (Chun-Chung Chen)
 | 
			
		||||
- increase stack space for MSC (Tim Wegner)
 | 
			
		||||
- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
 | 
			
		||||
- define EXPORTVA for gzprintf (Gilles Vollant)
 | 
			
		||||
- added man page zlib.3 (Rick Rodgers)
 | 
			
		||||
- for contrib/untgz, fix makedir() and improve Makefile
 | 
			
		||||
 | 
			
		||||
- check gzseek in write mode in example.c
 | 
			
		||||
- allocate extra buffer for seeks only if gzseek is actually called
 | 
			
		||||
- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)
 | 
			
		||||
- add inflateSyncPoint in zconf.h
 | 
			
		||||
- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def
 | 
			
		||||
 | 
			
		||||
Changes in 1.0.6 (19 Jan 1998)
 | 
			
		||||
- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
 | 
			
		||||
  gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
 | 
			
		||||
- Fix a deflate bug occuring only with compression level 0 (thanks to
 | 
			
		||||
  Andy Buckler for finding this one).
 | 
			
		||||
- In minigzip, pass transparently also the first byte for .Z files.
 | 
			
		||||
- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
 | 
			
		||||
- check Z_FINISH in inflate (thanks to Marc Schluper)
 | 
			
		||||
- Implement deflateCopy (thanks to Adam Costello)
 | 
			
		||||
- make static libraries by default in configure, add --shared option.
 | 
			
		||||
- move MSDOS or Windows specific files to directory msdos
 | 
			
		||||
- suppress the notion of partial flush to simplify the interface
 | 
			
		||||
  (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
 | 
			
		||||
- suppress history buffer provided by application to simplify the interface
 | 
			
		||||
  (this feature was not implemented anyway in 1.0.4)
 | 
			
		||||
- next_in and avail_in must be initialized before calling inflateInit or
 | 
			
		||||
  inflateInit2
 | 
			
		||||
- add EXPORT in all exported functions (for Windows DLL)
 | 
			
		||||
- added Makefile.nt (thanks to Stephen Williams)
 | 
			
		||||
- added the unsupported "contrib" directory:
 | 
			
		||||
   contrib/asm386/ by Gilles Vollant <info@winimage.com>
 | 
			
		||||
	386 asm code replacing longest_match().
 | 
			
		||||
   contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
 | 
			
		||||
        A C++ I/O streams interface to the zlib gz* functions
 | 
			
		||||
   contrib/iostream2/  by Tyge L<>vset <Tyge.Lovset@cmr.no>
 | 
			
		||||
	Another C++ I/O streams interface
 | 
			
		||||
   contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
			
		||||
	A very simple tar.gz file extractor using zlib
 | 
			
		||||
   contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
 | 
			
		||||
        How to use compress(), uncompress() and the gz* functions from VB.
 | 
			
		||||
- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
 | 
			
		||||
  level) in minigzip (thanks to Tom Lane)
 | 
			
		||||
 | 
			
		||||
- use const for rommable constants in deflate
 | 
			
		||||
- added test for gzseek and gztell in example.c
 | 
			
		||||
- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
 | 
			
		||||
- add undocumented function zError to convert error code to string
 | 
			
		||||
  (for Tim Smithers)
 | 
			
		||||
- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
 | 
			
		||||
- Use default memcpy for Symantec MSDOS compiler.
 | 
			
		||||
- Add EXPORT keyword for check_func (needed for Windows DLL)
 | 
			
		||||
- add current directory to LD_LIBRARY_PATH for "make test"
 | 
			
		||||
- create also a link for libz.so.1
 | 
			
		||||
- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
 | 
			
		||||
- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
 | 
			
		||||
- added -soname for Linux in configure (Chun-Chung Chen,
 | 
			
		||||
- assign numbers to the exported functions in zlib.def (for Windows DLL)
 | 
			
		||||
- add advice in zlib.h for best usage of deflateSetDictionary
 | 
			
		||||
- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
 | 
			
		||||
- allow compilation with ANSI keywords only enabled for TurboC in large model
 | 
			
		||||
- avoid "versionString"[0] (Borland bug)
 | 
			
		||||
- add NEED_DUMMY_RETURN for Borland
 | 
			
		||||
- use variable z_verbose for tracing in debug mode (Peter Deutsch).
 | 
			
		||||
- allow compilation with CC
 | 
			
		||||
- defined STDC for OS/2 (David Charlap)	
 | 
			
		||||
- limit external names to 8 chars for MVS (Thomas Lund)
 | 
			
		||||
- in minigzip.c, use static buffers only for 16-bit systems
 | 
			
		||||
- fix suffix check for "minigzip -d foo.gz"
 | 
			
		||||
- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
 | 
			
		||||
- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
 | 
			
		||||
- added makelcc.bat for lcc-win32 (Tom St Denis)
 | 
			
		||||
- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
 | 
			
		||||
- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
 | 
			
		||||
- check for unistd.h in configure (for off_t)
 | 
			
		||||
- use Tracev instead of Trace in infblock.c
 | 
			
		||||
- remove useless check parameter in inflate_blocks_free
 | 
			
		||||
- avoid useless assignment of s->check to itself in inflate_blocks_new
 | 
			
		||||
- do not flush twice in gzclose (thanks to Ken Raeburn)
 | 
			
		||||
- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
 | 
			
		||||
- use NO_ERRNO_H instead of enumeration of operating systems with errno.h
 | 
			
		||||
- work around buggy fclose on pipes for HP/UX
 | 
			
		||||
- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)
 | 
			
		||||
- fix configure if CC is already equal to gcc
 | 
			
		||||
 | 
			
		||||
Changes in 1.0.5 (3 Jan 98)
 | 
			
		||||
- Fix inflate to terminate gracefully when fed corrupted or invalid data
 | 
			
		||||
- Use const for rommable constants in inflate
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								INDEX
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								INDEX
									
									
									
									
									
								
							@@ -2,21 +2,27 @@ ChangeLog	history of changes
 | 
			
		||||
INDEX			this file
 | 
			
		||||
Make_vms.com		script for Vax/VMS
 | 
			
		||||
Makefile		makefile for Unix (generated by configure)
 | 
			
		||||
Makefile.b32	makefile for Borland C++   32-bit
 | 
			
		||||
Makefile.bor	makefile for Borland C/C++ 16-bit
 | 
			
		||||
Makefile.dj2	makefile for DJGPP 2.x
 | 
			
		||||
Makefile.in		makefile for Unix (template for configure)
 | 
			
		||||
Makefile.msc		makefile for Microsoft C 16-bit
 | 
			
		||||
Makefile.riscos 	makefile for RISCOS
 | 
			
		||||
Makefile.sas		makefile for Amiga SAS/C
 | 
			
		||||
Makefile.tc	makefile for Turbo C
 | 
			
		||||
Makefile.wat	makefile for Watcom C
 | 
			
		||||
README			guess what
 | 
			
		||||
algorithm.doc	description of the compression & decompression algorithms
 | 
			
		||||
algorithm.txt		description of the (de)compression algorithm
 | 
			
		||||
configure		configure script for Unix
 | 
			
		||||
descrip.mms		makefile for Vax/VMS
 | 
			
		||||
zlib.def        definition file for Windows DLL
 | 
			
		||||
zlib.rc         definition file for Windows DLL
 | 
			
		||||
zlib.3			mini man page for zlib (volunteers to write full
 | 
			
		||||
			man pages from zlib.h welcome. write to jloup@gzip.org)
 | 
			
		||||
 | 
			
		||||
msdos/Makefile.b32	makefile for Borland C++   32-bit
 | 
			
		||||
msdos/Makefile.bor	makefile for Borland C/C++ 16-bit
 | 
			
		||||
msdos/Makefile.dj2	makefile for DJGPP 2.x
 | 
			
		||||
msdos/Makefile.tc	makefile for Turbo C
 | 
			
		||||
msdos/Makefile.wat	makefile for Watcom C
 | 
			
		||||
msdos/zlib.def        	definition file for Windows DLL
 | 
			
		||||
msdos/zlib.rc         	definition file for Windows DLL
 | 
			
		||||
 | 
			
		||||
nt/Makefile.nt		makefile for Windows NT
 | 
			
		||||
nt/zlib.dnt		definition file for Windows NT DLL
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		zlib public header files (must be kept):
 | 
			
		||||
@@ -49,3 +55,20 @@ zutil.h
 | 
			
		||||
		source files for sample programs:
 | 
			
		||||
example.c
 | 
			
		||||
minigzip.c
 | 
			
		||||
 | 
			
		||||
		unsupported contribution by third parties
 | 
			
		||||
 | 
			
		||||
contrib/asm386/ by Gilles Vollant <info@winimage.com>
 | 
			
		||||
	386 asm code replacing longest_match().
 | 
			
		||||
 | 
			
		||||
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
 | 
			
		||||
        A C++ I/O streams interface to the zlib gz* functions
 | 
			
		||||
 | 
			
		||||
contrib/iostream2/  by Tyge L<>vset <Tyge.Lovset@cmr.no>
 | 
			
		||||
	Another C++ I/O streams interface
 | 
			
		||||
 | 
			
		||||
contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
			
		||||
	A very simple tar.gz extractor using zlib
 | 
			
		||||
 | 
			
		||||
contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
 | 
			
		||||
        How to use compress(), uncompress() and the gz* functions from VB.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								Makefile
									
									
									
									
									
								
							@@ -22,12 +22,14 @@ CFLAGS=-O
 | 
			
		||||
LDFLAGS=-L. -lz
 | 
			
		||||
LDSHARED=$(CC)
 | 
			
		||||
 | 
			
		||||
VER=1.0.5
 | 
			
		||||
VER=1.0.7
 | 
			
		||||
LIBS=libz.a
 | 
			
		||||
SHAREDLIB=libz.so
 | 
			
		||||
 | 
			
		||||
AR=ar rc
 | 
			
		||||
RANLIB=ranlib
 | 
			
		||||
TAR=tar
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
prefix=/usr/local
 | 
			
		||||
exec_prefix = $(prefix)
 | 
			
		||||
@@ -37,22 +39,30 @@ OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
 | 
			
		||||
 | 
			
		||||
TEST_OBJS = example.o minigzip.o
 | 
			
		||||
 | 
			
		||||
DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
 | 
			
		||||
	    zlib.def zlib.rc algorithm.doc  *.[ch]
 | 
			
		||||
DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
 | 
			
		||||
  algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
 | 
			
		||||
  nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \
 | 
			
		||||
  contrib/asm386/*.asm contrib/asm386/*.c \
 | 
			
		||||
  contrib/asm386/*.bat contrib/asm386/*.mak contrib/iostream/*.cpp \
 | 
			
		||||
  contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \
 | 
			
		||||
  contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
 | 
			
		||||
 | 
			
		||||
all: example minigzip
 | 
			
		||||
 | 
			
		||||
test: all
 | 
			
		||||
	./example
 | 
			
		||||
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
 | 
			
		||||
	./example ; \
 | 
			
		||||
	echo hello world | ./minigzip | ./minigzip -d
 | 
			
		||||
 | 
			
		||||
libz.a: $(OBJS)
 | 
			
		||||
	$(AR) $@ $(OBJS)
 | 
			
		||||
	-@ ($(RANLIB) $@ || true) 2>/dev/null
 | 
			
		||||
	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
 | 
			
		||||
 | 
			
		||||
libz.so.$(VER): $(OBJS)
 | 
			
		||||
$(SHAREDLIB).$(VER): $(OBJS)
 | 
			
		||||
	$(LDSHARED) -o $@ $(OBJS)
 | 
			
		||||
	rm -f libz.so; ln -s $@ libz.so
 | 
			
		||||
	rm -f $(SHAREDLIB) $(SHAREDLIB).1
 | 
			
		||||
	ln -s $@ $(SHAREDLIB)
 | 
			
		||||
	ln -s $@ $(SHAREDLIB).1
 | 
			
		||||
 | 
			
		||||
example: example.o $(LIBS)
 | 
			
		||||
	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
 | 
			
		||||
@@ -68,22 +78,28 @@ install: $(LIBS)
 | 
			
		||||
	cp $(LIBS) $(exec_prefix)/lib
 | 
			
		||||
	cd $(exec_prefix)/lib; chmod 644 $(LIBS)
 | 
			
		||||
	-@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1
 | 
			
		||||
	cd $(exec_prefix)/lib; if test -f libz.so.$(VER); then \
 | 
			
		||||
	  ln -s libz.so.$(VER) libz.so; \
 | 
			
		||||
	cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \
 | 
			
		||||
	  rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
 | 
			
		||||
	  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
 | 
			
		||||
	  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
 | 
			
		||||
	  (ldconfig || true)  >/dev/null 2>&1; \
 | 
			
		||||
	fi
 | 
			
		||||
# The ranlib in install is needed on NeXTSTEP which checks file times
 | 
			
		||||
# ldconfig is for Linux
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	cd $(exec_prefix)/lib; rm -f $(LIBS); \
 | 
			
		||||
	if test -f libz.so; then \
 | 
			
		||||
	if test -f $(SHAREDLIB); then \
 | 
			
		||||
	 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p'<$(prefix)/include/zlib.h`;\
 | 
			
		||||
	 rm -f libz.so.$$v libz.so; \
 | 
			
		||||
	 rm -f $(SHAREDLIB).$$v $(SHAREDLIB); \
 | 
			
		||||
	fi
 | 
			
		||||
	cd $(prefix)/include; rm -f zlib.h zconf.h
 | 
			
		||||
	cdz $(prefix)/include; rm -f zlib.h zconf.h
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
 | 
			
		||||
 | 
			
		||||
distclean:	clean
 | 
			
		||||
 | 
			
		||||
zip:
 | 
			
		||||
	mv Makefile Makefile~; cp -p Makefile.in Makefile
 | 
			
		||||
	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								Makefile.in
									
									
									
									
									
								
							@@ -22,12 +22,14 @@ CFLAGS=-O
 | 
			
		||||
LDFLAGS=-L. -lz
 | 
			
		||||
LDSHARED=$(CC)
 | 
			
		||||
 | 
			
		||||
VER=1.0.5
 | 
			
		||||
VER=1.0.7
 | 
			
		||||
LIBS=libz.a
 | 
			
		||||
SHAREDLIB=libz.so
 | 
			
		||||
 | 
			
		||||
AR=ar rc
 | 
			
		||||
RANLIB=ranlib
 | 
			
		||||
TAR=tar
 | 
			
		||||
SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
prefix=/usr/local
 | 
			
		||||
exec_prefix = $(prefix)
 | 
			
		||||
@@ -37,22 +39,30 @@ OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
 | 
			
		||||
 | 
			
		||||
TEST_OBJS = example.o minigzip.o
 | 
			
		||||
 | 
			
		||||
DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] descrip.mms \
 | 
			
		||||
	    zlib.def zlib.rc algorithm.doc  *.[ch]
 | 
			
		||||
DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \
 | 
			
		||||
  algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \
 | 
			
		||||
  nt/Makefile.nt nt/zlib.dnt  contrib/README.contrib contrib/*.txt \
 | 
			
		||||
  contrib/asm386/*.asm contrib/asm386/*.c \
 | 
			
		||||
  contrib/asm386/*.bat contrib/asm386/*.mak contrib/iostream/*.cpp \
 | 
			
		||||
  contrib/iostream/*.h  contrib/iostream2/*.h contrib/iostream2/*.cpp \
 | 
			
		||||
  contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32
 | 
			
		||||
 | 
			
		||||
all: example minigzip
 | 
			
		||||
 | 
			
		||||
test: all
 | 
			
		||||
	./example
 | 
			
		||||
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
 | 
			
		||||
	./example ; \
 | 
			
		||||
	echo hello world | ./minigzip | ./minigzip -d
 | 
			
		||||
 | 
			
		||||
libz.a: $(OBJS)
 | 
			
		||||
	$(AR) $@ $(OBJS)
 | 
			
		||||
	-@ ($(RANLIB) $@ || true) 2>/dev/null
 | 
			
		||||
	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
 | 
			
		||||
 | 
			
		||||
libz.so.$(VER): $(OBJS)
 | 
			
		||||
$(SHAREDLIB).$(VER): $(OBJS)
 | 
			
		||||
	$(LDSHARED) -o $@ $(OBJS)
 | 
			
		||||
	rm -f libz.so; ln -s $@ libz.so
 | 
			
		||||
	rm -f $(SHAREDLIB) $(SHAREDLIB).1
 | 
			
		||||
	ln -s $@ $(SHAREDLIB)
 | 
			
		||||
	ln -s $@ $(SHAREDLIB).1
 | 
			
		||||
 | 
			
		||||
example: example.o $(LIBS)
 | 
			
		||||
	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
 | 
			
		||||
@@ -68,22 +78,28 @@ install: $(LIBS)
 | 
			
		||||
	cp $(LIBS) $(exec_prefix)/lib
 | 
			
		||||
	cd $(exec_prefix)/lib; chmod 644 $(LIBS)
 | 
			
		||||
	-@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1
 | 
			
		||||
	cd $(exec_prefix)/lib; if test -f libz.so.$(VER); then \
 | 
			
		||||
	  ln -s libz.so.$(VER) libz.so; \
 | 
			
		||||
	cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \
 | 
			
		||||
	  rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
 | 
			
		||||
	  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
 | 
			
		||||
	  ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
 | 
			
		||||
	  (ldconfig || true)  >/dev/null 2>&1; \
 | 
			
		||||
	fi
 | 
			
		||||
# The ranlib in install is needed on NeXTSTEP which checks file times
 | 
			
		||||
# ldconfig is for Linux
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	cd $(exec_prefix)/lib; rm -f $(LIBS); \
 | 
			
		||||
	if test -f libz.so; then \
 | 
			
		||||
	if test -f $(SHAREDLIB); then \
 | 
			
		||||
	 v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p'<$(prefix)/include/zlib.h`;\
 | 
			
		||||
	 rm -f libz.so.$$v libz.so; \
 | 
			
		||||
	 rm -f $(SHAREDLIB).$$v $(SHAREDLIB); \
 | 
			
		||||
	fi
 | 
			
		||||
	cd $(prefix)/include; rm -f zlib.h zconf.h
 | 
			
		||||
	cdz $(prefix)/include; rm -f zlib.h zconf.h
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o *~ example minigzip libz.a libz.so* foo.gz
 | 
			
		||||
 | 
			
		||||
distclean:	clean
 | 
			
		||||
 | 
			
		||||
zip:
 | 
			
		||||
	mv Makefile Makefile~; cp -p Makefile.in Makefile
 | 
			
		||||
	v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								README
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
zlib 1.0.5 is a general purpose data compression library.  All the code
 | 
			
		||||
zlib 1.0.7 is a general purpose data compression library.  All the code
 | 
			
		||||
is reentrant (thread safe).  The data format used by the zlib library
 | 
			
		||||
is described by RFCs (Request for Comments) 1950 to 1952 in the files 
 | 
			
		||||
ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
 | 
			
		||||
@@ -19,27 +19,54 @@ makefiles such as Makefile.msc; for VMS, use Make_vms.com or descrip.mms.
 | 
			
		||||
Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov> or,
 | 
			
		||||
if this fails, to the addresses given below in the Copyright section.
 | 
			
		||||
The zlib home page is http://www.cdrom.com/pub/infozip/zlib/
 | 
			
		||||
The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/
 | 
			
		||||
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://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm
 | 
			
		||||
 | 
			
		||||
The changes made in version 1.0.5 are documented in the file ChangeLog.
 | 
			
		||||
The main changes since 1.0.4 are:
 | 
			
		||||
The changes made in version 1.0.7 are documented in the file ChangeLog.
 | 
			
		||||
The main changes since 1.0.6 are:
 | 
			
		||||
 | 
			
		||||
- Fix inflate to terminate gracefully when fed corrupted or invalid data
 | 
			
		||||
- Use const for rommable constants in inflate
 | 
			
		||||
- fix gzseek which was broken in write mode
 | 
			
		||||
- return error for gzseek to negative absolute position
 | 
			
		||||
- fix configure for Linux (Chun-Chung Chen)
 | 
			
		||||
- increase stack space for MSC (Tim Wegner)
 | 
			
		||||
- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
 | 
			
		||||
- define EXPORTVA for gzprintf (Gilles Vollant)
 | 
			
		||||
- added mini man page zlib.3 (Rick Rodgers) [volunteers to write full
 | 
			
		||||
  man pages from zlib.h most welcome. write to jloup@gzip.org]
 | 
			
		||||
- for contrib/untgz, fix makedir() and improve Makefile
 | 
			
		||||
 | 
			
		||||
Unsupported third party contributions are provided in directory "contrib".
 | 
			
		||||
 | 
			
		||||
A Java implementation of zlib is available in the Java Development Kit 1.1
 | 
			
		||||
http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
 | 
			
		||||
See the zlib home page http://www.cdrom.com/pub/infozip/zlib/ for details.
 | 
			
		||||
 | 
			
		||||
A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
 | 
			
		||||
is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
 | 
			
		||||
ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
 | 
			
		||||
 | 
			
		||||
A Python interface to zlib written by A.M. Kuchling <amk@magnet.com>
 | 
			
		||||
is available from the Python Software Association sites, such as:
 | 
			
		||||
ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz
 | 
			
		||||
 | 
			
		||||
Notes for some targets:
 | 
			
		||||
 | 
			
		||||
- For Turbo C the small model is supported only with reduced performance to
 | 
			
		||||
  avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
 | 
			
		||||
- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
 | 
			
		||||
  and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
 | 
			
		||||
  The zlib DLL support was initially done by Alessandro Iacopetti and is
 | 
			
		||||
  now maintained by Gilles Vollant <info@winimage.com>. Check the zlib DLL
 | 
			
		||||
  home page at http://www.winimage.com/zLibDll
 | 
			
		||||
 | 
			
		||||
- For 64-bit Iris, deflate.c must be compiled without any optimization.
 | 
			
		||||
  From Visual Basic, you can call the DLL functions which do not take
 | 
			
		||||
  a structure as argument: compress, uncompress and all gz* functions.
 | 
			
		||||
  See contrib/visual-basic.txt for more information.
 | 
			
		||||
  I don't know how to handle structures in Visual Basic, sorry.
 | 
			
		||||
 | 
			
		||||
- For 64-bit Irix, deflate.c must be compiled without any optimization.
 | 
			
		||||
  With -O, one libpng test fails. The test works in 32 bit mode (with
 | 
			
		||||
  the -32 compiler flag). The compiler bug has been reported to SGI.
 | 
			
		||||
  the -n32 compiler flag). The compiler bug has been reported to SGI.
 | 
			
		||||
 | 
			
		||||
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1   
 | 
			
		||||
  it works when compiled with cc.
 | 
			
		||||
@@ -47,14 +74,11 @@ Notes for some targets:
 | 
			
		||||
- zlib doesn't work on HP-UX 9.05 with one cc compiler (the one not
 | 
			
		||||
  accepting the -O option). It works with the other cc compiler.
 | 
			
		||||
 | 
			
		||||
- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
 | 
			
		||||
  and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
 | 
			
		||||
  For help on building a zlib DLL, contact Alessandro Iacopetti
 | 
			
		||||
  <iaco@email.alessandria.alpcom.it>  http://lisa.unial.it/iaco ,
 | 
			
		||||
  or contact Brad Clarke <bclarke@cyberus.ca>.
 | 
			
		||||
 | 
			
		||||
- gzdopen is not supported on RISCOS
 | 
			
		||||
 | 
			
		||||
- For Turbo C the small model is supported only with reduced performance to
 | 
			
		||||
  avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Acknowledgments:
 | 
			
		||||
 | 
			
		||||
@@ -84,7 +108,7 @@ Copyright notice:
 | 
			
		||||
  3. This notice may not be removed or altered from any source distribution.
 | 
			
		||||
 | 
			
		||||
  Jean-loup Gailly        Mark Adler
 | 
			
		||||
  gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
 | 
			
		||||
  jloup@gzip.org          madler@alumni.caltech.edu
 | 
			
		||||
 | 
			
		||||
If you use the zlib library in a product, we would appreciate *not*
 | 
			
		||||
receiving lengthy legal documents to sign. The sources are provided
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
/* adler32.c -- compute the Adler-32 checksum of a data stream
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: adler32.c,v 1.10 1996/05/22 11:52:18 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
#define DO16(buf)   DO8(buf,0); DO8(buf,8);
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
uLong adler32(adler, buf, len)
 | 
			
		||||
uLong EXPORT adler32(adler, buf, len)
 | 
			
		||||
    uLong adler;
 | 
			
		||||
    const Bytef *buf;
 | 
			
		||||
    uInt len;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
1. Compression algorithm (deflate)
 | 
			
		||||
 | 
			
		||||
The deflation algorithm used by zlib (also zip and gzip) is a variation of
 | 
			
		||||
The deflation algorithm used by gzip (also zip and zlib) is a variation of
 | 
			
		||||
LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in
 | 
			
		||||
the input data.  The second occurrence of a string is replaced by a
 | 
			
		||||
pointer to the previous string, in the form of a pair (distance,
 | 
			
		||||
@@ -35,12 +35,12 @@ parameter of deflateInit). So deflate() does not always find the longest
 | 
			
		||||
possible match but generally finds a match which is long enough.
 | 
			
		||||
 | 
			
		||||
deflate() also defers the selection of matches with a lazy evaluation
 | 
			
		||||
mechanism. After a match of length N has been found, deflate() searches for a
 | 
			
		||||
longer match at the next input byte. If a longer match is found, the
 | 
			
		||||
mechanism. After a match of length N has been found, deflate() searches for
 | 
			
		||||
a longer match at the next input byte. If a longer match is found, the
 | 
			
		||||
previous match is truncated to a length of one (thus producing a single
 | 
			
		||||
literal byte) and the longer match is emitted afterwards.  Otherwise,
 | 
			
		||||
the original match is kept, and the next match search is attempted only
 | 
			
		||||
N steps later.
 | 
			
		||||
literal byte) and the process of lazy evaluation begins again. Otherwise,
 | 
			
		||||
the original match is kept, and the next match search is attempted only N
 | 
			
		||||
steps later.
 | 
			
		||||
 | 
			
		||||
The lazy match evaluation is also subject to a runtime parameter. If
 | 
			
		||||
the current match is long enough, deflate() reduces the search for a longer
 | 
			
		||||
@@ -57,6 +57,8 @@ but saves time since there are both fewer insertions and fewer searches.
 | 
			
		||||
 | 
			
		||||
2. Decompression algorithm (inflate)
 | 
			
		||||
 | 
			
		||||
2.1 Introduction
 | 
			
		||||
 | 
			
		||||
The real question is, given a Huffman tree, how to decode fast.  The most
 | 
			
		||||
important realization is that shorter codes are much more common than
 | 
			
		||||
longer codes, so pay attention to decoding the short codes fast, and let
 | 
			
		||||
@@ -91,8 +93,114 @@ interesting to see if optimizing the first level table for other
 | 
			
		||||
applications gave values within a bit or two of the flat code size.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2.2 More details on the inflate table lookup
 | 
			
		||||
 | 
			
		||||
Ok, you want to know what this cleverly obfuscated inflate tree actually  
 | 
			
		||||
looks like.  You are correct that it's not a Huffman tree.  It is simply a  
 | 
			
		||||
lookup table for the first, let's say, nine bits of a Huffman symbol.  The  
 | 
			
		||||
symbol could be as short as one bit or as long as 15 bits.  If a particular  
 | 
			
		||||
symbol is shorter than nine bits, then that symbol's translation is duplicated
 | 
			
		||||
in all those entries that start with that symbol's bits.  For example, if the  
 | 
			
		||||
symbol is four bits, then it's duplicated 32 times in a nine-bit table.  If a  
 | 
			
		||||
symbol is nine bits long, it appears in the table once.
 | 
			
		||||
 | 
			
		||||
If the symbol is longer than nine bits, then that entry in the table points  
 | 
			
		||||
to another similar table for the remaining bits.  Again, there are duplicated  
 | 
			
		||||
entries as needed.  The idea is that most of the time the symbol will be short
 | 
			
		||||
and there will only be one table look up.  (That's whole idea behind data  
 | 
			
		||||
compression in the first place.)  For the less frequent long symbols, there  
 | 
			
		||||
will be two lookups.  If you had a compression method with really long  
 | 
			
		||||
symbols, you could have as many levels of lookups as is efficient.  For  
 | 
			
		||||
inflate, two is enough.
 | 
			
		||||
 | 
			
		||||
So a table entry either points to another table (in which case nine bits in  
 | 
			
		||||
the above example are gobbled), or it contains the translation for the symbol  
 | 
			
		||||
and the number of bits to gobble.  Then you start again with the next  
 | 
			
		||||
ungobbled bit.
 | 
			
		||||
 | 
			
		||||
You may wonder: why not just have one lookup table for how ever many bits the  
 | 
			
		||||
longest symbol is?  The reason is that if you do that, you end up spending  
 | 
			
		||||
more time filling in duplicate symbol entries than you do actually decoding.   
 | 
			
		||||
At least for deflate's output that generates new trees every several 10's of  
 | 
			
		||||
kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code  
 | 
			
		||||
would take too long if you're only decoding several thousand symbols.  At the  
 | 
			
		||||
other extreme, you could make a new table for every bit in the code.  In fact,
 | 
			
		||||
that's essentially a Huffman tree.  But then you spend two much time  
 | 
			
		||||
traversing the tree while decoding, even for short symbols.
 | 
			
		||||
 | 
			
		||||
So the number of bits for the first lookup table is a trade of the time to  
 | 
			
		||||
fill out the table vs. the time spent looking at the second level and above of
 | 
			
		||||
the table.
 | 
			
		||||
 | 
			
		||||
Here is an example, scaled down:
 | 
			
		||||
 | 
			
		||||
The code being decoded, with 10 symbols, from 1 to 6 bits long:
 | 
			
		||||
 | 
			
		||||
A: 0
 | 
			
		||||
B: 10
 | 
			
		||||
C: 1100
 | 
			
		||||
D: 11010
 | 
			
		||||
E: 11011
 | 
			
		||||
F: 11100
 | 
			
		||||
G: 11101
 | 
			
		||||
H: 11110
 | 
			
		||||
I: 111110
 | 
			
		||||
J: 111111
 | 
			
		||||
 | 
			
		||||
Let's make the first table three bits long (eight entries):
 | 
			
		||||
 | 
			
		||||
000: A,1
 | 
			
		||||
001: A,1
 | 
			
		||||
010: A,1
 | 
			
		||||
011: A,1
 | 
			
		||||
100: B,2
 | 
			
		||||
101: B,2
 | 
			
		||||
110: -> table X (gobble 3 bits)
 | 
			
		||||
111: -> table Y (gobble 3 bits)
 | 
			
		||||
 | 
			
		||||
Each entry is what the bits decode to and how many bits that is, i.e. how  
 | 
			
		||||
many bits to gobble.  Or the entry points to another table, with the number of
 | 
			
		||||
bits to gobble implicit in the size of the table.
 | 
			
		||||
 | 
			
		||||
Table X is two bits long since the longest code starting with 110 is five bits
 | 
			
		||||
long:
 | 
			
		||||
 | 
			
		||||
00: C,1
 | 
			
		||||
01: C,1
 | 
			
		||||
10: D,2
 | 
			
		||||
11: E,2
 | 
			
		||||
 | 
			
		||||
Table Y is three bits long since the longest code starting with 111 is six  
 | 
			
		||||
bits long:
 | 
			
		||||
 | 
			
		||||
000: F,2
 | 
			
		||||
001: F,2
 | 
			
		||||
010: G,2
 | 
			
		||||
011: G,2
 | 
			
		||||
100: H,2
 | 
			
		||||
101: H,2
 | 
			
		||||
110: I,3
 | 
			
		||||
111: J,3
 | 
			
		||||
 | 
			
		||||
So what we have here are three tables with a total of 20 entries that had to  
 | 
			
		||||
be constructed.  That's compared to 64 entries for a single table.  Or  
 | 
			
		||||
compared to 16 entries for a Huffman tree (six two entry tables and one four  
 | 
			
		||||
entry table).  Assuming that the code ideally represents the probability of  
 | 
			
		||||
the symbols, it takes on the average 1.25 lookups per symbol.  That's compared
 | 
			
		||||
to one lookup for the single table, or 1.66 lookups per symbol for the  
 | 
			
		||||
Huffman tree.
 | 
			
		||||
 | 
			
		||||
There, I think that gives you a picture of what's going on.  For inflate, the  
 | 
			
		||||
meaning of a particular symbol is often more than just a letter.  It can be a  
 | 
			
		||||
byte (a "literal"), or it can be either a length or a distance which  
 | 
			
		||||
indicates a base value and a number of bits to fetch after the code that is  
 | 
			
		||||
added to the base value.  Or it might be the special end-of-block code.  The  
 | 
			
		||||
data structures created in inftrees.c try to encode all that information  
 | 
			
		||||
compactly in the tables.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Jean-loup Gailly        Mark Adler
 | 
			
		||||
gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
 | 
			
		||||
jloup@gzip.org          madler@alumni.caltech.edu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
References:
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
/* compress.c -- compress a memory buffer
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: compress.c,v 1.10 1996/05/23 16:51:12 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
   enough memory, Z_BUF_ERROR if there was not enough room in the output
 | 
			
		||||
   buffer.
 | 
			
		||||
*/
 | 
			
		||||
int compress (dest, destLen, source, sourceLen)
 | 
			
		||||
int EXPORT compress (dest, destLen, source, sourceLen)
 | 
			
		||||
    Bytef *dest;
 | 
			
		||||
    uLongf *destLen;
 | 
			
		||||
    const Bytef *source;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										67
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										67
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -4,6 +4,10 @@
 | 
			
		||||
# of if you need special compiler, flags or install directory.
 | 
			
		||||
# Otherwise, you can just use directly "make test; make install"
 | 
			
		||||
#
 | 
			
		||||
# To create a shared library, use "configure --shared"; by default a static
 | 
			
		||||
# library is created. If the primitive shared library support provided here
 | 
			
		||||
# does not work, use ftp://prep.ai.mit.edu/pub/gnu/libtool-*.tar.gz
 | 
			
		||||
#
 | 
			
		||||
# To impose specific compiler or flags or install directory, use for example:
 | 
			
		||||
#    prefix=$HOME CC=cc CFLAGS="-O4" ./configure
 | 
			
		||||
# or for csh/tcsh users:
 | 
			
		||||
@@ -11,22 +15,33 @@
 | 
			
		||||
# LDSHARED is the command to be used to create a shared library
 | 
			
		||||
 | 
			
		||||
LIBS=libz.a
 | 
			
		||||
SHAREDLIB=libz.so
 | 
			
		||||
VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
 | 
			
		||||
AR=${AR-"ar rc"}
 | 
			
		||||
RANLIB=${RANLIB-"ranlib"}
 | 
			
		||||
prefix=${prefix-/usr/local}
 | 
			
		||||
exec_prefix=${exec_prefix-$prefix}
 | 
			
		||||
shared_ext='.so'
 | 
			
		||||
shared=0
 | 
			
		||||
 | 
			
		||||
case "$1" in
 | 
			
		||||
  -s* | --s*) shared=1; shift;;
 | 
			
		||||
  -h* | --h*) echo 'syntax: configure [ --shared ]'; exit 0;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
test -z "$CC" && echo Checking for gcc...
 | 
			
		||||
test=ztest$$
 | 
			
		||||
cat > $test.c <<EOF
 | 
			
		||||
int hello() { printf("hello\n"); }
 | 
			
		||||
EOF
 | 
			
		||||
if test -z "$CC" && (gcc -c -O3 $test.c) 2>/dev/null; then
 | 
			
		||||
if test -z "$CC" -o "$CC" = "gcc" && (gcc -c -O3 $test.c) 2>/dev/null; then
 | 
			
		||||
  CC=gcc
 | 
			
		||||
  SFLAGS=${CFLAGS-"-fPIC -O3"}
 | 
			
		||||
  CFLAGS=${CFLAGS-"-O3"}
 | 
			
		||||
  LDSHARED=${LDSHARED-"gcc -shared"}
 | 
			
		||||
  case `(uname -s || echo unknown) 2>/dev/null` in
 | 
			
		||||
  Linux | linux) LDSHARED=${LDSHARED-"gcc -shared -Wl,-soname,libz.so.1"};;
 | 
			
		||||
  *)             LDSHARED=${LDSHARED-"gcc -shared"};;
 | 
			
		||||
  esac
 | 
			
		||||
else
 | 
			
		||||
  # find system name and corresponding cc options
 | 
			
		||||
  CC=${CC-cc}
 | 
			
		||||
@@ -50,35 +65,55 @@ else
 | 
			
		||||
	     LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};;
 | 
			
		||||
  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
 | 
			
		||||
	     CFLAGS=${CFLAGS-"-O"}
 | 
			
		||||
	     LDSHARED=${LDSHARED-"ld -b"}
 | 
			
		||||
	     SHAREDLIBS='libz.sl';;
 | 
			
		||||
  # send working options for other systems to gzip@prep.ai.mit.edu
 | 
			
		||||
	     LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
 | 
			
		||||
	     shared_ext='.sl'
 | 
			
		||||
	     SHAREDLIB='libz.sl';;
 | 
			
		||||
  UNIX_System_V\ 4.2.0) 
 | 
			
		||||
	     SFLAGS=${CFLAGS-"-KPIC -O"}
 | 
			
		||||
	     CFLAGS=${CFLAGS-"-O"}
 | 
			
		||||
	     LDSHARED=${LDSHARED-"cc -G"};;
 | 
			
		||||
  # send working options for other systems to support@gzip.org
 | 
			
		||||
  *)         SFLAGS=${CFLAGS-"-O"}
 | 
			
		||||
	     CFLAGS=${CFLAGS-"-O"}
 | 
			
		||||
	     LDSHARED=${LDSHARED-"cc -shared"};;
 | 
			
		||||
  esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo Checking for shared library support...
 | 
			
		||||
# we must test in two steps (cc then ld), required at least on SunOS 4.x
 | 
			
		||||
if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" &&
 | 
			
		||||
   test "`($LDSHARED -o $test.so $test.o) 2>&1`" = ""; then
 | 
			
		||||
if test $shared -eq 1; then
 | 
			
		||||
  echo Checking for shared library support...
 | 
			
		||||
  # we must test in two steps (cc then ld), required at least on SunOS 4.x
 | 
			
		||||
  if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" &&
 | 
			
		||||
     test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then
 | 
			
		||||
    CFLAGS="$SFLAGS"
 | 
			
		||||
  LIBS='libz.so.$(VER)'
 | 
			
		||||
  echo Building shared library libz.so.$VER with $CC.
 | 
			
		||||
else
 | 
			
		||||
    LIBS="$SHAREDLIB.$VER"
 | 
			
		||||
    echo Building shared library $SHAREDLIB.$VER with $CC.
 | 
			
		||||
  else
 | 
			
		||||
    echo No shared library suppport.
 | 
			
		||||
    shared=0;
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
if test $shared -eq 0; then
 | 
			
		||||
  LDSHARED="$CC"
 | 
			
		||||
  echo Building static library $LIBS version $VER with $CC.
 | 
			
		||||
fi
 | 
			
		||||
rm -f $test.[co] $test.so
 | 
			
		||||
rm -f $test.[co] $test$shared_ext
 | 
			
		||||
 | 
			
		||||
if test -f /usr/include/unistd.h; then
 | 
			
		||||
  CFLAGS="$CFLAGS -DHAVE_UNISTD_H"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test ! -f /usr/include/errno.h; then
 | 
			
		||||
  CFLAGS="$CFLAGS -DNO_ERRNO_H"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# udpate Makefile
 | 
			
		||||
sed < Makefile.in "
 | 
			
		||||
/^CC *=/s/=.*/=$CC/
 | 
			
		||||
/^CC *=/s,=.*,=$CC,
 | 
			
		||||
/^CFLAGS *=/s/=.*/=$CFLAGS/
 | 
			
		||||
/^LDSHARED *=/s/=.*/=$LDSHARED/
 | 
			
		||||
/^LDSHARED *=/s%=.*%=$LDSHARED%
 | 
			
		||||
/^LIBS *=/s,=.*,=$LIBS,
 | 
			
		||||
/^AR *=/s/=.*/=$AR/
 | 
			
		||||
/^SHAREDLIB *=/s,=.*,=$SHAREDLIB,
 | 
			
		||||
/^AR *=/s,=.*,=$AR,
 | 
			
		||||
/^RANLIB *=/s,=.*,=$RANLIB,
 | 
			
		||||
/^VER *=/s/=.*/=$VER/
 | 
			
		||||
/^prefix *=/s,=.*,=$prefix,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								contrib/README.contrib
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								contrib/README.contrib
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
All files under this contrib directory are UNSUPPORTED. There were
 | 
			
		||||
provided by users of zlib and were not tested by the authors of zlib.
 | 
			
		||||
Use at your own risk. Please contact the authors of the contributions
 | 
			
		||||
for help about these, not the zlib authors. Thanks.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
asm386/     by Gilles Vollant <info@winimage.com>
 | 
			
		||||
	386 asm code replacing longest_match(). This code may be slower
 | 
			
		||||
        than the C code if you have a good compiler.
 | 
			
		||||
 | 
			
		||||
iostream/   by Kevin Ruland <kevin@rodin.wustl.edu>
 | 
			
		||||
        A C++ I/O streams interface to the zlib gz* functions
 | 
			
		||||
 | 
			
		||||
iostream2/  by Tyge L<>vset <Tyge.Lovset@cmr.no>
 | 
			
		||||
	Another C++ I/O streams interface
 | 
			
		||||
 | 
			
		||||
untgz/      by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
			
		||||
	A very simple tar.gz file extractor using zlib
 | 
			
		||||
 | 
			
		||||
visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
 | 
			
		||||
        How to use compress(), uncompress() and the gz* functions from VB.
 | 
			
		||||
							
								
								
									
										464
									
								
								contrib/asm386/gvmat32.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										464
									
								
								contrib/asm386/gvmat32.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,464 @@
 | 
			
		||||
;
 | 
			
		||||
; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86
 | 
			
		||||
; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
 | 
			
		||||
; File written by Gilles Vollant, by modifiying the longest_match
 | 
			
		||||
;  from Jean-loup Gailly in deflate.c
 | 
			
		||||
; It need wmask == 0x7fff
 | 
			
		||||
;     (assembly code is faster with a fixed wmask)
 | 
			
		||||
;
 | 
			
		||||
; For Visual C++ 4.2 and ML 6.11c (version in directory \MASM611C of Win95 DDK)
 | 
			
		||||
;   I compile with : "ml /coff /Zi /c gvmat32.asm"
 | 
			
		||||
;
 | 
			
		||||
; uInt longest_match_gvasm(IPos cur_match,int* match_start_ptr,uInt scan_end,
 | 
			
		||||
;                          uInt scan_start,ush* prev,uch* window,int best_len,
 | 
			
		||||
;                          IPos limit,uInt chain_length,uch* scanrp,
 | 
			
		||||
;                          uInt nice_match);
 | 
			
		||||
 | 
			
		||||
;uInt longest_match(s, cur_match)
 | 
			
		||||
;    deflate_state *s;
 | 
			
		||||
;    IPos cur_match;                             /* current match */
 | 
			
		||||
 | 
			
		||||
	NbStack		equ	76
 | 
			
		||||
	cur_match	equ	dword ptr[esp+NbStack-0]
 | 
			
		||||
	str_s		equ	dword ptr[esp+NbStack-4]
 | 
			
		||||
	; 5 dword on top (ret,ebp,esi,edi,ebx)
 | 
			
		||||
	adrret		equ	dword ptr[esp+NbStack-8]
 | 
			
		||||
	pushebp		equ	dword ptr[esp+NbStack-12]
 | 
			
		||||
	pushedi		equ	dword ptr[esp+NbStack-16]
 | 
			
		||||
	pushesi		equ	dword ptr[esp+NbStack-20]
 | 
			
		||||
	pushebx		equ	dword ptr[esp+NbStack-24]
 | 
			
		||||
 | 
			
		||||
	chain_length    equ dword ptr [esp+NbStack-28]
 | 
			
		||||
	limit           equ dword ptr [esp+NbStack-32]
 | 
			
		||||
	best_len        equ dword ptr [esp+NbStack-36]
 | 
			
		||||
	window          equ dword ptr [esp+NbStack-40]
 | 
			
		||||
	prev            equ dword ptr [esp+NbStack-44]
 | 
			
		||||
	scan_start      equ  word ptr [esp+NbStack-48]
 | 
			
		||||
	scan_end        equ  word ptr [esp+NbStack-52]
 | 
			
		||||
	match_start_ptr equ dword ptr [esp+NbStack-56]
 | 
			
		||||
	nice_match      equ dword ptr [esp+NbStack-60]
 | 
			
		||||
	scanrp          equ dword ptr [esp+NbStack-64]
 | 
			
		||||
 | 
			
		||||
	windowlen       equ dword ptr [esp+NbStack-68]
 | 
			
		||||
	match_start     equ dword ptr [esp+NbStack-72]
 | 
			
		||||
	strend			equ dword ptr [esp+NbStack-76]
 | 
			
		||||
	NbStackAdd		equ	(76-24)
 | 
			
		||||
 | 
			
		||||
    .386p
 | 
			
		||||
 | 
			
		||||
    name    gvmatch
 | 
			
		||||
    .MODEL  FLAT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@lmtype				TYPEDEF         PROTO C :PTR , :SDWORD
 | 
			
		||||
longest_match_c		PROTO           @lmtype
 | 
			
		||||
 | 
			
		||||
	dep_max_chain_length	equ	70h
 | 
			
		||||
	dep_window				equ	2ch
 | 
			
		||||
	dep_strstart			equ	60h
 | 
			
		||||
	dep_prev_length			equ 6ch
 | 
			
		||||
	dep_nice_match			equ 84h
 | 
			
		||||
	dep_w_size				equ	20h
 | 
			
		||||
	dep_prev				equ	34h
 | 
			
		||||
	dep_w_mask				equ	28h
 | 
			
		||||
	dep_good_match			equ 80h
 | 
			
		||||
	dep_match_start			equ	64h
 | 
			
		||||
	dep_lookahead			equ	68h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
_TEXT   segment
 | 
			
		||||
    public  _longest_match_asm7fff
 | 
			
		||||
 | 
			
		||||
    MAX_MATCH		equ 258
 | 
			
		||||
	MIN_MATCH		equ 3
 | 
			
		||||
	MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)
 | 
			
		||||
 | 
			
		||||
; initialize or check the variables used in match.asm.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; -----------------------------------------------------------------------
 | 
			
		||||
; Set match_start to the longest match starting at the given string and
 | 
			
		||||
; return its length. Matches shorter or equal to prev_length are discarded,
 | 
			
		||||
; in which case the result is equal to prev_length and match_start is
 | 
			
		||||
; garbage.
 | 
			
		||||
; IN assertions: cur_match is the head of the hash chain for the current
 | 
			
		||||
;   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
 | 
			
		||||
 | 
			
		||||
; int longest_match(cur_match)
 | 
			
		||||
 | 
			
		||||
_longest_match_asm7fff proc near
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	    ; return address
 | 
			
		||||
 | 
			
		||||
		mov		eax,[esp+4]
 | 
			
		||||
		mov		bx,[eax+dep_w_mask]
 | 
			
		||||
		cmp		bx,7fffh
 | 
			
		||||
		jnz		longest_match_c
 | 
			
		||||
 | 
			
		||||
	    push    ebp             
 | 
			
		||||
	    push    edi             
 | 
			
		||||
	    push    esi             
 | 
			
		||||
	    push    ebx             
 | 
			
		||||
 | 
			
		||||
	    sub     esp,NbStackAdd
 | 
			
		||||
 | 
			
		||||
		;//mov		ebp,str_s
 | 
			
		||||
		mov		ebp,eax
 | 
			
		||||
 | 
			
		||||
		mov		eax,[ebp+dep_max_chain_length]
 | 
			
		||||
		mov		ebx,[ebp+dep_prev_length]
 | 
			
		||||
		cmp		[ebp+dep_good_match],ebx	; if prev_length>=good_match chain_length >>= 2
 | 
			
		||||
		ja		noshr		
 | 
			
		||||
		shr		eax,2
 | 
			
		||||
noshr:
 | 
			
		||||
		mov		edi,[ebp+dep_nice_match]
 | 
			
		||||
		mov		chain_length,eax
 | 
			
		||||
		mov		edx,[ebp+dep_lookahead]
 | 
			
		||||
		cmp		edx,edi
 | 
			
		||||
;if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
 | 
			
		||||
		jae		nolookaheadnicematch
 | 
			
		||||
		mov		edi,edx
 | 
			
		||||
nolookaheadnicematch:
 | 
			
		||||
		mov		best_len,ebx
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		mov		esi,[ebp+dep_window]
 | 
			
		||||
		mov		ecx,[ebp+dep_strstart]
 | 
			
		||||
		mov		window,esi
 | 
			
		||||
		
 | 
			
		||||
		mov		nice_match,edi
 | 
			
		||||
		add		esi,ecx
 | 
			
		||||
		mov		scanrp,esi
 | 
			
		||||
		mov		ax,word ptr [esi]
 | 
			
		||||
		mov		bx,word ptr [esi+ebx-1]
 | 
			
		||||
		add		esi,MAX_MATCH-1
 | 
			
		||||
		mov		scan_start,ax
 | 
			
		||||
		mov		strend,esi
 | 
			
		||||
		mov		scan_end,bx
 | 
			
		||||
 | 
			
		||||
;    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
 | 
			
		||||
;        s->strstart - (IPos)MAX_DIST(s) : NIL;
 | 
			
		||||
 | 
			
		||||
		mov		esi,[ebp+dep_w_size]
 | 
			
		||||
		sub		esi,MIN_LOOKAHEAD
 | 
			
		||||
		; here esi = MAX_DIST(s)
 | 
			
		||||
		sub		ecx,esi
 | 
			
		||||
		ja		nodist
 | 
			
		||||
		xor		ecx,ecx
 | 
			
		||||
nodist:
 | 
			
		||||
		mov		limit,ecx
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		mov		eax,[ebp+dep_prev]
 | 
			
		||||
		mov		prev,eax
 | 
			
		||||
 | 
			
		||||
	    mov     ebx,dword ptr [ebp+dep_match_start]
 | 
			
		||||
	    mov     bp,scan_start
 | 
			
		||||
	    mov     edx,cur_match
 | 
			
		||||
	    mov     match_start,ebx
 | 
			
		||||
 | 
			
		||||
	    mov     bx,scan_end
 | 
			
		||||
	    mov     eax,window
 | 
			
		||||
		mov		edi,eax
 | 
			
		||||
	    add     edi,best_len
 | 
			
		||||
	    mov     esi,prev
 | 
			
		||||
		dec     edi
 | 
			
		||||
	    mov     windowlen,edi
 | 
			
		||||
	    
 | 
			
		||||
	    jmp     beginloop2
 | 
			
		||||
	    align   4
 | 
			
		||||
 | 
			
		||||
; here, in the loop
 | 
			
		||||
;;;;       eax = chain_length
 | 
			
		||||
;       edx = dx = cur_match
 | 
			
		||||
;       ecx = limit
 | 
			
		||||
;        bx = scan_end
 | 
			
		||||
;        bp = scan_start
 | 
			
		||||
;       edi = windowlen (window + best_len)
 | 
			
		||||
;       esi = prev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;// here; eax <=16
 | 
			
		||||
normalbeg0add16: 
 | 
			
		||||
		add		chain_length,16
 | 
			
		||||
		jz		exitloop
 | 
			
		||||
normalbeg0: 
 | 
			
		||||
	    cmp     word ptr[edi+edx-0],bx
 | 
			
		||||
	    je      normalbeg2
 | 
			
		||||
	    and     edx,7fffh
 | 
			
		||||
	    mov     dx,word ptr[esi+edx*2]
 | 
			
		||||
	    cmp     ecx,edx
 | 
			
		||||
	    jnb     exitloop
 | 
			
		||||
	    dec     chain_length
 | 
			
		||||
		jnz		normalbeg0
 | 
			
		||||
;jnbexitloopshort1:
 | 
			
		||||
		jmp     exitloop
 | 
			
		||||
 | 
			
		||||
contloop3:
 | 
			
		||||
	    mov     edi,windowlen
 | 
			
		||||
 | 
			
		||||
; cur_match = prev[cur_match & wmask]
 | 
			
		||||
	    and		edx,7fffh
 | 
			
		||||
	    mov     dx,word ptr[esi+edx*2]
 | 
			
		||||
; if cur_match > limit, go to exitloop
 | 
			
		||||
	    cmp     ecx,edx
 | 
			
		||||
jnbexitloopshort1:
 | 
			
		||||
	    jnb     exitloop
 | 
			
		||||
; if --chain_length != 0, go to exitloop
 | 
			
		||||
 | 
			
		||||
beginloop2:
 | 
			
		||||
		sub		chain_length,16+1
 | 
			
		||||
		jna     normalbeg0add16
 | 
			
		||||
 | 
			
		||||
do16:
 | 
			
		||||
	    cmp     word ptr[edi+edx],bx
 | 
			
		||||
	    je      normalbeg2dc0
 | 
			
		||||
 | 
			
		||||
maccn	MACRO	lab
 | 
			
		||||
	    and     edx,7fffh
 | 
			
		||||
	    mov     dx,word ptr[esi+edx*2]
 | 
			
		||||
	    cmp     ecx,edx
 | 
			
		||||
	    jnb     exitloop
 | 
			
		||||
	    cmp     word ptr[edi+edx-0],bx
 | 
			
		||||
	    je      lab
 | 
			
		||||
		ENDM
 | 
			
		||||
 | 
			
		||||
rcontloop0:
 | 
			
		||||
		maccn normalbeg2dc1
 | 
			
		||||
 | 
			
		||||
rcontloop1:
 | 
			
		||||
		maccn normalbeg2dc2
 | 
			
		||||
 | 
			
		||||
rcontloop2:
 | 
			
		||||
		maccn normalbeg2dc3
 | 
			
		||||
 | 
			
		||||
rcontloop3:
 | 
			
		||||
		maccn normalbeg2dc4
 | 
			
		||||
 | 
			
		||||
rcontloop4:
 | 
			
		||||
		maccn normalbeg2dc5
 | 
			
		||||
 | 
			
		||||
rcontloop5:
 | 
			
		||||
		maccn normalbeg2dc6
 | 
			
		||||
 | 
			
		||||
rcontloop6:
 | 
			
		||||
		maccn normalbeg2dc7
 | 
			
		||||
 | 
			
		||||
rcontloop7:
 | 
			
		||||
		maccn normalbeg2dc8
 | 
			
		||||
 | 
			
		||||
rcontloop8:
 | 
			
		||||
		maccn normalbeg2dc9
 | 
			
		||||
 | 
			
		||||
rcontloop9:
 | 
			
		||||
		maccn normalbeg2dc10
 | 
			
		||||
 | 
			
		||||
rcontloop10:
 | 
			
		||||
		maccn normalbeg2dc11
 | 
			
		||||
 | 
			
		||||
rcontloop11:
 | 
			
		||||
		maccn short normalbeg2dc12
 | 
			
		||||
 | 
			
		||||
rcontloop12:
 | 
			
		||||
		maccn short normalbeg2dc13
 | 
			
		||||
 | 
			
		||||
rcontloop13:
 | 
			
		||||
		maccn short normalbeg2dc14
 | 
			
		||||
 | 
			
		||||
rcontloop14:
 | 
			
		||||
		maccn short normalbeg2dc15
 | 
			
		||||
 | 
			
		||||
rcontloop15:
 | 
			
		||||
	    and     edx,7fffh
 | 
			
		||||
	    mov     dx,word ptr[esi+edx*2]
 | 
			
		||||
	    cmp     ecx,edx
 | 
			
		||||
	    jnb     short exitloopshort
 | 
			
		||||
 | 
			
		||||
		sub		chain_length,16
 | 
			
		||||
		ja		do16
 | 
			
		||||
		jmp		normalbeg0add16
 | 
			
		||||
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
exitloopshort:
 | 
			
		||||
		jmp		exitloop                  
 | 
			
		||||
 | 
			
		||||
normbeg	MACRO	rcontlab,valsub
 | 
			
		||||
	    cmp     bp,word ptr[eax+edx]
 | 
			
		||||
		jne		rcontlab
 | 
			
		||||
		add     chain_length,16-valsub
 | 
			
		||||
		jmp		iseq
 | 
			
		||||
		ENDM
 | 
			
		||||
 | 
			
		||||
normalbeg2dc12:
 | 
			
		||||
		normbeg	rcontloop12,12
 | 
			
		||||
 | 
			
		||||
normalbeg2dc13:
 | 
			
		||||
		normbeg	rcontloop13,13
 | 
			
		||||
 | 
			
		||||
normalbeg2dc14:
 | 
			
		||||
		normbeg	rcontloop14,14
 | 
			
		||||
 | 
			
		||||
normalbeg2dc15:
 | 
			
		||||
		normbeg	rcontloop15,15
 | 
			
		||||
 | 
			
		||||
normalbeg2dc11:
 | 
			
		||||
		normbeg	rcontloop11,11
 | 
			
		||||
 | 
			
		||||
normalbeg2dc10:
 | 
			
		||||
		normbeg	rcontloop10,10
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
normalbeg2dc9:
 | 
			
		||||
		normbeg	rcontloop9,9
 | 
			
		||||
 | 
			
		||||
normalbeg2dc8:
 | 
			
		||||
		normbeg	rcontloop8,8
 | 
			
		||||
 | 
			
		||||
normalbeg2dc7:
 | 
			
		||||
		normbeg	rcontloop7,7
 | 
			
		||||
 | 
			
		||||
normalbeg2dc5:
 | 
			
		||||
		normbeg	rcontloop5,5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
normalbeg2dc6:
 | 
			
		||||
		normbeg	rcontloop6,6
 | 
			
		||||
 | 
			
		||||
normalbeg2dc4:
 | 
			
		||||
		normbeg	rcontloop4,4
 | 
			
		||||
 | 
			
		||||
normalbeg2dc3:
 | 
			
		||||
		normbeg	rcontloop3,3
 | 
			
		||||
 | 
			
		||||
normalbeg2dc2:
 | 
			
		||||
		normbeg	rcontloop2,2
 | 
			
		||||
 | 
			
		||||
normalbeg2dc1:
 | 
			
		||||
		normbeg	rcontloop1,1
 | 
			
		||||
 | 
			
		||||
normalbeg2dc0:
 | 
			
		||||
		normbeg	rcontloop0,0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end
 | 
			
		||||
 | 
			
		||||
normalbeg2:
 | 
			
		||||
 | 
			
		||||
			 ; 10 nop here take 10% time
 | 
			
		||||
		mov		edi,window
 | 
			
		||||
		  ;mov     chain_length,eax    ; now, we need eax...
 | 
			
		||||
					
 | 
			
		||||
	    cmp     bp,word ptr[edi+edx]
 | 
			
		||||
	    jne     contloop3                   ; if *(ushf*)match != scan_start, continue
 | 
			
		||||
 | 
			
		||||
iseq:
 | 
			
		||||
 | 
			
		||||
		mov		edi,eax
 | 
			
		||||
	    mov     esi,scanrp                  ; esi = scan    
 | 
			
		||||
	    add     edi,edx				; edi = window + cur_match = match
 | 
			
		||||
 | 
			
		||||
		       
 | 
			
		||||
	    mov     eax,[esi+3]					; compare manually dword at match+3
 | 
			
		||||
	    xor     eax,[edi+3]                 ;       and scan +3
 | 
			
		||||
 | 
			
		||||
	    jz      begincompare                ; if equal, go to long compare
 | 
			
		||||
 | 
			
		||||
			; we will determine the unmatch byte and calculate len (in esi)
 | 
			
		||||
		or		al,al
 | 
			
		||||
		je		eq1rr
 | 
			
		||||
	    mov     esi,3
 | 
			
		||||
	    jmp     trfinval
 | 
			
		||||
eq1rr:
 | 
			
		||||
	    or      ax,ax                               
 | 
			
		||||
	    je      eq1
 | 
			
		||||
 | 
			
		||||
	    mov     esi,4
 | 
			
		||||
	    jmp     trfinval
 | 
			
		||||
eq1:
 | 
			
		||||
	    shl     eax,8
 | 
			
		||||
	    jz      eq11
 | 
			
		||||
	    mov     esi,5
 | 
			
		||||
	    jmp     trfinval
 | 
			
		||||
eq11:
 | 
			
		||||
	    mov     esi,6
 | 
			
		||||
	    jmp     trfinval
 | 
			
		||||
 | 
			
		||||
begincompare:
 | 
			
		||||
		; here we now scan and match begin same
 | 
			
		||||
	    add     edi,6
 | 
			
		||||
	    add     esi,6
 | 
			
		||||
	    mov     ecx,(MAX_MATCH-(2+4))/4     ;//; scan for at most MAX_MATCH bytes
 | 
			
		||||
	    repe    cmpsd                                               ;//; loop until mismatch
 | 
			
		||||
 | 
			
		||||
	    je      trfin                                               ; go to trfin if not unmatch
 | 
			
		||||
			; we determine the unmatch byte
 | 
			
		||||
	    sub     esi,4
 | 
			
		||||
	    mov     eax,[edi-4]
 | 
			
		||||
	    xor     eax,[esi]
 | 
			
		||||
	    or      al,al
 | 
			
		||||
 | 
			
		||||
	    jnz     trfin
 | 
			
		||||
	    inc     esi
 | 
			
		||||
 | 
			
		||||
	    or      ax,ax
 | 
			
		||||
	    jnz     trfin
 | 
			
		||||
	    inc     esi
 | 
			
		||||
 | 
			
		||||
	    shl     eax,8           
 | 
			
		||||
	    jnz     trfin
 | 
			
		||||
	    inc     esi
 | 
			
		||||
 | 
			
		||||
trfin:      
 | 
			
		||||
	    sub     esi,scanrp          ; esi = len
 | 
			
		||||
trfinval:
 | 
			
		||||
	    cmp     esi,best_len        ; if len <= best_len, go contloop2
 | 
			
		||||
	    jbe     contloop2
 | 
			
		||||
 | 
			
		||||
	    mov     best_len,esi        ; len become best_len
 | 
			
		||||
 | 
			
		||||
	    mov     match_start,edx
 | 
			
		||||
	    cmp     esi,nice_match ;//; if esi >= nice_match, exit
 | 
			
		||||
	    mov     ecx,scanrp
 | 
			
		||||
	    jae     exitloop
 | 
			
		||||
	    add     esi,window
 | 
			
		||||
	    add     ecx,best_len
 | 
			
		||||
			dec             esi
 | 
			
		||||
	    mov     windowlen,esi
 | 
			
		||||
	    mov     bx,[ecx-1]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; now we restore eax, ecx and esi, for the big loop :
 | 
			
		||||
contloop2:
 | 
			
		||||
	    mov     esi,prev
 | 
			
		||||
	    mov     ecx,limit
 | 
			
		||||
	    ;mov     eax,chain_length
 | 
			
		||||
		mov		eax,window
 | 
			
		||||
	    jmp     contloop3
 | 
			
		||||
 | 
			
		||||
exitloop:        
 | 
			
		||||
	    mov     ebx,match_start
 | 
			
		||||
		mov		ebp,str_s
 | 
			
		||||
	    mov     dword ptr [ebp+dep_match_start],ebx
 | 
			
		||||
	    mov     eax,best_len
 | 
			
		||||
	    add     esp,NbStackAdd
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	    pop     ebx
 | 
			
		||||
	    pop     esi
 | 
			
		||||
	    pop     edi
 | 
			
		||||
	    pop     ebp 
 | 
			
		||||
	    ret
 | 
			
		||||
 | 
			
		||||
_longest_match_asm7fff endp
 | 
			
		||||
 | 
			
		||||
_TEXT   ends
 | 
			
		||||
end
 | 
			
		||||
					
 | 
			
		||||
							
								
								
									
										229
									
								
								contrib/asm386/gvmat32c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										229
									
								
								contrib/asm386/gvmat32c.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,229 @@
 | 
			
		||||
/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
 | 
			
		||||
 * File written by Gilles Vollant, by modifiying the longest_match
 | 
			
		||||
 *  from Jean-loup Gailly in deflate.c
 | 
			
		||||
 *  it prepare all parameters and call the assembly longest_match_gvasm
 | 
			
		||||
 *  longest_match execute standard C code is wmask != 0x7fff
 | 
			
		||||
 *     (assembly code is faster with a fixed wmask)
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
//#pragma optimize("agt",on)
 | 
			
		||||
 | 
			
		||||
#include "deflate.h"
 | 
			
		||||
 | 
			
		||||
#undef FAR
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
#ifdef ASMV
 | 
			
		||||
 | 
			
		||||
#define NIL 0
 | 
			
		||||
 | 
			
		||||
static unsigned int tot=0;
 | 
			
		||||
static unsigned int totl0=0;
 | 
			
		||||
static unsigned int totl0p0=0;
 | 
			
		||||
static unsigned int ba0=0;
 | 
			
		||||
static unsigned int ba1=0;
 | 
			
		||||
static unsigned int cpta=0;
 | 
			
		||||
static unsigned int cptb=0;
 | 
			
		||||
 | 
			
		||||
#define UNALIGNED_OK
 | 
			
		||||
#define gvshow(a,b,c,d)
 | 
			
		||||
/*
 | 
			
		||||
void gvshow(int chain_length,int len,int limit,ushf* prev)
 | 
			
		||||
{
 | 
			
		||||
static int ival=0;
 | 
			
		||||
char sz[80];
 | 
			
		||||
unsigned long i;
 | 
			
		||||
int prev0=*prev;
 | 
			
		||||
	ival++;
 | 
			
		||||
	//wsprintf(sz,"call %u, len=%u, chain_length=%u\n",ival,len,chain_length);
 | 
			
		||||
	//OutputDebugString(sz);
 | 
			
		||||
	tot++;
 | 
			
		||||
	if (limit==NIL)
 | 
			
		||||
		totl0++;
 | 
			
		||||
	if ((limit==NIL) && (prev0==0))
 | 
			
		||||
		totl0p0++;
 | 
			
		||||
	for (i=limit+1;i<32768;i++)
 | 
			
		||||
	{
 | 
			
		||||
		ush va=*(prev+i);
 | 
			
		||||
		if (ba0>4000000000)
 | 
			
		||||
		{
 | 
			
		||||
			ba0+=10;
 | 
			
		||||
		}
 | 
			
		||||
		ba0++;
 | 
			
		||||
		if ((va>limit) || (va==0))
 | 
			
		||||
			continue;
 | 
			
		||||
		ba1++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* if your C compiler don't add underline before function name,
 | 
			
		||||
		define ADD_UNDERLINE_ASMFUNC */
 | 
			
		||||
#ifdef ADD_UNDERLINE_ASMFUNC
 | 
			
		||||
#define longest_match_asm7fff _longest_match_asm7fff
 | 
			
		||||
#endif
 | 
			
		||||
void match_init()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uInt longest_match_c(
 | 
			
		||||
    deflate_state *s,
 | 
			
		||||
    IPos cur_match);                             /* current match */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uInt longest_match_asm7fff(
 | 
			
		||||
    deflate_state *s,
 | 
			
		||||
    IPos cur_match);                             /* current match */
 | 
			
		||||
 | 
			
		||||
uInt longest_match(
 | 
			
		||||
    deflate_state *s,
 | 
			
		||||
    IPos cur_match)                             /* current match */
 | 
			
		||||
{
 | 
			
		||||
    if (s->w_mask == 0x7fff)
 | 
			
		||||
        return longest_match_asm7fff(s,cur_match);
 | 
			
		||||
    return longest_match_c(s,cur_match);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uInt longest_match_c(s, cur_match)
 | 
			
		||||
    deflate_state *s;
 | 
			
		||||
    IPos cur_match;                             /* current match */
 | 
			
		||||
{
 | 
			
		||||
    unsigned chain_length = s->max_chain_length;/* max hash chain length */
 | 
			
		||||
    register Bytef *scan = s->window + s->strstart; /* current string */
 | 
			
		||||
    register Bytef *match;                       /* matched string */
 | 
			
		||||
    register int len;                           /* length of current match */
 | 
			
		||||
    int best_len = s->prev_length;              /* best match length so far */
 | 
			
		||||
    int nice_match = s->nice_match;             /* stop if match long enough */
 | 
			
		||||
    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
 | 
			
		||||
        s->strstart - (IPos)MAX_DIST(s) : NIL;
 | 
			
		||||
    /* Stop when cur_match becomes <= limit. To simplify the code,
 | 
			
		||||
     * we prevent matches with the string of window index 0.
 | 
			
		||||
     */
 | 
			
		||||
    Posf *prev = s->prev;
 | 
			
		||||
    uInt wmask = s->w_mask;
 | 
			
		||||
 | 
			
		||||
#ifdef UNALIGNED_OK
 | 
			
		||||
    /* Compare two bytes at a time. Note: this is not always beneficial.
 | 
			
		||||
     * Try with and without -DUNALIGNED_OK to check.
 | 
			
		||||
     */
 | 
			
		||||
    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
 | 
			
		||||
    register ush scan_start = *(ushf*)scan;
 | 
			
		||||
    register ush scan_end   = *(ushf*)(scan+best_len-1);
 | 
			
		||||
#else
 | 
			
		||||
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
 | 
			
		||||
    register Byte scan_end1  = scan[best_len-1];
 | 
			
		||||
    register Byte scan_end   = scan[best_len];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
 | 
			
		||||
     * It is easy to get rid of this optimization if necessary.
 | 
			
		||||
     */
 | 
			
		||||
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
 | 
			
		||||
 | 
			
		||||
    /* Do not waste too much time if we already have a good match: */
 | 
			
		||||
    if (s->prev_length >= s->good_match) {
 | 
			
		||||
        chain_length >>= 2;
 | 
			
		||||
    }
 | 
			
		||||
    /* Do not look for matches beyond the end of the input. This is necessary
 | 
			
		||||
     * to make deflate deterministic.
 | 
			
		||||
     */
 | 
			
		||||
    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
 | 
			
		||||
 | 
			
		||||
    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
 | 
			
		||||
 | 
			
		||||
    do {
 | 
			
		||||
        Assert(cur_match < s->strstart, "no future");
 | 
			
		||||
        match = s->window + cur_match;
 | 
			
		||||
 | 
			
		||||
        /* Skip to next match if the match length cannot increase
 | 
			
		||||
         * or if the match length is less than 2:
 | 
			
		||||
         */
 | 
			
		||||
#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
 | 
			
		||||
        /* This code assumes sizeof(unsigned short) == 2. Do not use
 | 
			
		||||
         * UNALIGNED_OK if your compiler uses a different size.
 | 
			
		||||
         */
 | 
			
		||||
        if (*(ushf*)(match+best_len-1) != scan_end ||
 | 
			
		||||
            *(ushf*)match != scan_start) continue;
 | 
			
		||||
 | 
			
		||||
        /* It is not necessary to compare scan[2] and match[2] since they are
 | 
			
		||||
         * always equal when the other bytes match, given that the hash keys
 | 
			
		||||
         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
 | 
			
		||||
         * strstart+3, +5, ... up to strstart+257. We check for insufficient
 | 
			
		||||
         * lookahead only every 4th comparison; the 128th check will be made
 | 
			
		||||
         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
 | 
			
		||||
         * necessary to put more guard bytes at the end of the window, or
 | 
			
		||||
         * to check more often for insufficient lookahead.
 | 
			
		||||
         */
 | 
			
		||||
        Assert(scan[2] == match[2], "scan[2]?");
 | 
			
		||||
        scan++, match++;
 | 
			
		||||
        do {
 | 
			
		||||
        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
			
		||||
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
			
		||||
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
			
		||||
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
 | 
			
		||||
                 scan < strend);
 | 
			
		||||
        /* The funny "do {}" generates better code on most compilers */
 | 
			
		||||
 | 
			
		||||
        /* Here, scan <= window+strstart+257 */
 | 
			
		||||
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
 | 
			
		||||
        if (*scan == *match) scan++;
 | 
			
		||||
 | 
			
		||||
        len = (MAX_MATCH - 1) - (int)(strend-scan);
 | 
			
		||||
        scan = strend - (MAX_MATCH-1);
 | 
			
		||||
 | 
			
		||||
#else /* UNALIGNED_OK */
 | 
			
		||||
 | 
			
		||||
        if (match[best_len]   != scan_end  ||
 | 
			
		||||
            match[best_len-1] != scan_end1 ||
 | 
			
		||||
            *match            != *scan     ||
 | 
			
		||||
            *++match          != scan[1])      continue;
 | 
			
		||||
 | 
			
		||||
        /* The check at best_len-1 can be removed because it will be made
 | 
			
		||||
         * again later. (This heuristic is not always a win.)
 | 
			
		||||
         * It is not necessary to compare scan[2] and match[2] since they
 | 
			
		||||
         * are always equal when the other bytes match, given that
 | 
			
		||||
         * the hash keys are equal and that HASH_BITS >= 8.
 | 
			
		||||
         */
 | 
			
		||||
        scan += 2, match++;
 | 
			
		||||
        Assert(*scan == *match, "match[2]?");
 | 
			
		||||
 | 
			
		||||
        /* We check for insufficient lookahead only every 8th comparison;
 | 
			
		||||
         * the 256th check will be made at strstart+258.
 | 
			
		||||
         */
 | 
			
		||||
        do {
 | 
			
		||||
        } while (*++scan == *++match && *++scan == *++match &&
 | 
			
		||||
                 *++scan == *++match && *++scan == *++match &&
 | 
			
		||||
                 *++scan == *++match && *++scan == *++match &&
 | 
			
		||||
                 *++scan == *++match && *++scan == *++match &&
 | 
			
		||||
                 scan < strend);
 | 
			
		||||
 | 
			
		||||
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
 | 
			
		||||
 | 
			
		||||
        len = MAX_MATCH - (int)(strend - scan);
 | 
			
		||||
        scan = strend - MAX_MATCH;
 | 
			
		||||
 | 
			
		||||
#endif /* UNALIGNED_OK */
 | 
			
		||||
 | 
			
		||||
        if (len > best_len) {
 | 
			
		||||
            s->match_start = cur_match;
 | 
			
		||||
            best_len = len;
 | 
			
		||||
            if (len >= nice_match) break;
 | 
			
		||||
#ifdef UNALIGNED_OK
 | 
			
		||||
            scan_end = *(ushf*)(scan+best_len-1);
 | 
			
		||||
#else
 | 
			
		||||
            scan_end1  = scan[best_len-1];
 | 
			
		||||
            scan_end   = scan[best_len];
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
    } while ((cur_match = prev[cur_match & wmask]) > limit
 | 
			
		||||
             && --chain_length != 0);
 | 
			
		||||
 | 
			
		||||
    if ((uInt)best_len <= s->lookahead) return best_len;
 | 
			
		||||
    return s->lookahead;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* ASMV */
 | 
			
		||||
							
								
								
									
										1
									
								
								contrib/asm386/mkgvmt32.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								contrib/asm386/mkgvmt32.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
c:\masm611\bin\ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm
 | 
			
		||||
							
								
								
									
										781
									
								
								contrib/asm386/zlibvc.mak
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										781
									
								
								contrib/asm386/zlibvc.mak
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,781 @@
 | 
			
		||||
# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
 | 
			
		||||
# ** DO NOT EDIT **
 | 
			
		||||
 | 
			
		||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
 | 
			
		||||
 | 
			
		||||
!IF "$(CFG)" == ""
 | 
			
		||||
CFG=zlibvc - Win32 Debug
 | 
			
		||||
!MESSAGE No configuration specified.  Defaulting to zlibvc - Win32 Debug.
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
!IF "$(CFG)" != "zlibvc - Win32 Release" && "$(CFG)" != "zlibvc - Win32 Debug"
 | 
			
		||||
!MESSAGE Invalid configuration "$(CFG)" specified.
 | 
			
		||||
!MESSAGE You can specify a configuration when running NMAKE on this makefile
 | 
			
		||||
!MESSAGE by defining the macro CFG on the command line.  For example:
 | 
			
		||||
!MESSAGE 
 | 
			
		||||
!MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Debug"
 | 
			
		||||
!MESSAGE 
 | 
			
		||||
!MESSAGE Possible choices for configuration are:
 | 
			
		||||
!MESSAGE 
 | 
			
		||||
!MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
 | 
			
		||||
!MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
 | 
			
		||||
!MESSAGE 
 | 
			
		||||
!ERROR An invalid configuration is specified.
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
!IF "$(OS)" == "Windows_NT"
 | 
			
		||||
NULL=
 | 
			
		||||
!ELSE 
 | 
			
		||||
NULL=nul
 | 
			
		||||
!ENDIF 
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Project
 | 
			
		||||
# PROP Target_Last_Scanned "zlibvc - Win32 Debug"
 | 
			
		||||
CPP=cl.exe
 | 
			
		||||
RSC=rc.exe
 | 
			
		||||
MTL=mktyplib.exe
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
# PROP BASE Use_MFC 0
 | 
			
		||||
# PROP BASE Use_Debug_Libraries 0
 | 
			
		||||
# PROP BASE Output_Dir "Release"
 | 
			
		||||
# PROP BASE Intermediate_Dir "Release"
 | 
			
		||||
# PROP BASE Target_Dir ""
 | 
			
		||||
# PROP Use_MFC 0
 | 
			
		||||
# PROP Use_Debug_Libraries 0
 | 
			
		||||
# PROP Output_Dir "Release"
 | 
			
		||||
# PROP Intermediate_Dir "Release"
 | 
			
		||||
# PROP Target_Dir ""
 | 
			
		||||
OUTDIR=.\Release
 | 
			
		||||
INTDIR=.\Release
 | 
			
		||||
 | 
			
		||||
ALL : "$(OUTDIR)\zlib.dll" "$(OUTDIR)\zlibvc.bsc"
 | 
			
		||||
 | 
			
		||||
CLEAN : 
 | 
			
		||||
	-@erase "$(INTDIR)\adler32.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\adler32.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\compress.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\compress.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\crc32.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\crc32.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\deflate.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\deflate.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\gvmat32c.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\gvmat32c.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\gzio.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\gzio.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\infblock.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\infblock.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\infcodes.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\infcodes.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\inffast.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\inffast.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\inflate.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\inflate.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\inftrees.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\inftrees.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\infutil.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\infutil.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\trees.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\trees.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\uncompr.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\uncompr.sbr"
 | 
			
		||||
	-@erase "$(INTDIR)\zlib.res"
 | 
			
		||||
	-@erase "$(INTDIR)\zutil.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\zutil.sbr"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.dll"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.exp"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.lib"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.map"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlibvc.bsc"
 | 
			
		||||
 | 
			
		||||
"$(OUTDIR)" :
 | 
			
		||||
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 | 
			
		||||
 | 
			
		||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
 | 
			
		||||
# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D fdopen=_fdopen /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "ASMV" /FR /YX /c
 | 
			
		||||
CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "NDEBUG" /D fdopen=_fdopen /D "WIN32" /D\
 | 
			
		||||
 "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "ASMV"\
 | 
			
		||||
 /FR"$(INTDIR)/" /Fp"$(INTDIR)/zlibvc.pch" /YX /Fo"$(INTDIR)/" /c 
 | 
			
		||||
CPP_OBJS=.\Release/
 | 
			
		||||
CPP_SBRS=.\Release/
 | 
			
		||||
# ADD BASE MTL /nologo /D "NDEBUG" /win32
 | 
			
		||||
# ADD MTL /nologo /D "NDEBUG" /win32
 | 
			
		||||
MTL_PROJ=/nologo /D "NDEBUG" /win32 
 | 
			
		||||
# ADD BASE RSC /l 0x40c /d "NDEBUG"
 | 
			
		||||
# ADD RSC /l 0x40c /d "NDEBUG"
 | 
			
		||||
RSC_PROJ=/l 0x40c /fo"$(INTDIR)/zlib.res" /d "NDEBUG" 
 | 
			
		||||
BSC32=bscmake.exe
 | 
			
		||||
# ADD BASE BSC32 /nologo
 | 
			
		||||
# ADD BSC32 /nologo
 | 
			
		||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)/zlibvc.bsc" 
 | 
			
		||||
BSC32_SBRS= \
 | 
			
		||||
	"$(INTDIR)\adler32.sbr" \
 | 
			
		||||
	"$(INTDIR)\compress.sbr" \
 | 
			
		||||
	"$(INTDIR)\crc32.sbr" \
 | 
			
		||||
	"$(INTDIR)\deflate.sbr" \
 | 
			
		||||
	"$(INTDIR)\gvmat32c.sbr" \
 | 
			
		||||
	"$(INTDIR)\gzio.sbr" \
 | 
			
		||||
	"$(INTDIR)\infblock.sbr" \
 | 
			
		||||
	"$(INTDIR)\infcodes.sbr" \
 | 
			
		||||
	"$(INTDIR)\inffast.sbr" \
 | 
			
		||||
	"$(INTDIR)\inflate.sbr" \
 | 
			
		||||
	"$(INTDIR)\inftrees.sbr" \
 | 
			
		||||
	"$(INTDIR)\infutil.sbr" \
 | 
			
		||||
	"$(INTDIR)\trees.sbr" \
 | 
			
		||||
	"$(INTDIR)\uncompr.sbr" \
 | 
			
		||||
	"$(INTDIR)\zutil.sbr"
 | 
			
		||||
 | 
			
		||||
"$(OUTDIR)\zlibvc.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
 | 
			
		||||
    $(BSC32) @<<
 | 
			
		||||
  $(BSC32_FLAGS) $(BSC32_SBRS)
 | 
			
		||||
<<
 | 
			
		||||
 | 
			
		||||
LINK32=link.exe
 | 
			
		||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
 | 
			
		||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:"Release/zlib.dll"
 | 
			
		||||
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
 | 
			
		||||
 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo\
 | 
			
		||||
 /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/zlib.pdb"\
 | 
			
		||||
 /map:"$(INTDIR)/zlib.map" /machine:I386 /nodefaultlib /def:".\zlib.def"\
 | 
			
		||||
 /out:"$(OUTDIR)/zlib.dll" /implib:"$(OUTDIR)/zlib.lib" 
 | 
			
		||||
DEF_FILE= \
 | 
			
		||||
	".\zlib.def"
 | 
			
		||||
LINK32_OBJS= \
 | 
			
		||||
	"$(INTDIR)\adler32.obj" \
 | 
			
		||||
	"$(INTDIR)\compress.obj" \
 | 
			
		||||
	"$(INTDIR)\crc32.obj" \
 | 
			
		||||
	"$(INTDIR)\deflate.obj" \
 | 
			
		||||
	"$(INTDIR)\gvmat32c.obj" \
 | 
			
		||||
	"$(INTDIR)\gzio.obj" \
 | 
			
		||||
	"$(INTDIR)\infblock.obj" \
 | 
			
		||||
	"$(INTDIR)\infcodes.obj" \
 | 
			
		||||
	"$(INTDIR)\inffast.obj" \
 | 
			
		||||
	"$(INTDIR)\inflate.obj" \
 | 
			
		||||
	"$(INTDIR)\inftrees.obj" \
 | 
			
		||||
	"$(INTDIR)\infutil.obj" \
 | 
			
		||||
	"$(INTDIR)\trees.obj" \
 | 
			
		||||
	"$(INTDIR)\uncompr.obj" \
 | 
			
		||||
	"$(INTDIR)\zlib.res" \
 | 
			
		||||
	"$(INTDIR)\zutil.obj" \
 | 
			
		||||
	".\GVMAT32.obj"
 | 
			
		||||
 | 
			
		||||
"$(OUTDIR)\zlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
 | 
			
		||||
    $(LINK32) @<<
 | 
			
		||||
  $(LINK32_FLAGS) $(LINK32_OBJS)
 | 
			
		||||
<<
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
# PROP BASE Use_MFC 0
 | 
			
		||||
# PROP BASE Use_Debug_Libraries 1
 | 
			
		||||
# PROP BASE Output_Dir "Debug"
 | 
			
		||||
# PROP BASE Intermediate_Dir "Debug"
 | 
			
		||||
# PROP BASE Target_Dir ""
 | 
			
		||||
# PROP Use_MFC 0
 | 
			
		||||
# PROP Use_Debug_Libraries 1
 | 
			
		||||
# PROP Output_Dir "Debug"
 | 
			
		||||
# PROP Intermediate_Dir "Debug"
 | 
			
		||||
# PROP Target_Dir ""
 | 
			
		||||
OUTDIR=.\Debug
 | 
			
		||||
INTDIR=.\Debug
 | 
			
		||||
 | 
			
		||||
ALL : "$(OUTDIR)\zlib.dll"
 | 
			
		||||
 | 
			
		||||
CLEAN : 
 | 
			
		||||
	-@erase "$(INTDIR)\adler32.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\compress.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\crc32.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\deflate.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\gvmat32c.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\gzio.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\infblock.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\infcodes.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\inffast.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\inflate.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\inftrees.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\infutil.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\trees.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\uncompr.obj"
 | 
			
		||||
	-@erase "$(INTDIR)\vc40.idb"
 | 
			
		||||
	-@erase "$(INTDIR)\vc40.pdb"
 | 
			
		||||
	-@erase "$(INTDIR)\zlib.res"
 | 
			
		||||
	-@erase "$(INTDIR)\zutil.obj"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.dll"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.exp"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.ilk"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.lib"
 | 
			
		||||
	-@erase "$(OUTDIR)\zlib.pdb"
 | 
			
		||||
 | 
			
		||||
"$(OUTDIR)" :
 | 
			
		||||
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 | 
			
		||||
 | 
			
		||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
 | 
			
		||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /YX /c
 | 
			
		||||
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\
 | 
			
		||||
 /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL"\
 | 
			
		||||
 /Fp"$(INTDIR)/zlibvc.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c 
 | 
			
		||||
CPP_OBJS=.\Debug/
 | 
			
		||||
CPP_SBRS=.\.
 | 
			
		||||
# ADD BASE MTL /nologo /D "_DEBUG" /win32
 | 
			
		||||
# ADD MTL /nologo /D "_DEBUG" /win32
 | 
			
		||||
MTL_PROJ=/nologo /D "_DEBUG" /win32 
 | 
			
		||||
# ADD BASE RSC /l 0x40c /d "_DEBUG"
 | 
			
		||||
# ADD RSC /l 0x40c /d "_DEBUG"
 | 
			
		||||
RSC_PROJ=/l 0x40c /fo"$(INTDIR)/zlib.res" /d "_DEBUG" 
 | 
			
		||||
BSC32=bscmake.exe
 | 
			
		||||
# ADD BASE BSC32 /nologo
 | 
			
		||||
# ADD BSC32 /nologo
 | 
			
		||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)/zlibvc.bsc" 
 | 
			
		||||
BSC32_SBRS= \
 | 
			
		||||
	
 | 
			
		||||
LINK32=link.exe
 | 
			
		||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
 | 
			
		||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/zlib.dll"
 | 
			
		||||
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
 | 
			
		||||
 advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
 | 
			
		||||
 /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)/zlib.pdb" /debug\
 | 
			
		||||
 /machine:I386 /def:".\zlib.def" /out:"$(OUTDIR)/zlib.dll"\
 | 
			
		||||
 /implib:"$(OUTDIR)/zlib.lib" 
 | 
			
		||||
DEF_FILE= \
 | 
			
		||||
	".\zlib.def"
 | 
			
		||||
LINK32_OBJS= \
 | 
			
		||||
	"$(INTDIR)\adler32.obj" \
 | 
			
		||||
	"$(INTDIR)\compress.obj" \
 | 
			
		||||
	"$(INTDIR)\crc32.obj" \
 | 
			
		||||
	"$(INTDIR)\deflate.obj" \
 | 
			
		||||
	"$(INTDIR)\gvmat32c.obj" \
 | 
			
		||||
	"$(INTDIR)\gzio.obj" \
 | 
			
		||||
	"$(INTDIR)\infblock.obj" \
 | 
			
		||||
	"$(INTDIR)\infcodes.obj" \
 | 
			
		||||
	"$(INTDIR)\inffast.obj" \
 | 
			
		||||
	"$(INTDIR)\inflate.obj" \
 | 
			
		||||
	"$(INTDIR)\inftrees.obj" \
 | 
			
		||||
	"$(INTDIR)\infutil.obj" \
 | 
			
		||||
	"$(INTDIR)\trees.obj" \
 | 
			
		||||
	"$(INTDIR)\uncompr.obj" \
 | 
			
		||||
	"$(INTDIR)\zlib.res" \
 | 
			
		||||
	"$(INTDIR)\zutil.obj" \
 | 
			
		||||
	".\GVMAT32.obj"
 | 
			
		||||
 | 
			
		||||
"$(OUTDIR)\zlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
 | 
			
		||||
    $(LINK32) @<<
 | 
			
		||||
  $(LINK32_FLAGS) $(LINK32_OBJS)
 | 
			
		||||
<<
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
.c{$(CPP_OBJS)}.obj:
 | 
			
		||||
   $(CPP) $(CPP_PROJ) $<  
 | 
			
		||||
 | 
			
		||||
.cpp{$(CPP_OBJS)}.obj:
 | 
			
		||||
   $(CPP) $(CPP_PROJ) $<  
 | 
			
		||||
 | 
			
		||||
.cxx{$(CPP_OBJS)}.obj:
 | 
			
		||||
   $(CPP) $(CPP_PROJ) $<  
 | 
			
		||||
 | 
			
		||||
.c{$(CPP_SBRS)}.sbr:
 | 
			
		||||
   $(CPP) $(CPP_PROJ) $<  
 | 
			
		||||
 | 
			
		||||
.cpp{$(CPP_SBRS)}.sbr:
 | 
			
		||||
   $(CPP) $(CPP_PROJ) $<  
 | 
			
		||||
 | 
			
		||||
.cxx{$(CPP_SBRS)}.sbr:
 | 
			
		||||
   $(CPP) $(CPP_PROJ) $<  
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Target
 | 
			
		||||
 | 
			
		||||
# Name "zlibvc - Win32 Release"
 | 
			
		||||
# Name "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\adler32.c
 | 
			
		||||
DEP_CPP_ADLER=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\adler32.obj" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\adler32.sbr" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\adler32.obj" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\compress.c
 | 
			
		||||
DEP_CPP_COMPR=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\compress.obj" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\compress.sbr" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\compress.obj" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\crc32.c
 | 
			
		||||
DEP_CPP_CRC32=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\crc32.obj" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\crc32.sbr" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\crc32.obj" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\deflate.c
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
DEP_CPP_DEFLA=\
 | 
			
		||||
	".\deflate.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\deflate.obj" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\deflate.sbr" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
DEP_CPP_DEFLA=\
 | 
			
		||||
	".\deflate.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
NODEP_CPP_DEFLA=\
 | 
			
		||||
	".\local"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\deflate.obj" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\gzio.c
 | 
			
		||||
DEP_CPP_GZIO_=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\gzio.obj" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\gzio.sbr" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\gzio.obj" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\infblock.c
 | 
			
		||||
DEP_CPP_INFBL=\
 | 
			
		||||
	".\infblock.h"\
 | 
			
		||||
	".\infcodes.h"\
 | 
			
		||||
	".\inftrees.h"\
 | 
			
		||||
	".\infutil.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infblock.obj" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infblock.sbr" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infblock.obj" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\infcodes.c
 | 
			
		||||
DEP_CPP_INFCO=\
 | 
			
		||||
	".\infblock.h"\
 | 
			
		||||
	".\infcodes.h"\
 | 
			
		||||
	".\inffast.h"\
 | 
			
		||||
	".\inftrees.h"\
 | 
			
		||||
	".\infutil.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infcodes.obj" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infcodes.sbr" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infcodes.obj" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\inffast.c
 | 
			
		||||
DEP_CPP_INFFA=\
 | 
			
		||||
	".\infblock.h"\
 | 
			
		||||
	".\infcodes.h"\
 | 
			
		||||
	".\inffast.h"\
 | 
			
		||||
	".\inftrees.h"\
 | 
			
		||||
	".\infutil.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inffast.obj" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inffast.sbr" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inffast.obj" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\inflate.c
 | 
			
		||||
DEP_CPP_INFLA=\
 | 
			
		||||
	".\infblock.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inflate.obj" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inflate.sbr" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inflate.obj" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\inftrees.c
 | 
			
		||||
DEP_CPP_INFTR=\
 | 
			
		||||
	".\inftrees.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inftrees.obj" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inftrees.sbr" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\inftrees.obj" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\infutil.c
 | 
			
		||||
DEP_CPP_INFUT=\
 | 
			
		||||
	".\infblock.h"\
 | 
			
		||||
	".\infcodes.h"\
 | 
			
		||||
	".\inftrees.h"\
 | 
			
		||||
	".\infutil.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infutil.obj" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infutil.sbr" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\infutil.obj" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\trees.c
 | 
			
		||||
DEP_CPP_TREES=\
 | 
			
		||||
	".\deflate.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\trees.obj" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\trees.sbr" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\trees.obj" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\uncompr.c
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
DEP_CPP_UNCOM=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\uncompr.obj" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\uncompr.sbr" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
DEP_CPP_UNCOM=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	
 | 
			
		||||
NODEP_CPP_UNCOM=\
 | 
			
		||||
	".\uncompress"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\uncompr.obj" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\zutil.c
 | 
			
		||||
DEP_CPP_ZUTIL=\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\zutil.obj" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\zutil.sbr" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\zutil.obj" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\zlib.rc
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\zlib.res" : $(SOURCE) "$(INTDIR)"
 | 
			
		||||
   $(RSC) $(RSC_PROJ) $(SOURCE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\zlib.def
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\GVMAT32.obj
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
################################################################################
 | 
			
		||||
# Begin Source File
 | 
			
		||||
 | 
			
		||||
SOURCE=.\gvmat32c.c
 | 
			
		||||
 | 
			
		||||
!IF  "$(CFG)" == "zlibvc - Win32 Release"
 | 
			
		||||
 | 
			
		||||
DEP_CPP_GVMAT=\
 | 
			
		||||
	".\deflate.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\gvmat32c.obj" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\gvmat32c.sbr" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ELSEIF  "$(CFG)" == "zlibvc - Win32 Debug"
 | 
			
		||||
 | 
			
		||||
DEP_CPP_GVMAT=\
 | 
			
		||||
	".\deflate.h"\
 | 
			
		||||
	".\zconf.h"\
 | 
			
		||||
	".\zlib.h"\
 | 
			
		||||
	".\zutil.h"\
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
"$(INTDIR)\gvmat32c.obj" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!ENDIF 
 | 
			
		||||
 | 
			
		||||
# End Source File
 | 
			
		||||
# End Target
 | 
			
		||||
# End Project
 | 
			
		||||
################################################################################
 | 
			
		||||
							
								
								
									
										24
									
								
								contrib/iostream/test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								contrib/iostream/test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
 | 
			
		||||
#include "zfstream.h"
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
 | 
			
		||||
  // Construct a stream object with this filebuffer.  Anything sent
 | 
			
		||||
  // to this stream will go to standard out.
 | 
			
		||||
  gzofstream os( 1, ios::out );
 | 
			
		||||
 | 
			
		||||
  // This text is getting compressed and sent to stdout.
 | 
			
		||||
  // To prove this, run 'test | zcat'.
 | 
			
		||||
  os << "Hello, Mommy" << endl;
 | 
			
		||||
 | 
			
		||||
  os << setcompressionlevel( Z_NO_COMPRESSION );
 | 
			
		||||
  os << "hello, hello, hi, ho!" << endl;
 | 
			
		||||
 | 
			
		||||
  setcompressionlevel( os, Z_DEFAULT_COMPRESSION )
 | 
			
		||||
    << "I'm compressing again" << endl;
 | 
			
		||||
 | 
			
		||||
  os.close();
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										329
									
								
								contrib/iostream/zfstream.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										329
									
								
								contrib/iostream/zfstream.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,329 @@
 | 
			
		||||
 | 
			
		||||
#include <memory.h>
 | 
			
		||||
#include "zfstream.h"
 | 
			
		||||
 | 
			
		||||
gzfilebuf::gzfilebuf() :
 | 
			
		||||
  file(NULL),
 | 
			
		||||
  mode(0),
 | 
			
		||||
  own_file_descriptor(0)
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
gzfilebuf::~gzfilebuf() {
 | 
			
		||||
 | 
			
		||||
  sync();
 | 
			
		||||
  if ( own_file_descriptor )
 | 
			
		||||
    close();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzfilebuf *gzfilebuf::open( const char *name,
 | 
			
		||||
			    int io_mode ) {
 | 
			
		||||
 | 
			
		||||
  if ( is_open() )
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  char char_mode[10];
 | 
			
		||||
  char *p;
 | 
			
		||||
  memset(char_mode,'\0',10);
 | 
			
		||||
  p = char_mode;
 | 
			
		||||
 | 
			
		||||
  if ( io_mode & ios::in ) {
 | 
			
		||||
    mode = ios::in;
 | 
			
		||||
    *p++ = 'r';
 | 
			
		||||
  } else if ( io_mode & ios::app ) {
 | 
			
		||||
    mode = ios::app;
 | 
			
		||||
    *p++ = 'a';
 | 
			
		||||
  } else {
 | 
			
		||||
    mode = ios::out;
 | 
			
		||||
    *p++ = 'w';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( io_mode & ios::binary ) {
 | 
			
		||||
    mode |= ios::binary;
 | 
			
		||||
    *p++ = 'b';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Hard code the compression level
 | 
			
		||||
  if ( io_mode & (ios::out|ios::app )) {
 | 
			
		||||
    *p++ = '9';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( (file = gzopen(name, char_mode)) == NULL )
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  own_file_descriptor = 1;
 | 
			
		||||
 | 
			
		||||
  return this;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzfilebuf *gzfilebuf::attach( int file_descriptor,
 | 
			
		||||
			      int io_mode ) {
 | 
			
		||||
 | 
			
		||||
  if ( is_open() )
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  char char_mode[10];
 | 
			
		||||
  char *p;
 | 
			
		||||
  memset(char_mode,'\0',10);
 | 
			
		||||
  p = char_mode;
 | 
			
		||||
 | 
			
		||||
  if ( io_mode & ios::in ) {
 | 
			
		||||
    mode = ios::in;
 | 
			
		||||
    *p++ = 'r';
 | 
			
		||||
  } else if ( io_mode & ios::app ) {
 | 
			
		||||
    mode = ios::app;
 | 
			
		||||
    *p++ = 'a';
 | 
			
		||||
  } else {
 | 
			
		||||
    mode = ios::out;
 | 
			
		||||
    *p++ = 'w';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( io_mode & ios::binary ) {
 | 
			
		||||
    mode |= ios::binary;
 | 
			
		||||
    *p++ = 'b';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Hard code the compression level
 | 
			
		||||
  if ( io_mode & (ios::out|ios::app )) {
 | 
			
		||||
    *p++ = '9';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( (file = gzdopen(file_descriptor, char_mode)) == NULL )
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  own_file_descriptor = 0;
 | 
			
		||||
 | 
			
		||||
  return this;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzfilebuf *gzfilebuf::close() {
 | 
			
		||||
 | 
			
		||||
  if ( is_open() ) {
 | 
			
		||||
 | 
			
		||||
    sync();
 | 
			
		||||
    gzclose( file );
 | 
			
		||||
    file = NULL;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return this;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::setcompressionlevel( short comp_level ) {
 | 
			
		||||
 | 
			
		||||
  return gzsetparams(file, comp_level, -2);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::setcompressionstrategy( short comp_strategy ) {
 | 
			
		||||
 | 
			
		||||
  return gzsetparams(file, -2, comp_strategy);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
streampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) {
 | 
			
		||||
 | 
			
		||||
  return streampos(EOF);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::underflow() {
 | 
			
		||||
 | 
			
		||||
  // If the file hasn't been opened for reading, error.
 | 
			
		||||
  if ( !is_open() || !(mode & ios::in) )
 | 
			
		||||
    return EOF;
 | 
			
		||||
 | 
			
		||||
  // if a buffer doesn't exists, allocate one.
 | 
			
		||||
  if ( !base() ) {
 | 
			
		||||
 | 
			
		||||
    if ( (allocate()) == EOF )
 | 
			
		||||
      return EOF;
 | 
			
		||||
    setp(0,0);
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
 | 
			
		||||
    if ( in_avail() )
 | 
			
		||||
      return (unsigned char) *gptr();
 | 
			
		||||
 | 
			
		||||
    if ( out_waiting() ) {
 | 
			
		||||
      if ( flushbuf() == EOF )
 | 
			
		||||
	return EOF;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Attempt to fill the buffer.
 | 
			
		||||
 | 
			
		||||
  int result = fillbuf();
 | 
			
		||||
  if ( result == EOF ) {
 | 
			
		||||
    // disable get area
 | 
			
		||||
    setg(0,0,0);
 | 
			
		||||
    return EOF;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return (unsigned char) *gptr();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::overflow( int c ) {
 | 
			
		||||
 | 
			
		||||
  if ( !is_open() || !(mode & ios::out) )
 | 
			
		||||
    return EOF;
 | 
			
		||||
 | 
			
		||||
  if ( !base() ) {
 | 
			
		||||
    if ( allocate() == EOF )
 | 
			
		||||
      return EOF;
 | 
			
		||||
    setg(0,0,0);
 | 
			
		||||
  } else {
 | 
			
		||||
    if (in_avail()) {
 | 
			
		||||
	return EOF;
 | 
			
		||||
    }
 | 
			
		||||
    if (out_waiting()) {
 | 
			
		||||
      if (flushbuf() == EOF)
 | 
			
		||||
	return EOF;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  int bl = blen();
 | 
			
		||||
  setp( base(), base() + bl);
 | 
			
		||||
 | 
			
		||||
  if ( c != EOF ) {
 | 
			
		||||
 | 
			
		||||
    *pptr() = c;
 | 
			
		||||
    pbump(1);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::sync() {
 | 
			
		||||
 | 
			
		||||
  if ( !is_open() )
 | 
			
		||||
    return EOF;
 | 
			
		||||
 | 
			
		||||
  if ( out_waiting() )
 | 
			
		||||
    return flushbuf();
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::flushbuf() {
 | 
			
		||||
 | 
			
		||||
  int n;
 | 
			
		||||
  char *q;
 | 
			
		||||
 | 
			
		||||
  q = pbase();
 | 
			
		||||
  n = pptr() - q;
 | 
			
		||||
 | 
			
		||||
  if ( gzwrite( file, q, n) < n )
 | 
			
		||||
    return EOF;
 | 
			
		||||
 | 
			
		||||
  setp(0,0);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int gzfilebuf::fillbuf() {
 | 
			
		||||
 | 
			
		||||
  int required;
 | 
			
		||||
  char *p;
 | 
			
		||||
 | 
			
		||||
  p = base();
 | 
			
		||||
 | 
			
		||||
  required = blen();
 | 
			
		||||
 | 
			
		||||
  int t = gzread( file, p, required );
 | 
			
		||||
 | 
			
		||||
  if ( t <= 0) return EOF;
 | 
			
		||||
 | 
			
		||||
  setg( base(), base(), base()+t);
 | 
			
		||||
 | 
			
		||||
  return t;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzfilestream_common::gzfilestream_common() :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
gzfilestream_common::~gzfilestream_common()
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
void gzfilestream_common::attach( int fd, int io_mode ) {
 | 
			
		||||
 | 
			
		||||
  if ( !buffer.attach( fd, io_mode) )
 | 
			
		||||
    clear( ios::failbit | ios::badbit );
 | 
			
		||||
  else
 | 
			
		||||
    clear();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gzfilestream_common::open( const char *name, int io_mode ) {
 | 
			
		||||
 | 
			
		||||
  if ( !buffer.open( name, io_mode ) )
 | 
			
		||||
    clear( ios::failbit | ios::badbit );
 | 
			
		||||
  else
 | 
			
		||||
    clear();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gzfilestream_common::close() {
 | 
			
		||||
 | 
			
		||||
  if ( !buffer.close() )
 | 
			
		||||
    clear( ios::failbit | ios::badbit );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzfilebuf *gzfilestream_common::rdbuf() {
 | 
			
		||||
 | 
			
		||||
  return &buffer;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
     
 | 
			
		||||
gzifstream::gzifstream() :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{
 | 
			
		||||
  clear( ios::badbit );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzifstream::gzifstream( const char *name, int io_mode ) :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{
 | 
			
		||||
  gzfilestream_common::open( name, io_mode );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzifstream::gzifstream( int fd, int io_mode ) :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{
 | 
			
		||||
  gzfilestream_common::attach( fd, io_mode );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzifstream::~gzifstream() { }
 | 
			
		||||
 | 
			
		||||
gzofstream::gzofstream() :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{
 | 
			
		||||
  clear( ios::badbit );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzofstream::gzofstream( const char *name, int io_mode ) :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{
 | 
			
		||||
  gzfilestream_common::open( name, io_mode );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzofstream::gzofstream( int fd, int io_mode ) :
 | 
			
		||||
  ios( gzfilestream_common::rdbuf() )
 | 
			
		||||
{
 | 
			
		||||
  gzfilestream_common::attach( fd, io_mode );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gzofstream::~gzofstream() { }
 | 
			
		||||
							
								
								
									
										142
									
								
								contrib/iostream/zfstream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								contrib/iostream/zfstream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
 | 
			
		||||
#ifndef _zfstream_h
 | 
			
		||||
#define _zfstream_h
 | 
			
		||||
 | 
			
		||||
#include <fstream.h>
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
class gzfilebuf : public streambuf {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
  gzfilebuf( );
 | 
			
		||||
  virtual ~gzfilebuf();
 | 
			
		||||
 | 
			
		||||
  gzfilebuf *open( const char *name, int io_mode );
 | 
			
		||||
  gzfilebuf *attach( int file_descriptor, int io_mode );
 | 
			
		||||
  gzfilebuf *close();
 | 
			
		||||
 | 
			
		||||
  int setcompressionlevel( short comp_level );
 | 
			
		||||
  int setcompressionstrategy( short comp_strategy );
 | 
			
		||||
 | 
			
		||||
  inline int is_open() const { return (file !=NULL); }
 | 
			
		||||
 | 
			
		||||
  virtual streampos seekoff( streamoff, ios::seek_dir, int );
 | 
			
		||||
 | 
			
		||||
  virtual int sync();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
  virtual int underflow();
 | 
			
		||||
  virtual int overflow( int = EOF );
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
  gzFile file;
 | 
			
		||||
  short mode;
 | 
			
		||||
  short own_file_descriptor;
 | 
			
		||||
 | 
			
		||||
  int flushbuf();
 | 
			
		||||
  int fillbuf();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class gzfilestream_common : virtual public ios {
 | 
			
		||||
 | 
			
		||||
  friend class gzifstream;
 | 
			
		||||
  friend class gzofstream;
 | 
			
		||||
  friend gzofstream &setcompressionlevel( gzofstream &, int );
 | 
			
		||||
  friend gzofstream &setcompressionstrategy( gzofstream &, int );
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  virtual ~gzfilestream_common();
 | 
			
		||||
 | 
			
		||||
  void attach( int fd, int io_mode );
 | 
			
		||||
  void open( const char *name, int io_mode );
 | 
			
		||||
  void close();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  gzfilestream_common();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  gzfilebuf *rdbuf();
 | 
			
		||||
 | 
			
		||||
  gzfilebuf buffer;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class gzifstream : public gzfilestream_common, public istream {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
  gzifstream();
 | 
			
		||||
  gzifstream( const char *name, int io_mode = ios::in );
 | 
			
		||||
  gzifstream( int fd, int io_mode = ios::in );
 | 
			
		||||
 | 
			
		||||
  virtual ~gzifstream();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class gzofstream : public gzfilestream_common, public ostream {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
  gzofstream();
 | 
			
		||||
  gzofstream( const char *name, int io_mode = ios::out );
 | 
			
		||||
  gzofstream( int fd, int io_mode = ios::out );
 | 
			
		||||
 | 
			
		||||
  virtual ~gzofstream();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class T> class gzomanip {
 | 
			
		||||
  friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
 | 
			
		||||
public:
 | 
			
		||||
  gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
 | 
			
		||||
private:
 | 
			
		||||
  gzofstream &(*func)(gzofstream &, T);
 | 
			
		||||
  T val;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class T> gzofstream &operator<<(gzofstream &s,
 | 
			
		||||
					 const gzomanip<T> &m) {
 | 
			
		||||
  return (*m.func)(s, m.val);
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline gzofstream &setcompressionlevel( gzofstream &s, int l ) {
 | 
			
		||||
  (s.rdbuf())->setcompressionlevel(l);
 | 
			
		||||
  return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) {
 | 
			
		||||
  (s.rdbuf())->setcompressionstrategy(l);
 | 
			
		||||
  return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline gzomanip<int> setcompressionlevel(int l)
 | 
			
		||||
{
 | 
			
		||||
  return gzomanip<int>(&setcompressionlevel,l);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline gzomanip<int> setcompressionstrategy(int l)
 | 
			
		||||
{
 | 
			
		||||
  return gzomanip<int>(&setcompressionstrategy,l);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										307
									
								
								contrib/iostream2/zstream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								contrib/iostream2/zstream.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,307 @@
 | 
			
		||||
/*
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 1997
 | 
			
		||||
 * Christian Michelsen Research AS
 | 
			
		||||
 * Advanced Computing
 | 
			
		||||
 * Fantoftvegen 38, 5036 BERGEN, Norway
 | 
			
		||||
 * http://www.cmr.no
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, distribute and sell this software
 | 
			
		||||
 * and its documentation for any purpose is hereby granted without fee,
 | 
			
		||||
 * provided that the above copyright notice appear in all copies and
 | 
			
		||||
 * that both that copyright notice and this permission notice appear
 | 
			
		||||
 * in supporting documentation.  Christian Michelsen Research AS makes no
 | 
			
		||||
 * representations about the suitability of this software for any
 | 
			
		||||
 * purpose.  It is provided "as is" without express or implied warranty.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ZSTREAM__H
 | 
			
		||||
#define ZSTREAM__H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * zstream.h - C++ interface to the 'zlib' general purpose compression library
 | 
			
		||||
 * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <strstream.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
#   include <fcntl.h>
 | 
			
		||||
#   include <io.h>
 | 
			
		||||
#   define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
 | 
			
		||||
#else
 | 
			
		||||
#   define SET_BINARY_MODE(file)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
class zstringlen {
 | 
			
		||||
public:
 | 
			
		||||
    zstringlen(class izstream&);
 | 
			
		||||
    zstringlen(class ozstream&, const char*);
 | 
			
		||||
    size_t value() const { return val.word; }
 | 
			
		||||
private:
 | 
			
		||||
    struct Val { unsigned char byte; size_t word; } val;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//  ----------------------------- izstream -----------------------------
 | 
			
		||||
 | 
			
		||||
class izstream
 | 
			
		||||
{
 | 
			
		||||
    public:
 | 
			
		||||
        izstream() : m_fp(0) {}
 | 
			
		||||
        izstream(FILE* fp) : m_fp(0) { open(fp); }
 | 
			
		||||
        izstream(const char* name) : m_fp(0) { open(name); }
 | 
			
		||||
        ~izstream() { close(); }
 | 
			
		||||
 | 
			
		||||
        /* Opens a gzip (.gz) file for reading.
 | 
			
		||||
         * open() can be used to read a file which is not in gzip format;
 | 
			
		||||
         * in this case read() will directly read from the file without
 | 
			
		||||
         * decompression. errno can be checked to distinguish two error
 | 
			
		||||
         * cases (if errno is zero, the zlib error is Z_MEM_ERROR).
 | 
			
		||||
         */
 | 
			
		||||
        void open(const char* name) {
 | 
			
		||||
            if (m_fp) close();
 | 
			
		||||
            m_fp = ::gzopen(name, "rb");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void open(FILE* fp) {
 | 
			
		||||
            SET_BINARY_MODE(fp);
 | 
			
		||||
            if (m_fp) close();
 | 
			
		||||
            m_fp = ::gzdopen(fileno(fp), "rb");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Flushes all pending input if necessary, closes the compressed file
 | 
			
		||||
         * and deallocates all the (de)compression state. The return value is
 | 
			
		||||
         * the zlib error number (see function error() below).
 | 
			
		||||
         */
 | 
			
		||||
        int close() {
 | 
			
		||||
            int r = ::gzclose(m_fp);
 | 
			
		||||
            m_fp = 0; return r;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Binary read the given number of bytes from the compressed file.
 | 
			
		||||
         */
 | 
			
		||||
        int read(void* buf, size_t len) {
 | 
			
		||||
            return ::gzread(m_fp, buf, len);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Returns the error message for the last error which occurred on the
 | 
			
		||||
         * given compressed file. errnum is set to zlib error number. If an
 | 
			
		||||
         * error occurred in the file system and not in the compression library,
 | 
			
		||||
         * errnum is set to Z_ERRNO and the application may consult errno
 | 
			
		||||
         * to get the exact error code.
 | 
			
		||||
         */
 | 
			
		||||
        const char* error(int* errnum) {
 | 
			
		||||
            return ::gzerror(m_fp, errnum);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        gzFile fp() { return m_fp; }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        gzFile m_fp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Binary read the given (array of) object(s) from the compressed file.
 | 
			
		||||
 * If the input file was not in gzip format, read() copies the objects number
 | 
			
		||||
 * of bytes into the buffer.
 | 
			
		||||
 * returns the number of uncompressed bytes actually read
 | 
			
		||||
 * (0 for end of file, -1 for error).
 | 
			
		||||
 */
 | 
			
		||||
template <class T, class Items>
 | 
			
		||||
inline int read(izstream& zs, T* x, Items items) {
 | 
			
		||||
    return ::gzread(zs.fp(), x, items*sizeof(T));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Binary input with the '>' operator.
 | 
			
		||||
 */
 | 
			
		||||
template <class T>
 | 
			
		||||
inline izstream& operator>(izstream& zs, T& x) {
 | 
			
		||||
    ::gzread(zs.fp(), &x, sizeof(T));
 | 
			
		||||
    return zs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline zstringlen::zstringlen(izstream& zs) {
 | 
			
		||||
    zs > val.byte;
 | 
			
		||||
    if (val.byte == 255) zs > val.word;
 | 
			
		||||
    else val.word = val.byte;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Read length of string + the string with the '>' operator.
 | 
			
		||||
 */
 | 
			
		||||
inline izstream& operator>(izstream& zs, char* x) {
 | 
			
		||||
    zstringlen len(zs);
 | 
			
		||||
    ::gzread(zs.fp(), x, len.value());
 | 
			
		||||
    x[len.value()] = '\0';
 | 
			
		||||
    return zs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline char* read_string(izstream& zs) {
 | 
			
		||||
    zstringlen len(zs);
 | 
			
		||||
    char* x = new char[len.value()+1];
 | 
			
		||||
    ::gzread(zs.fp(), x, len.value());
 | 
			
		||||
    x[len.value()] = '\0';
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------- ozstream -----------------------------
 | 
			
		||||
 | 
			
		||||
class ozstream
 | 
			
		||||
{
 | 
			
		||||
    public:
 | 
			
		||||
        ozstream() : m_fp(0), m_os(0) {
 | 
			
		||||
        }
 | 
			
		||||
        ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION)
 | 
			
		||||
            : m_fp(0), m_os(0) {
 | 
			
		||||
            open(fp, level);
 | 
			
		||||
        }
 | 
			
		||||
        ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION)
 | 
			
		||||
            : m_fp(0), m_os(0) {
 | 
			
		||||
            open(name, level);
 | 
			
		||||
        }
 | 
			
		||||
        ~ozstream() {
 | 
			
		||||
            close();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Opens a gzip (.gz) file for writing.
 | 
			
		||||
         * The compression level parameter should be in 0..9
 | 
			
		||||
         * errno can be checked to distinguish two error cases
 | 
			
		||||
         * (if errno is zero, the zlib error is Z_MEM_ERROR).
 | 
			
		||||
         */
 | 
			
		||||
        void open(const char* name, int level = Z_DEFAULT_COMPRESSION) {
 | 
			
		||||
            char mode[4] = "wb\0";
 | 
			
		||||
            if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
 | 
			
		||||
            if (m_fp) close();
 | 
			
		||||
            m_fp = ::gzopen(name, mode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* open from a FILE pointer.
 | 
			
		||||
         */
 | 
			
		||||
        void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) {
 | 
			
		||||
            SET_BINARY_MODE(fp);
 | 
			
		||||
            char mode[4] = "wb\0";
 | 
			
		||||
            if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
 | 
			
		||||
            if (m_fp) close();
 | 
			
		||||
            m_fp = ::gzdopen(fileno(fp), mode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Flushes all pending output if necessary, closes the compressed file
 | 
			
		||||
         * and deallocates all the (de)compression state. The return value is
 | 
			
		||||
         * the zlib error number (see function error() below).
 | 
			
		||||
         */
 | 
			
		||||
        int close() {
 | 
			
		||||
            if (m_os) {
 | 
			
		||||
                ::gzwrite(m_fp, m_os->str(), m_os->pcount());
 | 
			
		||||
                delete[] m_os->str(); delete m_os; m_os = 0;
 | 
			
		||||
            }
 | 
			
		||||
            int r = ::gzclose(m_fp); m_fp = 0; return r;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Binary write the given number of bytes into the compressed file.
 | 
			
		||||
         */
 | 
			
		||||
        int write(const void* buf, size_t len) {
 | 
			
		||||
            return ::gzwrite(m_fp, (voidp) buf, len);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Flushes all pending output into the compressed file. The parameter
 | 
			
		||||
         * _flush is as in the deflate() function. The return value is the zlib
 | 
			
		||||
         * error number (see function gzerror below). flush() returns Z_OK if
 | 
			
		||||
         * the flush_ parameter is Z_FINISH and all output could be flushed.
 | 
			
		||||
         * flush() should be called only when strictly necessary because it can
 | 
			
		||||
         * degrade compression.
 | 
			
		||||
         */
 | 
			
		||||
        int flush(int _flush) {
 | 
			
		||||
            os_flush();
 | 
			
		||||
            return ::gzflush(m_fp, _flush);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Returns the error message for the last error which occurred on the
 | 
			
		||||
         * given compressed file. errnum is set to zlib error number. If an
 | 
			
		||||
         * error occurred in the file system and not in the compression library,
 | 
			
		||||
         * errnum is set to Z_ERRNO and the application may consult errno
 | 
			
		||||
         * to get the exact error code.
 | 
			
		||||
         */
 | 
			
		||||
        const char* error(int* errnum) {
 | 
			
		||||
            return ::gzerror(m_fp, errnum);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        gzFile fp() { return m_fp; }
 | 
			
		||||
 | 
			
		||||
        ostream& os() {
 | 
			
		||||
            if (m_os == 0) m_os = new ostrstream;
 | 
			
		||||
            return *m_os;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void os_flush() {
 | 
			
		||||
            if (m_os && m_os->pcount()>0) {
 | 
			
		||||
                ostrstream* oss = new ostrstream;
 | 
			
		||||
                oss->fill(m_os->fill());
 | 
			
		||||
                oss->flags(m_os->flags());
 | 
			
		||||
                oss->precision(m_os->precision());
 | 
			
		||||
                oss->width(m_os->width());
 | 
			
		||||
                ::gzwrite(m_fp, m_os->str(), m_os->pcount());
 | 
			
		||||
                delete[] m_os->str(); delete m_os; m_os = oss;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        gzFile m_fp;
 | 
			
		||||
        ostrstream* m_os;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Binary write the given (array of) object(s) into the compressed file.
 | 
			
		||||
 * returns the number of uncompressed bytes actually written
 | 
			
		||||
 * (0 in case of error).
 | 
			
		||||
 */
 | 
			
		||||
template <class T, class Items>
 | 
			
		||||
inline int write(ozstream& zs, const T* x, Items items) {
 | 
			
		||||
    return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Binary output with the '<' operator.
 | 
			
		||||
 */
 | 
			
		||||
template <class T>
 | 
			
		||||
inline ozstream& operator<(ozstream& zs, const T& x) {
 | 
			
		||||
    ::gzwrite(zs.fp(), (voidp) &x, sizeof(T));
 | 
			
		||||
    return zs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline zstringlen::zstringlen(ozstream& zs, const char* x) {
 | 
			
		||||
    val.byte = 255;  val.word = ::strlen(x);
 | 
			
		||||
    if (val.word < 255) zs < (val.byte = val.word);
 | 
			
		||||
    else zs < val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Write length of string + the string with the '<' operator.
 | 
			
		||||
 */
 | 
			
		||||
inline ozstream& operator<(ozstream& zs, const char* x) {
 | 
			
		||||
    zstringlen len(zs, x);
 | 
			
		||||
    ::gzwrite(zs.fp(), (voidp) x, len.value());
 | 
			
		||||
    return zs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
inline ozstream& operator<(ozstream& zs, char* const& x) {
 | 
			
		||||
    return zs < (const char*) x;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Ascii write with the << operator;
 | 
			
		||||
 */
 | 
			
		||||
template <class T>
 | 
			
		||||
inline ostream& operator<<(ozstream& zs, const T& x) {
 | 
			
		||||
    zs.os_flush();
 | 
			
		||||
    return zs.os() << x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										25
									
								
								contrib/iostream2/zstream_test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								contrib/iostream2/zstream_test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
#include "zstream.h"
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <iomanip.h>
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
	char h[256] = "Hello";
 | 
			
		||||
	char* g = "Goodbye";
 | 
			
		||||
	ozstream out("temp.gz");
 | 
			
		||||
    out < "This works well" < h < g;
 | 
			
		||||
    out.close();
 | 
			
		||||
 | 
			
		||||
    izstream in("temp.gz"); // read it back
 | 
			
		||||
    char *x = read_string(in), *y = new char[256], z[256];
 | 
			
		||||
    in > y > z;
 | 
			
		||||
    in.close();
 | 
			
		||||
    cout << x << endl << y << endl << z << endl;
 | 
			
		||||
 | 
			
		||||
    out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results
 | 
			
		||||
    out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl;
 | 
			
		||||
    out << z << endl << y << endl << x << endl;
 | 
			
		||||
    out << 1.1234567890123456789 << endl;
 | 
			
		||||
 | 
			
		||||
    delete[] x; delete[] y;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								contrib/untgz/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								contrib/untgz/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
CC=cc
 | 
			
		||||
CFLAGS=-g
 | 
			
		||||
 | 
			
		||||
untgz: untgz.o  ../../libz.a
 | 
			
		||||
	$(CC) $(CFLAGS) -o untgz  untgz.o -L../.. -lz
 | 
			
		||||
 | 
			
		||||
untgz.o: untgz.c ../../zlib.h
 | 
			
		||||
	$(CC) $(CFLAGS) -c -I../.. untgz.c
 | 
			
		||||
 | 
			
		||||
../../libz.a:
 | 
			
		||||
	cd ../..; make
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f untgz untgz.o *~
 | 
			
		||||
							
								
								
									
										63
									
								
								contrib/untgz/makefile.w32
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								contrib/untgz/makefile.w32
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
# Makefile for zlib.  Modified for mingw32
 | 
			
		||||
# For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 | 
			
		||||
# To compile, 
 | 
			
		||||
# 
 | 
			
		||||
#   make -fmakefile.w32
 | 
			
		||||
# 
 | 
			
		||||
 | 
			
		||||
CC=gcc
 | 
			
		||||
 | 
			
		||||
# Generate dependencies (see end of the file)
 | 
			
		||||
 | 
			
		||||
CPPFLAGS=-MMD 
 | 
			
		||||
 | 
			
		||||
#CFLAGS=-MMD -O
 | 
			
		||||
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
 | 
			
		||||
#CFLAGS=-MMD -g -DDEBUG
 | 
			
		||||
CFLAGS=-O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
 | 
			
		||||
             -Wstrict-prototypes -Wmissing-prototypes
 | 
			
		||||
 | 
			
		||||
# If cp.exe is not found, replace with copy /Y .
 | 
			
		||||
CP=cp -f
 | 
			
		||||
 | 
			
		||||
# The default value of RM is "rm -f."  
 | 
			
		||||
# If "rm.exe" is not found, uncomment:
 | 
			
		||||
# RM=del
 | 
			
		||||
 | 
			
		||||
LD=gcc
 | 
			
		||||
LDLIBS=-L. -lz
 | 
			
		||||
LDFLAGS=-s
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INCL=zlib.h zconf.h
 | 
			
		||||
LIBS=libz.a
 | 
			
		||||
 | 
			
		||||
AR=ar rcs
 | 
			
		||||
 | 
			
		||||
OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
 | 
			
		||||
       zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o \
 | 
			
		||||
       inffast.o
 | 
			
		||||
 | 
			
		||||
TEST_OBJS = minigzip.o untgz.o
 | 
			
		||||
 | 
			
		||||
all: minigzip.exe untgz.exe
 | 
			
		||||
 | 
			
		||||
rebuild:	clean	all
 | 
			
		||||
 | 
			
		||||
libz.a: $(OBJS)
 | 
			
		||||
	$(AR) $@ $(OBJS)
 | 
			
		||||
 | 
			
		||||
%.exe : %.o $(LIBS)
 | 
			
		||||
	$(LD) $(LDFLAGS) -o $@ $< $(LDLIBS)
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	$(RM) *.d *.o *.exe libz.a foo.gz
 | 
			
		||||
 | 
			
		||||
DEPS := $(wildcard *.d)
 | 
			
		||||
ifneq ($(DEPS),)
 | 
			
		||||
include $(DEPS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										478
									
								
								contrib/untgz/untgz.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										478
									
								
								contrib/untgz/untgz.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,478 @@
 | 
			
		||||
/*
 | 
			
		||||
 * untgz.c -- Display contents and/or extract file from
 | 
			
		||||
 * a gzip'd TAR file
 | 
			
		||||
 * written by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 | 
			
		||||
 * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <utime.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#ifdef unix
 | 
			
		||||
# include <unistd.h>
 | 
			
		||||
#else
 | 
			
		||||
# include <direct.h>
 | 
			
		||||
# include <io.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
/* Values used in typeflag field.  */
 | 
			
		||||
 | 
			
		||||
#define REGTYPE	 '0'		/* regular file */
 | 
			
		||||
#define AREGTYPE '\0'		/* regular file */
 | 
			
		||||
#define LNKTYPE  '1'		/* link */
 | 
			
		||||
#define SYMTYPE  '2'		/* reserved */
 | 
			
		||||
#define CHRTYPE  '3'		/* character special */
 | 
			
		||||
#define BLKTYPE  '4'		/* block special */
 | 
			
		||||
#define DIRTYPE  '5'		/* directory */
 | 
			
		||||
#define FIFOTYPE '6'		/* FIFO special */
 | 
			
		||||
#define CONTTYPE '7'		/* reserved */
 | 
			
		||||
 | 
			
		||||
#define BLOCKSIZE 512
 | 
			
		||||
 | 
			
		||||
struct tar_header
 | 
			
		||||
{				/* byte offset */
 | 
			
		||||
  char name[100];		/*   0 */
 | 
			
		||||
  char mode[8];			/* 100 */
 | 
			
		||||
  char uid[8];			/* 108 */
 | 
			
		||||
  char gid[8];			/* 116 */
 | 
			
		||||
  char size[12];		/* 124 */
 | 
			
		||||
  char mtime[12];		/* 136 */
 | 
			
		||||
  char chksum[8];		/* 148 */
 | 
			
		||||
  char typeflag;		/* 156 */
 | 
			
		||||
  char linkname[100];		/* 157 */
 | 
			
		||||
  char magic[6];		/* 257 */
 | 
			
		||||
  char version[2];		/* 263 */
 | 
			
		||||
  char uname[32];		/* 265 */
 | 
			
		||||
  char gname[32];		/* 297 */
 | 
			
		||||
  char devmajor[8];		/* 329 */
 | 
			
		||||
  char devminor[8];		/* 337 */
 | 
			
		||||
  char prefix[155];		/* 345 */
 | 
			
		||||
				/* 500 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
union tar_buffer {
 | 
			
		||||
  char               buffer[BLOCKSIZE];
 | 
			
		||||
  struct tar_header  header;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum { TGZ_EXTRACT = 0, TGZ_LIST };
 | 
			
		||||
 | 
			
		||||
static char *TGZfname	OF((const char *));
 | 
			
		||||
void TGZnotfound	OF((const char *));
 | 
			
		||||
 | 
			
		||||
int getoct		OF((char *, int));
 | 
			
		||||
char *strtime		OF((time_t *));
 | 
			
		||||
int ExprMatch		OF((char *,char *));
 | 
			
		||||
 | 
			
		||||
int makedir		OF((char *));
 | 
			
		||||
int matchname		OF((int,int,char **,char *));
 | 
			
		||||
 | 
			
		||||
void error		OF((const char *));
 | 
			
		||||
int  tar		OF((gzFile, int, int, int, char **));
 | 
			
		||||
 | 
			
		||||
void help		OF((int));
 | 
			
		||||
int main		OF((int, char **));
 | 
			
		||||
 | 
			
		||||
char *prog;
 | 
			
		||||
 | 
			
		||||
/* This will give a benign warning */
 | 
			
		||||
 | 
			
		||||
static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", NULL };
 | 
			
		||||
 | 
			
		||||
/* Return the real name of the TGZ archive */
 | 
			
		||||
/* or NULL if it does not exist. */
 | 
			
		||||
 | 
			
		||||
static char *TGZfname OF((const char *fname))
 | 
			
		||||
{
 | 
			
		||||
  static char buffer[1024];
 | 
			
		||||
  int origlen,i;
 | 
			
		||||
  
 | 
			
		||||
  strcpy(buffer,fname);
 | 
			
		||||
  origlen = strlen(buffer);
 | 
			
		||||
 | 
			
		||||
  for (i=0; TGZprefix[i]; i++)
 | 
			
		||||
    {
 | 
			
		||||
       strcpy(buffer+origlen,TGZprefix[i]);
 | 
			
		||||
       if (access(buffer,F_OK) == 0)
 | 
			
		||||
         return buffer;
 | 
			
		||||
    }
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* error message for the filename */
 | 
			
		||||
 | 
			
		||||
void TGZnotfound OF((const char *fname))
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  fprintf(stderr,"%s : couldn't find ",prog);
 | 
			
		||||
  for (i=0;TGZprefix[i];i++)
 | 
			
		||||
    fprintf(stderr,(TGZprefix[i+1]) ? "%s%s, " : "or %s%s\n",
 | 
			
		||||
            fname,
 | 
			
		||||
            TGZprefix[i]);
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* help functions */
 | 
			
		||||
 | 
			
		||||
int getoct(char *p,int width)
 | 
			
		||||
{
 | 
			
		||||
  int result = 0;
 | 
			
		||||
  char c;
 | 
			
		||||
  
 | 
			
		||||
  while (width --)
 | 
			
		||||
    {
 | 
			
		||||
      c = *p++;
 | 
			
		||||
      if (c == ' ')
 | 
			
		||||
	continue;
 | 
			
		||||
      if (c == 0)
 | 
			
		||||
	break;
 | 
			
		||||
      result = result * 8 + (c - '0');
 | 
			
		||||
    }
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *strtime (time_t *t)
 | 
			
		||||
{
 | 
			
		||||
  struct tm   *local;
 | 
			
		||||
  static char result[32];
 | 
			
		||||
 | 
			
		||||
  local = localtime(t);
 | 
			
		||||
  sprintf(result,"%2d/%02d/%4d %02d:%02d:%02d",
 | 
			
		||||
	  local->tm_mday, local->tm_mon+1, local->tm_year+1900,
 | 
			
		||||
	  local->tm_hour, local->tm_min,   local->tm_sec);
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* regular expression matching */
 | 
			
		||||
 | 
			
		||||
#define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))
 | 
			
		||||
 | 
			
		||||
int ExprMatch(char *string,char *expr)
 | 
			
		||||
{
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      if (ISSPECIAL(*expr))
 | 
			
		||||
	{
 | 
			
		||||
	  if (*expr == '/')
 | 
			
		||||
	    {
 | 
			
		||||
	      if (*string != '\\' && *string != '/')
 | 
			
		||||
		return 0;
 | 
			
		||||
	      string ++; expr++;
 | 
			
		||||
	    }
 | 
			
		||||
	  else if (*expr == '*')
 | 
			
		||||
	    {
 | 
			
		||||
	      if (*expr ++ == 0)
 | 
			
		||||
		return 1;
 | 
			
		||||
	      while (*++string != *expr)
 | 
			
		||||
		if (*string == 0)
 | 
			
		||||
		  return 0;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
      else
 | 
			
		||||
	{
 | 
			
		||||
	  if (*string != *expr)
 | 
			
		||||
	    return 0;
 | 
			
		||||
	  if (*expr++ == 0)
 | 
			
		||||
	    return 1;
 | 
			
		||||
	  string++;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* recursive make directory */
 | 
			
		||||
/* abort if you get an ENOENT errno somewhere in the middle */
 | 
			
		||||
/* e.g. ignore error "mkdir on existing directory" */
 | 
			
		||||
/* */
 | 
			
		||||
/* return 1 if OK */
 | 
			
		||||
/*        0 on error */
 | 
			
		||||
 | 
			
		||||
int makedir (char *newdir)
 | 
			
		||||
{
 | 
			
		||||
  char *buffer = strdup(newdir);
 | 
			
		||||
  char *p;
 | 
			
		||||
  int  len = strlen(buffer);
 | 
			
		||||
  
 | 
			
		||||
  if (len <= 0) {
 | 
			
		||||
    free(buffer);
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
  if (buffer[len-1] == '/') {
 | 
			
		||||
    buffer[len-1] = '\0';
 | 
			
		||||
  }
 | 
			
		||||
  if (mkdir(buffer, 0775) == 0)
 | 
			
		||||
    {
 | 
			
		||||
      free(buffer);
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  p = buffer+1;
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      char hold;
 | 
			
		||||
      
 | 
			
		||||
      while(*p && *p != '\\' && *p != '/')
 | 
			
		||||
	p++;
 | 
			
		||||
      hold = *p;
 | 
			
		||||
      *p = 0;
 | 
			
		||||
      if ((mkdir(buffer, 0775) == -1) && (errno == ENOENT))
 | 
			
		||||
	{
 | 
			
		||||
	  fprintf(stderr,"%s: couldn't create directory %s\n",prog,buffer);
 | 
			
		||||
	  free(buffer);
 | 
			
		||||
	  return 0;
 | 
			
		||||
	}
 | 
			
		||||
      if (hold == 0)
 | 
			
		||||
	break;
 | 
			
		||||
      *p++ = hold;
 | 
			
		||||
    }
 | 
			
		||||
  free(buffer);
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int matchname (int arg,int argc,char **argv,char *fname)
 | 
			
		||||
{
 | 
			
		||||
  if (arg == argc)		/* no arguments given (untgz tgzarchive) */
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
  while (arg < argc)
 | 
			
		||||
    if (ExprMatch(fname,argv[arg++]))
 | 
			
		||||
      return 1;
 | 
			
		||||
 | 
			
		||||
  return 0; /* ignore this for the moment being */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Tar file list or extract */
 | 
			
		||||
 | 
			
		||||
int tar (gzFile in,int action,int arg,int argc,char **argv)
 | 
			
		||||
{
 | 
			
		||||
  union  tar_buffer buffer;
 | 
			
		||||
  int    len;
 | 
			
		||||
  int    err;
 | 
			
		||||
  int    getheader = 1;
 | 
			
		||||
  int    remaining = 0;
 | 
			
		||||
  FILE   *outfile = NULL;
 | 
			
		||||
  char   fname[BLOCKSIZE];
 | 
			
		||||
  time_t tartime;
 | 
			
		||||
  
 | 
			
		||||
  if (action == TGZ_LIST)
 | 
			
		||||
    printf("     day      time     size                       file\n"
 | 
			
		||||
	   " ---------- -------- --------- -------------------------------------\n");
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      len = gzread(in, &buffer, BLOCKSIZE);
 | 
			
		||||
      if (len < 0)
 | 
			
		||||
	error (gzerror(in, &err));
 | 
			
		||||
      /*
 | 
			
		||||
       * if we met the end of the tar
 | 
			
		||||
       * or the end-of-tar block,
 | 
			
		||||
       * we are done
 | 
			
		||||
       */
 | 
			
		||||
      if ((len == 0)  || (buffer.header.name[0]== 0))
 | 
			
		||||
	break;
 | 
			
		||||
      
 | 
			
		||||
      /*
 | 
			
		||||
       * Always expect complete blocks to process
 | 
			
		||||
       * the tar information.
 | 
			
		||||
       */
 | 
			
		||||
      if (len != BLOCKSIZE)
 | 
			
		||||
	error("gzread: incomplete block read");
 | 
			
		||||
      
 | 
			
		||||
      /*
 | 
			
		||||
       * If we have to get a tar header
 | 
			
		||||
       */
 | 
			
		||||
      if (getheader == 1)
 | 
			
		||||
	{
 | 
			
		||||
	  tartime = (time_t)getoct(buffer.header.mtime,12);
 | 
			
		||||
	  strcpy(fname,buffer.header.name);
 | 
			
		||||
	  
 | 
			
		||||
	  switch (buffer.header.typeflag)
 | 
			
		||||
	    {
 | 
			
		||||
	    case DIRTYPE:
 | 
			
		||||
	      if (action == TGZ_LIST)
 | 
			
		||||
		printf(" %s     <dir> %s\n",strtime(&tartime),fname);
 | 
			
		||||
	      if (action == TGZ_EXTRACT)
 | 
			
		||||
		makedir(fname);
 | 
			
		||||
	      break;
 | 
			
		||||
	    case REGTYPE:
 | 
			
		||||
	    case AREGTYPE:
 | 
			
		||||
	      remaining = getoct(buffer.header.size,12);
 | 
			
		||||
	      if (action == TGZ_LIST)
 | 
			
		||||
		printf(" %s %9d %s\n",strtime(&tartime),remaining,fname);
 | 
			
		||||
	      if (action == TGZ_EXTRACT)
 | 
			
		||||
		{
 | 
			
		||||
		  if ((remaining) && (matchname(arg,argc,argv,fname)))
 | 
			
		||||
		    {
 | 
			
		||||
		      outfile = fopen(fname,"wb");
 | 
			
		||||
		      if (outfile == NULL) {
 | 
			
		||||
			/* try creating directory */
 | 
			
		||||
			char *p = strrchr(fname, '/');
 | 
			
		||||
			if (p != NULL) {
 | 
			
		||||
			  *p = '\0';
 | 
			
		||||
			  makedir(fname);
 | 
			
		||||
			  *p = '/';
 | 
			
		||||
			  outfile = fopen(fname,"wb");
 | 
			
		||||
			}
 | 
			
		||||
		      }
 | 
			
		||||
		      fprintf(stderr,
 | 
			
		||||
			      "%s %s\n",
 | 
			
		||||
			      (outfile) ? "Extracting" : "Couldn't create",
 | 
			
		||||
			      fname);
 | 
			
		||||
		    }
 | 
			
		||||
		  else
 | 
			
		||||
		    outfile = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	      /*
 | 
			
		||||
	       * could have no contents
 | 
			
		||||
	       */
 | 
			
		||||
	      getheader = (remaining) ? 0 : 1;
 | 
			
		||||
	      break;
 | 
			
		||||
	    default:
 | 
			
		||||
	      if (action == TGZ_LIST)
 | 
			
		||||
		printf(" %s     <---> %s\n",strtime(&tartime),fname);
 | 
			
		||||
	      break;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
      else
 | 
			
		||||
	{
 | 
			
		||||
	  unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;
 | 
			
		||||
 | 
			
		||||
	  if ((action == TGZ_EXTRACT) && (outfile != NULL))
 | 
			
		||||
	    {
 | 
			
		||||
	      if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)
 | 
			
		||||
		{
 | 
			
		||||
		  fprintf(stderr,"%s : error writing %s skipping...\n",prog,fname);
 | 
			
		||||
		  fclose(outfile);
 | 
			
		||||
		  unlink(fname);
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	  remaining -= bytes;
 | 
			
		||||
	  if (remaining == 0)
 | 
			
		||||
	    {
 | 
			
		||||
	      getheader = 1;
 | 
			
		||||
	      if ((action == TGZ_EXTRACT) && (outfile != NULL))
 | 
			
		||||
		{
 | 
			
		||||
		  struct utimbuf settime;
 | 
			
		||||
 | 
			
		||||
		  settime.actime = settime.modtime = tartime;
 | 
			
		||||
 | 
			
		||||
		  fclose(outfile);
 | 
			
		||||
		  outfile = NULL;
 | 
			
		||||
		  utime(fname,&settime);
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
  if (gzclose(in) != Z_OK)
 | 
			
		||||
    error("failed gzclose");
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* =========================================================== */
 | 
			
		||||
 | 
			
		||||
void help(int exitval)
 | 
			
		||||
{
 | 
			
		||||
  fprintf(stderr,
 | 
			
		||||
	  "untgz v 0.1\n"
 | 
			
		||||
	  " an sample application of zlib 1.0.4\n\n"
 | 
			
		||||
          "Usage : untgz TGZfile            to extract all files\n"
 | 
			
		||||
          "        untgz TGZfile fname ...  to extract selected files\n"
 | 
			
		||||
          "        untgz -l TGZfile         to list archive contents\n"
 | 
			
		||||
          "        untgz -h                 to display this help\n\n");
 | 
			
		||||
  exit(exitval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void error(const char *msg)
 | 
			
		||||
{
 | 
			
		||||
    fprintf(stderr, "%s: %s\n", prog, msg);
 | 
			
		||||
    exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ====================================================================== */
 | 
			
		||||
 | 
			
		||||
int _CRT_glob = 0;	/* disable globbing of the arguments */
 | 
			
		||||
 | 
			
		||||
int main(int argc,char **argv)
 | 
			
		||||
{
 | 
			
		||||
    int 	action = TGZ_EXTRACT;
 | 
			
		||||
    int 	arg = 1;
 | 
			
		||||
    char	*TGZfile;
 | 
			
		||||
    gzFile	*f;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    prog = strrchr(argv[0],'\\');
 | 
			
		||||
    if (prog == NULL)
 | 
			
		||||
      {
 | 
			
		||||
	prog = strrchr(argv[0],'/');
 | 
			
		||||
	if (prog == NULL)
 | 
			
		||||
	  {
 | 
			
		||||
	    prog = strrchr(argv[0],':');
 | 
			
		||||
	    if (prog == NULL)
 | 
			
		||||
	      prog = argv[0];
 | 
			
		||||
	    else
 | 
			
		||||
	      prog++;
 | 
			
		||||
	  }
 | 
			
		||||
	else
 | 
			
		||||
	  prog++;
 | 
			
		||||
      }
 | 
			
		||||
    else
 | 
			
		||||
      prog++;
 | 
			
		||||
    
 | 
			
		||||
    if (argc == 1)
 | 
			
		||||
      help(0);
 | 
			
		||||
 | 
			
		||||
    if (strcmp(argv[arg],"-l") == 0)
 | 
			
		||||
      {
 | 
			
		||||
	action = TGZ_LIST;
 | 
			
		||||
	if (argc == ++arg)
 | 
			
		||||
	  help(0);
 | 
			
		||||
      }
 | 
			
		||||
    else if (strcmp(argv[arg],"-h") == 0)
 | 
			
		||||
      {
 | 
			
		||||
	help(0);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    if ((TGZfile = TGZfname(argv[arg])) == NULL)
 | 
			
		||||
      TGZnotfound(argv[arg]);            
 | 
			
		||||
 | 
			
		||||
    ++arg;
 | 
			
		||||
    if ((action == TGZ_LIST) && (arg != argc))
 | 
			
		||||
      help(1);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  Process the TGZ file
 | 
			
		||||
 */
 | 
			
		||||
    switch(action)
 | 
			
		||||
      {
 | 
			
		||||
      case TGZ_LIST:
 | 
			
		||||
      case TGZ_EXTRACT:
 | 
			
		||||
	f = gzopen(TGZfile,"rb");
 | 
			
		||||
	if (f == NULL)
 | 
			
		||||
	  {
 | 
			
		||||
	    fprintf(stderr,"%s: Couldn't gzopen %s\n",
 | 
			
		||||
		    prog,
 | 
			
		||||
		    TGZfile);
 | 
			
		||||
	    return 1;
 | 
			
		||||
	  }
 | 
			
		||||
	exit(tar(f, action, arg, argc, argv));
 | 
			
		||||
      break;
 | 
			
		||||
	
 | 
			
		||||
      default:
 | 
			
		||||
	error("Unknown option!");
 | 
			
		||||
	exit(1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								contrib/visual-basic.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								contrib/visual-basic.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
From: "Jon Caruana" <jon-net@usa.net>
 | 
			
		||||
To: "Jean-loup Gailly" <gzip@prep.ai.mit.edu>
 | 
			
		||||
Subject: Re: How to port zlib declares to vb?
 | 
			
		||||
Date: Mon, 28 Oct 1996 18:33:03 -0600
 | 
			
		||||
 | 
			
		||||
Got the answer! (I haven't had time to check this but it's what I got, and
 | 
			
		||||
looks correct):
 | 
			
		||||
 | 
			
		||||
He has the following routines working:
 | 
			
		||||
        compress
 | 
			
		||||
        uncompress
 | 
			
		||||
        gzopen
 | 
			
		||||
        gzwrite
 | 
			
		||||
        gzread
 | 
			
		||||
        gzclose
 | 
			
		||||
 | 
			
		||||
Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)
 | 
			
		||||
 | 
			
		||||
#If Win16 Then   'Use Win16 calls.
 | 
			
		||||
Declare Function compress Lib "ZLIB.DLL" (ByVal compr As
 | 
			
		||||
        String, comprLen As Any, ByVal buf As String, ByVal buflen
 | 
			
		||||
        As Long) As Integer
 | 
			
		||||
Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr
 | 
			
		||||
        As String, uncomprLen As Any, ByVal compr As String, ByVal
 | 
			
		||||
        lcompr As Long) As Integer
 | 
			
		||||
Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As
 | 
			
		||||
        String, ByVal mode As String) As Long
 | 
			
		||||
Declare Function gzread Lib "ZLIB.DLL" (ByVal file As
 | 
			
		||||
        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
 | 
			
		||||
        As Integer
 | 
			
		||||
Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As
 | 
			
		||||
        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
 | 
			
		||||
        As Integer
 | 
			
		||||
Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As
 | 
			
		||||
        Long) As Integer
 | 
			
		||||
#Else
 | 
			
		||||
Declare Function compress Lib "ZLIB32.DLL"
 | 
			
		||||
        (ByVal compr As String, comprLen As Any, ByVal buf As
 | 
			
		||||
        String, ByVal buflen As Long) As Integer
 | 
			
		||||
Declare Function uncompress Lib "ZLIB32.DLL"
 | 
			
		||||
        (ByVal uncompr As String, uncomprLen As Any, ByVal compr As
 | 
			
		||||
        String, ByVal lcompr As Long) As Long
 | 
			
		||||
Declare Function gzopen Lib "ZLIB32.DLL"
 | 
			
		||||
        (ByVal file As String, ByVal mode As String) As Long
 | 
			
		||||
Declare Function gzread Lib "ZLIB32.DLL"
 | 
			
		||||
        (ByVal file As Long, ByVal uncompr As String, ByVal
 | 
			
		||||
        uncomprLen As Long) As Long
 | 
			
		||||
Declare Function gzwrite Lib "ZLIB32.DLL"
 | 
			
		||||
        (ByVal file As Long, ByVal uncompr As String, ByVal
 | 
			
		||||
        uncomprLen As Long) As Long
 | 
			
		||||
Declare Function gzclose Lib "ZLIB32.DLL"
 | 
			
		||||
        (ByVal file As Long) As Long
 | 
			
		||||
#End If
 | 
			
		||||
 | 
			
		||||
-Jon Caruana
 | 
			
		||||
jon-net@usa.net
 | 
			
		||||
Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
 | 
			
		||||
							
								
								
									
										8
									
								
								crc32.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								crc32.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
/* crc32.c -- compute the CRC-32 of a data stream
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: crc32.c,v 1.8 1996/01/30 21:59:10 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
@@ -124,7 +124,7 @@ local uLongf crc_table[256] = {
 | 
			
		||||
/* =========================================================================
 | 
			
		||||
 * This function can be used by asm versions of crc32()
 | 
			
		||||
 */
 | 
			
		||||
uLongf *get_crc_table()
 | 
			
		||||
uLongf * EXPORT get_crc_table()
 | 
			
		||||
{
 | 
			
		||||
#ifdef DYNAMIC_CRC_TABLE
 | 
			
		||||
  if (crc_table_empty) make_crc_table();
 | 
			
		||||
@@ -139,7 +139,7 @@ uLongf *get_crc_table()
 | 
			
		||||
#define DO8(buf)  DO4(buf); DO4(buf);
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
uLong crc32(crc, buf, len)
 | 
			
		||||
uLong EXPORT crc32(crc, buf, len)
 | 
			
		||||
    uLong crc;
 | 
			
		||||
    const Bytef *buf;
 | 
			
		||||
    uInt len;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										137
									
								
								deflate.c
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								deflate.c
									
									
									
									
									
								
							@@ -36,8 +36,8 @@
 | 
			
		||||
 *
 | 
			
		||||
 *  REFERENCES
 | 
			
		||||
 *
 | 
			
		||||
 *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
 | 
			
		||||
 *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
 | 
			
		||||
 *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
 | 
			
		||||
 *      Available in ftp://ds.internic.net/rfc/rfc1951.txt
 | 
			
		||||
 *
 | 
			
		||||
 *      A description of the Rabin and Karp algorithm is given in the book
 | 
			
		||||
 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
 | 
			
		||||
@@ -47,10 +47,12 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "deflate.h"
 | 
			
		||||
 | 
			
		||||
char deflate_copyright[] = " deflate 1.0.5 Copyright 1995-1998 Jean-loup Gailly ";
 | 
			
		||||
const char deflate_copyright[] =
 | 
			
		||||
   " deflate 1.0.7 Copyright 1995-1998 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
 | 
			
		||||
@@ -76,12 +78,14 @@ local block_state deflate_stored OF((deflate_state *s, int flush));
 | 
			
		||||
local block_state deflate_fast   OF((deflate_state *s, int flush));
 | 
			
		||||
local block_state deflate_slow   OF((deflate_state *s, int flush));
 | 
			
		||||
local void lm_init        OF((deflate_state *s));
 | 
			
		||||
local uInt longest_match  OF((deflate_state *s, IPos cur_match));
 | 
			
		||||
local void putShortMSB    OF((deflate_state *s, uInt b));
 | 
			
		||||
local void flush_pending  OF((z_streamp strm));
 | 
			
		||||
local int read_buf        OF((z_streamp strm, charf *buf, unsigned size));
 | 
			
		||||
#ifdef ASMV
 | 
			
		||||
      void match_init OF((void)); /* asm code initialization */
 | 
			
		||||
      uInt longest_match  OF((deflate_state *s, IPos cur_match));
 | 
			
		||||
#else
 | 
			
		||||
local uInt longest_match  OF((deflate_state *s, IPos cur_match));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
@@ -119,7 +123,7 @@ typedef struct config_s {
 | 
			
		||||
   compress_func func;
 | 
			
		||||
} config;
 | 
			
		||||
 | 
			
		||||
local config configuration_table[10] = {
 | 
			
		||||
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 */
 | 
			
		||||
@@ -174,7 +178,7 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
 | 
			
		||||
    zmemzero((charf *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateInit_(strm, level, version, stream_size)
 | 
			
		||||
int EXPORT deflateInit_(strm, level, version, stream_size)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
    int level;
 | 
			
		||||
    const char *version;
 | 
			
		||||
@@ -186,7 +190,7 @@ int deflateInit_(strm, level, version, stream_size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
			
		||||
int EXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
			
		||||
		  version, stream_size)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
    int  level;
 | 
			
		||||
@@ -199,13 +203,14 @@ int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
			
		||||
{
 | 
			
		||||
    deflate_state *s;
 | 
			
		||||
    int noheader = 0;
 | 
			
		||||
    static const char* my_version = ZLIB_VERSION;
 | 
			
		||||
 | 
			
		||||
    ushf *overlay;
 | 
			
		||||
    /* We overlay pending_buf and d_buf+l_buf. This works since the average
 | 
			
		||||
     * output size for (length,distance) codes is <= 24 bits.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
 | 
			
		||||
    if (version == Z_NULL || version[0] != my_version[0] ||
 | 
			
		||||
        stream_size != sizeof(z_stream)) {
 | 
			
		||||
	return Z_VERSION_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
@@ -252,6 +257,7 @@ int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
			
		||||
 | 
			
		||||
    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
 | 
			
		||||
    s->pending_buf = (uchf *) overlay;
 | 
			
		||||
    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
 | 
			
		||||
 | 
			
		||||
    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
 | 
			
		||||
        s->pending_buf == Z_NULL) {
 | 
			
		||||
@@ -270,7 +276,7 @@ int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateSetDictionary (strm, dictionary, dictLength)
 | 
			
		||||
int EXPORT deflateSetDictionary (strm, dictionary, dictLength)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
    const Bytef *dictionary;
 | 
			
		||||
    uInt  dictLength;
 | 
			
		||||
@@ -289,7 +295,9 @@ int deflateSetDictionary (strm, dictionary, dictLength)
 | 
			
		||||
    if (length < MIN_MATCH) return Z_OK;
 | 
			
		||||
    if (length > MAX_DIST(s)) {
 | 
			
		||||
	length = MAX_DIST(s);
 | 
			
		||||
	dictionary += dictLength - length;
 | 
			
		||||
#ifndef USE_DICT_HEAD
 | 
			
		||||
	dictionary += dictLength - length; /* use the tail of the dictionary */
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
    zmemcpy((charf *)s->window, dictionary, length);
 | 
			
		||||
    s->strstart = length;
 | 
			
		||||
@@ -309,7 +317,7 @@ int deflateSetDictionary (strm, dictionary, dictLength)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateReset (strm)
 | 
			
		||||
int EXPORT deflateReset (strm)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
{
 | 
			
		||||
    deflate_state *s;
 | 
			
		||||
@@ -339,7 +347,7 @@ int deflateReset (strm)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateParams(strm, level, strategy)
 | 
			
		||||
int EXPORT deflateParams(strm, level, strategy)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
    int level;
 | 
			
		||||
    int strategy;
 | 
			
		||||
@@ -413,7 +421,7 @@ local void flush_pending(strm)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflate (strm, flush)
 | 
			
		||||
int EXPORT deflate (strm, flush)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
    int flush;
 | 
			
		||||
{
 | 
			
		||||
@@ -547,42 +555,85 @@ int deflate (strm, flush)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateEnd (strm)
 | 
			
		||||
int EXPORT deflateEnd (strm)
 | 
			
		||||
    z_streamp strm;
 | 
			
		||||
{
 | 
			
		||||
    int status;
 | 
			
		||||
 | 
			
		||||
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
 | 
			
		||||
 | 
			
		||||
    status = strm->state->status;
 | 
			
		||||
    if (status != INIT_STATE && status != BUSY_STATE &&
 | 
			
		||||
	status != FINISH_STATE) {
 | 
			
		||||
      return Z_STREAM_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Deallocate in reverse order of allocations: */
 | 
			
		||||
    TRY_FREE(strm, strm->state->pending_buf);
 | 
			
		||||
    TRY_FREE(strm, strm->state->head);
 | 
			
		||||
    TRY_FREE(strm, strm->state->prev);
 | 
			
		||||
    TRY_FREE(strm, strm->state->window);
 | 
			
		||||
 | 
			
		||||
    status = strm->state->status;
 | 
			
		||||
    ZFREE(strm, strm->state);
 | 
			
		||||
    strm->state = Z_NULL;
 | 
			
		||||
 | 
			
		||||
    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
int deflateCopy (dest, source)
 | 
			
		||||
/* =========================================================================
 | 
			
		||||
 * Copy the source state to the destination state.
 | 
			
		||||
 * To simplify the source, this is not supported for 16-bit MSDOS (which
 | 
			
		||||
 * doesn't have enough memory anyway to duplicate compression states).
 | 
			
		||||
 */
 | 
			
		||||
int EXPORT deflateCopy (dest, source)
 | 
			
		||||
    z_streamp dest;
 | 
			
		||||
    z_streamp source;
 | 
			
		||||
{
 | 
			
		||||
    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
 | 
			
		||||
#ifdef MAXSEG_64K
 | 
			
		||||
    return Z_STREAM_ERROR;
 | 
			
		||||
#else
 | 
			
		||||
    deflate_state *ds;
 | 
			
		||||
    deflate_state *ss;
 | 
			
		||||
    ushf *overlay;
 | 
			
		||||
 | 
			
		||||
    ss = source->state;
 | 
			
		||||
 | 
			
		||||
    if (source == Z_NULL || dest == Z_NULL || ss == Z_NULL) {
 | 
			
		||||
        return Z_STREAM_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    *dest = *source;
 | 
			
		||||
    return Z_STREAM_ERROR; /* to be implemented */
 | 
			
		||||
#if 0
 | 
			
		||||
    dest->state = (struct internal_state FAR *)
 | 
			
		||||
        (*dest->zalloc)(1, sizeof(deflate_state));
 | 
			
		||||
    if (dest->state == Z_NULL) return Z_MEM_ERROR;
 | 
			
		||||
 | 
			
		||||
    *(dest->state) = *(source->state);
 | 
			
		||||
    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
 | 
			
		||||
    if (ds == Z_NULL) return Z_MEM_ERROR;
 | 
			
		||||
    dest->state = (struct internal_state FAR *) ds;
 | 
			
		||||
    *ds = *ss;
 | 
			
		||||
    ds->strm = dest;
 | 
			
		||||
 | 
			
		||||
    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
 | 
			
		||||
    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
 | 
			
		||||
    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
 | 
			
		||||
    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
 | 
			
		||||
    ds->pending_buf = (uchf *) overlay;
 | 
			
		||||
 | 
			
		||||
    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
 | 
			
		||||
        ds->pending_buf == Z_NULL) {
 | 
			
		||||
        deflateEnd (dest);
 | 
			
		||||
        return Z_MEM_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    /* following zmemcpy do not work for 16-bit MSDOS */
 | 
			
		||||
    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
 | 
			
		||||
    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
 | 
			
		||||
    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
 | 
			
		||||
    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
 | 
			
		||||
 | 
			
		||||
    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
 | 
			
		||||
    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
 | 
			
		||||
    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
 | 
			
		||||
 | 
			
		||||
    ds->l_desc.dyn_tree = ds->dyn_ltree;
 | 
			
		||||
    ds->d_desc.dyn_tree = ds->dyn_dtree;
 | 
			
		||||
    ds->bl_desc.dyn_tree = ds->bl_tree;
 | 
			
		||||
 | 
			
		||||
    return Z_OK;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
@@ -815,7 +866,7 @@ local void check_match(s, start, match, length)
 | 
			
		||||
	} while (--length != 0);
 | 
			
		||||
        z_error("invalid match");
 | 
			
		||||
    }
 | 
			
		||||
    if (verbose > 1) {
 | 
			
		||||
    if (z_verbose > 1) {
 | 
			
		||||
        fprintf(stderr,"\\[%d,%d]", start-match, length);
 | 
			
		||||
        do { putc(s->window[start++], stderr); } while (--length != 0);
 | 
			
		||||
    }
 | 
			
		||||
@@ -864,11 +915,13 @@ local void fill_window(s)
 | 
			
		||||
                   (unsigned)wsize);
 | 
			
		||||
            s->match_start -= wsize;
 | 
			
		||||
            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
 | 
			
		||||
 | 
			
		||||
            s->block_start -= (long) wsize;
 | 
			
		||||
 | 
			
		||||
            /* Slide the hash table (could be avoided with 32 bit values
 | 
			
		||||
               at the expense of memory usage):
 | 
			
		||||
               at the expense of memory usage). We slide even when level == 0
 | 
			
		||||
               to keep the hash table consistent if we switch back to level > 0
 | 
			
		||||
               later. (Using level 0 permanently is not an optimal usage of
 | 
			
		||||
               zlib, so we don't care about this pathological case.)
 | 
			
		||||
             */
 | 
			
		||||
	    n = s->hash_size;
 | 
			
		||||
	    p = &s->head[n];
 | 
			
		||||
@@ -886,7 +939,6 @@ local void fill_window(s)
 | 
			
		||||
		 * its value will never be used.
 | 
			
		||||
		 */
 | 
			
		||||
	    } while (--n);
 | 
			
		||||
 | 
			
		||||
            more += wsize;
 | 
			
		||||
        }
 | 
			
		||||
        if (s->strm->avail_in == 0) return;
 | 
			
		||||
@@ -950,12 +1002,24 @@ local void fill_window(s)
 | 
			
		||||
 * This function does not insert new strings in the dictionary since
 | 
			
		||||
 * uncompressible data is probably not useful. This function is used
 | 
			
		||||
 * only for the level=0 compression option.
 | 
			
		||||
 * NOTE: this function should be optimized to avoid extra copying.
 | 
			
		||||
 * NOTE: this function should be optimized to avoid extra copying from
 | 
			
		||||
 * window to pending_buf.
 | 
			
		||||
 */
 | 
			
		||||
local block_state deflate_stored(s, flush)
 | 
			
		||||
    deflate_state *s;
 | 
			
		||||
    int flush;
 | 
			
		||||
{
 | 
			
		||||
    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
 | 
			
		||||
     * to pending_buf_size, and each stored block has a 5 byte header:
 | 
			
		||||
     */
 | 
			
		||||
    ulg max_block_size = 0xffff;
 | 
			
		||||
    ulg max_start;
 | 
			
		||||
 | 
			
		||||
    if (max_block_size > s->pending_buf_size - 5) {
 | 
			
		||||
        max_block_size = s->pending_buf_size - 5;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Copy as much as possible from input to output: */
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        /* Fill the window as much as possible: */
 | 
			
		||||
        if (s->lookahead <= 1) {
 | 
			
		||||
@@ -973,14 +1037,17 @@ local block_state deflate_stored(s, flush)
 | 
			
		||||
	s->strstart += s->lookahead;
 | 
			
		||||
	s->lookahead = 0;
 | 
			
		||||
 | 
			
		||||
        /* Stored blocks are limited to 0xffff bytes: */
 | 
			
		||||
        if (s->strstart == 0 || s->strstart > 0xfffe) {
 | 
			
		||||
	/* Emit a stored block if pending_buf will be full: */
 | 
			
		||||
 	max_start = s->block_start + max_block_size;
 | 
			
		||||
        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
 | 
			
		||||
	    /* strstart == 0 is possible when wraparound on 16-bit machine */
 | 
			
		||||
	    s->lookahead = s->strstart - 0xffff;
 | 
			
		||||
	    s->strstart = 0xffff;
 | 
			
		||||
	    s->lookahead = (uInt)(s->strstart - max_start);
 | 
			
		||||
	    s->strstart = (uInt)max_start;
 | 
			
		||||
            FLUSH_BLOCK(s, 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Emit a stored block if it is large enough: */
 | 
			
		||||
	/* Flush if we may have to slide, otherwise block_start may become
 | 
			
		||||
         * negative and the data will be gone:
 | 
			
		||||
         */
 | 
			
		||||
        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
 | 
			
		||||
            FLUSH_BLOCK(s, 0);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* deflate.h -- internal compression state
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
   subject to change. Applications should only use zlib.h.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: deflate.h,v 1.10 1996/07/02 12:41:00 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#ifndef _DEFLATE_H
 | 
			
		||||
#define _DEFLATE_H
 | 
			
		||||
@@ -83,6 +83,7 @@ typedef struct internal_state {
 | 
			
		||||
    z_streamp strm;      /* pointer back to this zlib stream */
 | 
			
		||||
    int   status;        /* as the name implies */
 | 
			
		||||
    Bytef *pending_buf;  /* output still pending */
 | 
			
		||||
    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 */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								example.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								example.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
/* example.c -- usage example of the zlib compression library
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: example.c,v 1.16 1996/05/23 17:11:28 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
@@ -86,16 +86,17 @@ void test_gzio(out, in, uncompr, uncomprLen)
 | 
			
		||||
    int err;
 | 
			
		||||
    int len = strlen(hello)+1;
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    z_off_t pos;
 | 
			
		||||
 | 
			
		||||
    file = gzopen(out, "wb");
 | 
			
		||||
    if (file == NULL) {
 | 
			
		||||
        fprintf(stderr, "gzopen error\n");
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (gzwrite(file, (const voidp)hello, (unsigned)len) != len) {
 | 
			
		||||
        fprintf(stderr, "gzwrite err: %s\n", gzerror(file, &err));
 | 
			
		||||
    if (gzprintf(file, "%s, %s!", "hello", "hello") != len-1) {
 | 
			
		||||
        fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
 | 
			
		||||
    }
 | 
			
		||||
    gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
 | 
			
		||||
    gzclose(file);
 | 
			
		||||
 | 
			
		||||
    file = gzopen(in, "rb");
 | 
			
		||||
@@ -108,13 +109,28 @@ void test_gzio(out, in, uncompr, uncomprLen)
 | 
			
		||||
    if (uncomprLen != len) {
 | 
			
		||||
        fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
 | 
			
		||||
    }
 | 
			
		||||
    gzclose(file);
 | 
			
		||||
 | 
			
		||||
    if (strcmp((char*)uncompr, hello)) {
 | 
			
		||||
        fprintf(stderr, "bad gzread\n");
 | 
			
		||||
    } else {
 | 
			
		||||
        printf("gzread(): %s\n", uncompr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pos = gzseek(file, -7L, SEEK_CUR);
 | 
			
		||||
    if (pos != 7 || gztell(file) != pos) {
 | 
			
		||||
	fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
 | 
			
		||||
		pos, gztell(file));
 | 
			
		||||
    }
 | 
			
		||||
    uncomprLen = gzread(file, uncompr, (unsigned)uncomprLen);
 | 
			
		||||
    if (uncomprLen != 7) {
 | 
			
		||||
        fprintf(stderr, "gzread err after gzseek: %s\n", gzerror(file, &err));
 | 
			
		||||
    }
 | 
			
		||||
    if (strcmp((char*)uncompr, hello+7)) {
 | 
			
		||||
        fprintf(stderr, "bad gzread after gzseek\n");
 | 
			
		||||
    } else {
 | 
			
		||||
        printf("gzread() after gzseek: %s\n", uncompr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    gzclose(file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
@@ -171,12 +187,13 @@ void test_inflate(compr, comprLen, uncompr, uncomprLen)
 | 
			
		||||
    d_stream.zfree = (free_func)0;
 | 
			
		||||
    d_stream.opaque = (voidpf)0;
 | 
			
		||||
 | 
			
		||||
    d_stream.next_in  = compr;
 | 
			
		||||
    d_stream.avail_in = 0;
 | 
			
		||||
    d_stream.next_out = uncompr;
 | 
			
		||||
 | 
			
		||||
    err = inflateInit(&d_stream);
 | 
			
		||||
    CHECK_ERR(err, "inflateInit");
 | 
			
		||||
 | 
			
		||||
    d_stream.next_in  = compr;
 | 
			
		||||
    d_stream.next_out = uncompr;
 | 
			
		||||
 | 
			
		||||
    while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
 | 
			
		||||
        d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
 | 
			
		||||
        err = inflate(&d_stream, Z_NO_FLUSH);
 | 
			
		||||
@@ -263,12 +280,12 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen)
 | 
			
		||||
    d_stream.zfree = (free_func)0;
 | 
			
		||||
    d_stream.opaque = (voidpf)0;
 | 
			
		||||
 | 
			
		||||
    err = inflateInit(&d_stream);
 | 
			
		||||
    CHECK_ERR(err, "inflateInit");
 | 
			
		||||
 | 
			
		||||
    d_stream.next_in  = compr;
 | 
			
		||||
    d_stream.avail_in = (uInt)comprLen;
 | 
			
		||||
 | 
			
		||||
    err = inflateInit(&d_stream);
 | 
			
		||||
    CHECK_ERR(err, "inflateInit");
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        d_stream.next_out = uncompr;            /* discard the output */
 | 
			
		||||
	d_stream.avail_out = (uInt)uncomprLen;
 | 
			
		||||
@@ -339,12 +356,13 @@ void test_sync(compr, comprLen, uncompr, uncomprLen)
 | 
			
		||||
    d_stream.zfree = (free_func)0;
 | 
			
		||||
    d_stream.opaque = (voidpf)0;
 | 
			
		||||
 | 
			
		||||
    d_stream.next_in  = compr;
 | 
			
		||||
    d_stream.avail_in = 2; /* just read the zlib header */
 | 
			
		||||
 | 
			
		||||
    err = inflateInit(&d_stream);
 | 
			
		||||
    CHECK_ERR(err, "inflateInit");
 | 
			
		||||
 | 
			
		||||
    d_stream.next_in  = compr;
 | 
			
		||||
    d_stream.next_out = uncompr;
 | 
			
		||||
    d_stream.avail_in = 2; /* just read the zlib header */
 | 
			
		||||
    d_stream.avail_out = (uInt)uncomprLen;
 | 
			
		||||
 | 
			
		||||
    inflate(&d_stream, Z_NO_FLUSH);
 | 
			
		||||
@@ -417,12 +435,12 @@ void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
 | 
			
		||||
    d_stream.zfree = (free_func)0;
 | 
			
		||||
    d_stream.opaque = (voidpf)0;
 | 
			
		||||
 | 
			
		||||
    err = inflateInit(&d_stream);
 | 
			
		||||
    CHECK_ERR(err, "inflateInit");
 | 
			
		||||
 | 
			
		||||
    d_stream.next_in  = compr;
 | 
			
		||||
    d_stream.avail_in = (uInt)comprLen;
 | 
			
		||||
 | 
			
		||||
    err = inflateInit(&d_stream);
 | 
			
		||||
    CHECK_ERR(err, "inflateInit");
 | 
			
		||||
 | 
			
		||||
    d_stream.next_out = uncompr;
 | 
			
		||||
    d_stream.avail_out = (uInt)uncomprLen;
 | 
			
		||||
 | 
			
		||||
@@ -461,8 +479,9 @@ int main(argc, argv)
 | 
			
		||||
    Byte *compr, *uncompr;
 | 
			
		||||
    uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
 | 
			
		||||
    uLong uncomprLen = comprLen;
 | 
			
		||||
    static const char* myVersion = ZLIB_VERSION;
 | 
			
		||||
 | 
			
		||||
    if (zlibVersion()[0] != ZLIB_VERSION[0]) {
 | 
			
		||||
    if (zlibVersion()[0] != myVersion[0]) {
 | 
			
		||||
        fprintf(stderr, "incompatible zlib version\n");
 | 
			
		||||
        exit(1);
 | 
			
		||||
 | 
			
		||||
@@ -479,7 +498,6 @@ int main(argc, argv)
 | 
			
		||||
        printf("out of memory\n");
 | 
			
		||||
	exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_compress(compr, comprLen, uncompr, uncomprLen);
 | 
			
		||||
 | 
			
		||||
    test_gzio((argc > 1 ? argv[1] : "foo.gz"),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										333
									
								
								gzio.c
									
									
									
									
									
								
							
							
						
						
									
										333
									
								
								gzio.c
									
									
									
									
									
								
							@@ -1,9 +1,11 @@
 | 
			
		||||
/* gzio.c -- IO on .gz files
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h
 | 
			
		||||
 *
 | 
			
		||||
 * Compile this file with -DNO_DEFLATE to avoid the compression code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: gzio.c,v 1.14 1996/07/24 13:41:01 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
@@ -38,10 +40,12 @@ typedef struct gz_stream {
 | 
			
		||||
    char     *path;   /* path name for debugging only */
 | 
			
		||||
    int      transparent; /* 1 if input file is not a .gz file */
 | 
			
		||||
    char     mode;    /* 'w' or 'r' */
 | 
			
		||||
    long     startpos; /* start of compressed data in file (header skipped) */
 | 
			
		||||
} gz_stream;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local gzFile gz_open      OF((const char *path, const char *mode, int  fd));
 | 
			
		||||
local int do_flush        OF((gzFile file, int flush));
 | 
			
		||||
local int    get_byte     OF((gz_stream *s));
 | 
			
		||||
local void   check_header OF((gz_stream *s));
 | 
			
		||||
local int    destroy      OF((gz_stream *s));
 | 
			
		||||
@@ -64,6 +68,7 @@ local gzFile gz_open (path, mode, fd)
 | 
			
		||||
{
 | 
			
		||||
    int err;
 | 
			
		||||
    int level = Z_DEFAULT_COMPRESSION; /* compression level */
 | 
			
		||||
    int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */
 | 
			
		||||
    char *p = (char*)mode;
 | 
			
		||||
    gz_stream *s;
 | 
			
		||||
    char fmode[80]; /* copy of mode, without the compression level */
 | 
			
		||||
@@ -99,6 +104,10 @@ local gzFile gz_open (path, mode, fd)
 | 
			
		||||
        if (*p == 'w' || *p == 'a') s->mode = 'w';
 | 
			
		||||
        if (*p >= '0' && *p <= '9') {
 | 
			
		||||
	    level = *p - '0';
 | 
			
		||||
	} else if (*p == 'f') {
 | 
			
		||||
	  strategy = Z_FILTERED;
 | 
			
		||||
	} else if (*p == 'h') {
 | 
			
		||||
	  strategy = Z_HUFFMAN_ONLY;
 | 
			
		||||
	} else {
 | 
			
		||||
	    *m++ = *p; /* copy the mode */
 | 
			
		||||
	}
 | 
			
		||||
@@ -106,19 +115,24 @@ local gzFile gz_open (path, mode, fd)
 | 
			
		||||
    if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
 | 
			
		||||
    
 | 
			
		||||
    if (s->mode == 'w') {
 | 
			
		||||
#ifdef NO_DEFLATE
 | 
			
		||||
        err = Z_STREAM_ERROR;
 | 
			
		||||
#else
 | 
			
		||||
        err = deflateInit2(&(s->stream), level,
 | 
			
		||||
                           Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0);
 | 
			
		||||
                           Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy);
 | 
			
		||||
        /* windowBits is passed < 0 to suppress zlib header */
 | 
			
		||||
 | 
			
		||||
        s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
        if (err != Z_OK || s->outbuf == Z_NULL) {
 | 
			
		||||
            return destroy(s), (gzFile)Z_NULL;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        err = inflateInit2(&(s->stream), -MAX_WBITS);
 | 
			
		||||
        s->stream.next_in  = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
			
		||||
 | 
			
		||||
        err = inflateInit2(&(s->stream), -MAX_WBITS);
 | 
			
		||||
        /* windowBits is passed < 0 to tell that there is no zlib header */
 | 
			
		||||
 | 
			
		||||
        if (err != Z_OK || s->inbuf == Z_NULL) {
 | 
			
		||||
            return destroy(s), (gzFile)Z_NULL;
 | 
			
		||||
        }
 | 
			
		||||
@@ -126,7 +140,7 @@ local gzFile gz_open (path, mode, fd)
 | 
			
		||||
    s->stream.avail_out = Z_BUFSIZE;
 | 
			
		||||
 | 
			
		||||
    errno = 0;
 | 
			
		||||
    s->file = fd < 0 ? FOPEN(path, fmode) : (FILE*)fdopen(fd, fmode);
 | 
			
		||||
    s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode);
 | 
			
		||||
 | 
			
		||||
    if (s->file == NULL) {
 | 
			
		||||
        return destroy(s), (gzFile)Z_NULL;
 | 
			
		||||
@@ -136,16 +150,19 @@ local gzFile gz_open (path, mode, fd)
 | 
			
		||||
         */
 | 
			
		||||
        fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
 | 
			
		||||
             Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
 | 
			
		||||
	s->startpos = ftell(s->file);
 | 
			
		||||
    } else {
 | 
			
		||||
	check_header(s); /* skip the .gz header */
 | 
			
		||||
	s->startpos = (ftell(s->file) - s->stream.avail_in);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return (gzFile)s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Opens a gzip (.gz) file for reading or writing.
 | 
			
		||||
*/
 | 
			
		||||
gzFile gzopen (path, mode)
 | 
			
		||||
gzFile EXPORT gzopen (path, mode)
 | 
			
		||||
    const char *path;
 | 
			
		||||
    const char *mode;
 | 
			
		||||
{
 | 
			
		||||
@@ -156,7 +173,7 @@ gzFile gzopen (path, mode)
 | 
			
		||||
     Associate a gzFile with the file descriptor fd. fd is not dup'ed here
 | 
			
		||||
   to mimic the behavio(u)r of fdopen.
 | 
			
		||||
*/
 | 
			
		||||
gzFile gzdopen (fd, mode)
 | 
			
		||||
gzFile EXPORT gzdopen (fd, mode)
 | 
			
		||||
    int fd;
 | 
			
		||||
    const char *mode;
 | 
			
		||||
{
 | 
			
		||||
@@ -168,6 +185,31 @@ gzFile gzdopen (fd, mode)
 | 
			
		||||
    return gz_open (name, mode, fd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
 * Update the compression level and strategy
 | 
			
		||||
 */
 | 
			
		||||
int EXPORT gzsetparams (file, level, strategy)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    int level;
 | 
			
		||||
    int strategy;
 | 
			
		||||
{
 | 
			
		||||
    gz_stream *s = (gz_stream*)file;
 | 
			
		||||
 | 
			
		||||
    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
 | 
			
		||||
 | 
			
		||||
    /* Make room to allow flushing */
 | 
			
		||||
    if (s->stream.avail_out == 0) {
 | 
			
		||||
 | 
			
		||||
	s->stream.next_out = s->outbuf;
 | 
			
		||||
	if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
 | 
			
		||||
	    s->z_err = Z_ERRNO;
 | 
			
		||||
	}
 | 
			
		||||
	s->stream.avail_out = Z_BUFSIZE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return deflateParams (&(s->stream), level, strategy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
 | 
			
		||||
   for end of file.
 | 
			
		||||
@@ -212,8 +254,11 @@ local void check_header(s)
 | 
			
		||||
    for (len = 0; len < 2; len++) {
 | 
			
		||||
	c = get_byte(s);
 | 
			
		||||
	if (c != gz_magic[len]) {
 | 
			
		||||
	    if (len != 0) s->stream.avail_in++, s->stream.next_in--;
 | 
			
		||||
	    if (c != EOF) {
 | 
			
		||||
		s->stream.avail_in++, s->stream.next_in--;
 | 
			
		||||
		s->transparent = 1;
 | 
			
		||||
	    if (c != EOF) s->stream.avail_in++, s->stream.next_in--;
 | 
			
		||||
	    }
 | 
			
		||||
	    s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;
 | 
			
		||||
	    return;
 | 
			
		||||
	}
 | 
			
		||||
@@ -261,12 +306,19 @@ local int destroy (s)
 | 
			
		||||
 | 
			
		||||
    if (s->stream.state != NULL) {
 | 
			
		||||
	if (s->mode == 'w') {
 | 
			
		||||
#ifdef NO_DEFLATE
 | 
			
		||||
	    err = Z_STREAM_ERROR;
 | 
			
		||||
#else
 | 
			
		||||
	    err = deflateEnd(&(s->stream));
 | 
			
		||||
#endif
 | 
			
		||||
	} else if (s->mode == 'r') {
 | 
			
		||||
	    err = inflateEnd(&(s->stream));
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    if (s->file != NULL && fclose(s->file)) {
 | 
			
		||||
#ifdef ESPIPE
 | 
			
		||||
	if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */
 | 
			
		||||
#endif
 | 
			
		||||
	    err = Z_ERRNO;
 | 
			
		||||
    }
 | 
			
		||||
    if (s->z_err < 0) err = s->z_err;
 | 
			
		||||
@@ -282,13 +334,13 @@ local int destroy (s)
 | 
			
		||||
     Reads the given number of uncompressed bytes from the compressed file.
 | 
			
		||||
   gzread returns the number of bytes actually read (0 for end of file).
 | 
			
		||||
*/
 | 
			
		||||
int gzread (file, buf, len)
 | 
			
		||||
int EXPORT gzread (file, buf, len)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    voidp buf;
 | 
			
		||||
    unsigned len;
 | 
			
		||||
{
 | 
			
		||||
    gz_stream *s = (gz_stream*)file;
 | 
			
		||||
    Bytef *start = buf; /* starting point for crc computation */
 | 
			
		||||
    Bytef *start = (Bytef*)buf; /* starting point for crc computation */
 | 
			
		||||
    Byte  *next_out; /* == stream.next_out but not forced far (for MSDOS) */
 | 
			
		||||
 | 
			
		||||
    if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;
 | 
			
		||||
@@ -296,7 +348,8 @@ int gzread (file, buf, len)
 | 
			
		||||
    if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
 | 
			
		||||
    if (s->z_err == Z_STREAM_END) return 0;  /* EOF */
 | 
			
		||||
 | 
			
		||||
    s->stream.next_out = next_out = buf;
 | 
			
		||||
    next_out = (Byte*)buf;
 | 
			
		||||
    s->stream.next_out = (Bytef*)buf;
 | 
			
		||||
    s->stream.avail_out = len;
 | 
			
		||||
 | 
			
		||||
    while (s->stream.avail_out != 0) {
 | 
			
		||||
@@ -345,7 +398,12 @@ int gzread (file, buf, len)
 | 
			
		||||
		/* Check for concatenated .gz files: */
 | 
			
		||||
		check_header(s);
 | 
			
		||||
		if (s->z_err == Z_OK) {
 | 
			
		||||
		    uLong total_in = s->stream.total_in;
 | 
			
		||||
		    uLong total_out = s->stream.total_out;
 | 
			
		||||
 | 
			
		||||
		    inflateReset(&(s->stream));
 | 
			
		||||
		    s->stream.total_in = total_in;
 | 
			
		||||
		    s->stream.total_out = total_out;
 | 
			
		||||
		    s->crc = crc32(0L, Z_NULL, 0);
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
@@ -357,11 +415,26 @@ int gzread (file, buf, len)
 | 
			
		||||
    return (int)(len - s->stream.avail_out);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
      Reads one byte from the compressed file. gzgetc returns this byte
 | 
			
		||||
   or -1 in case of end of file or error.
 | 
			
		||||
*/
 | 
			
		||||
int EXPORT gzgetc(file)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
{
 | 
			
		||||
    int c;
 | 
			
		||||
 | 
			
		||||
    return gzread(file, &c, 1) == 1 ? c : -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef NO_DEFLATE
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Writes the given number of uncompressed bytes into the compressed file.
 | 
			
		||||
   gzwrite returns the number of bytes actually written (0 in case of error).
 | 
			
		||||
*/
 | 
			
		||||
int gzwrite (file, buf, len)
 | 
			
		||||
int EXPORT gzwrite (file, buf, len)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    const voidp buf;
 | 
			
		||||
    unsigned len;
 | 
			
		||||
@@ -370,7 +443,7 @@ int gzwrite (file, buf, len)
 | 
			
		||||
 | 
			
		||||
    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
 | 
			
		||||
 | 
			
		||||
    s->stream.next_in = buf;
 | 
			
		||||
    s->stream.next_in = (Bytef*)buf;
 | 
			
		||||
    s->stream.avail_in = len;
 | 
			
		||||
 | 
			
		||||
    while (s->stream.avail_in != 0) {
 | 
			
		||||
@@ -387,18 +460,79 @@ int gzwrite (file, buf, len)
 | 
			
		||||
        s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
 | 
			
		||||
        if (s->z_err != Z_OK) break;
 | 
			
		||||
    }
 | 
			
		||||
    s->crc = crc32(s->crc, buf, len);
 | 
			
		||||
    s->crc = crc32(s->crc, (const Bytef *)buf, len);
 | 
			
		||||
 | 
			
		||||
    return (int)(len - s->stream.avail_in);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Converts, formats, and writes the args to the compressed file under
 | 
			
		||||
   control of the format string, as in fprintf. gzprintf returns the number of
 | 
			
		||||
   uncompressed bytes actually written (0 in case of error).
 | 
			
		||||
*/
 | 
			
		||||
#ifdef STDC
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
int EXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...)
 | 
			
		||||
{
 | 
			
		||||
    char buf[Z_BUFSIZE];
 | 
			
		||||
    va_list va;
 | 
			
		||||
    int len;
 | 
			
		||||
 | 
			
		||||
    va_start(va, format);
 | 
			
		||||
#ifdef HAS_vsnprintf
 | 
			
		||||
    len = vsnprintf(buf, sizeof(buf), format, va);
 | 
			
		||||
#else
 | 
			
		||||
    len = vsprintf(buf, format, va);
 | 
			
		||||
#endif
 | 
			
		||||
    va_end(va);
 | 
			
		||||
    if (len <= 0) return 0;
 | 
			
		||||
 | 
			
		||||
    return gzwrite(file, buf, (unsigned)len);
 | 
			
		||||
}
 | 
			
		||||
#else /* not ANSI C */
 | 
			
		||||
 | 
			
		||||
int EXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
 | 
			
		||||
	               a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    const char *format;
 | 
			
		||||
    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
 | 
			
		||||
	a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
 | 
			
		||||
{
 | 
			
		||||
    char buf[Z_BUFSIZE];
 | 
			
		||||
    int len;
 | 
			
		||||
 | 
			
		||||
#ifdef HAS_snprintf
 | 
			
		||||
    snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
 | 
			
		||||
	     a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
 | 
			
		||||
#else
 | 
			
		||||
    sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
 | 
			
		||||
	    a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
 | 
			
		||||
#endif
 | 
			
		||||
    len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */
 | 
			
		||||
    if (len <= 0) return 0;
 | 
			
		||||
 | 
			
		||||
    return gzwrite(file, buf, len);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
      Writes c, converted to an unsigned char, into the compressed file.
 | 
			
		||||
   gzputc returns the value that was written, or -1 in case of error.
 | 
			
		||||
*/
 | 
			
		||||
int EXPORT gzputc(file, c)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    int c;
 | 
			
		||||
{
 | 
			
		||||
    return gzwrite(file, &c, 1) == 1 ? c : -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Flushes all pending output into the compressed file. The parameter
 | 
			
		||||
   flush is as in the deflate() function.
 | 
			
		||||
     gzflush should be called only when strictly necessary because it can
 | 
			
		||||
   degrade compression.
 | 
			
		||||
*/
 | 
			
		||||
int gzflush (file, flush)
 | 
			
		||||
local int do_flush (file, flush)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    int flush;
 | 
			
		||||
{
 | 
			
		||||
@@ -424,6 +558,9 @@ int gzflush (file, flush)
 | 
			
		||||
        if (done) break;
 | 
			
		||||
        s->z_err = deflate(&(s->stream), flush);
 | 
			
		||||
 | 
			
		||||
	/* Ignore the second of two consecutive flushes: */
 | 
			
		||||
	if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;
 | 
			
		||||
 | 
			
		||||
        /* deflate has finished flushing only when it hasn't used up
 | 
			
		||||
         * all the available space in the output buffer: 
 | 
			
		||||
         */
 | 
			
		||||
@@ -431,9 +568,154 @@ int gzflush (file, flush)
 | 
			
		||||
 
 | 
			
		||||
        if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
 | 
			
		||||
    }
 | 
			
		||||
    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int EXPORT gzflush (file, flush)
 | 
			
		||||
     gzFile file;
 | 
			
		||||
     int flush;
 | 
			
		||||
{
 | 
			
		||||
    gz_stream *s = (gz_stream*)file;
 | 
			
		||||
    int err = do_flush (file, flush);
 | 
			
		||||
 | 
			
		||||
    if (err) return err;
 | 
			
		||||
    fflush(s->file);
 | 
			
		||||
    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
 | 
			
		||||
}
 | 
			
		||||
#endif /* NO_DEFLATE */
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
      Sets the starting position for the next gzread or gzwrite on the given
 | 
			
		||||
   compressed file. The offset represents a number of bytes in the
 | 
			
		||||
      gzseek returns the resulting offset location as measured in bytes from
 | 
			
		||||
   the beginning of the uncompressed stream, or -1 in case of error.
 | 
			
		||||
      SEEK_END is not implemented, returns error.
 | 
			
		||||
      In this version of the library, gzseek can be extremely slow.
 | 
			
		||||
*/
 | 
			
		||||
z_off_t EXPORT gzseek (file, offset, whence)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    z_off_t offset;
 | 
			
		||||
    int whence;
 | 
			
		||||
{
 | 
			
		||||
    gz_stream *s = (gz_stream*)file;
 | 
			
		||||
 | 
			
		||||
    if (s == NULL || whence == SEEK_END || s->z_err == Z_ERRNO) return -1L;
 | 
			
		||||
 | 
			
		||||
    s->z_err = Z_OK;
 | 
			
		||||
    s->z_eof = 0;
 | 
			
		||||
    
 | 
			
		||||
    if (s->mode == 'w') {
 | 
			
		||||
#ifdef NO_DEFLATE
 | 
			
		||||
	return -1L;
 | 
			
		||||
#else
 | 
			
		||||
	if (whence == SEEK_SET) {
 | 
			
		||||
	    offset -= s->stream.total_out;
 | 
			
		||||
	}
 | 
			
		||||
	if (offset < 0) return -1L;
 | 
			
		||||
 | 
			
		||||
	/* At this point, offset is the number of zero bytes to write. */
 | 
			
		||||
	if (s->inbuf == Z_NULL) {
 | 
			
		||||
	    s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
 | 
			
		||||
	    zmemzero(s->inbuf, Z_BUFSIZE);
 | 
			
		||||
	}
 | 
			
		||||
	while (offset > 0)  {
 | 
			
		||||
	    uInt size = Z_BUFSIZE;
 | 
			
		||||
	    if (offset < Z_BUFSIZE) size = (uInt)offset;
 | 
			
		||||
 | 
			
		||||
	    size = gzwrite(file, s->inbuf, size);
 | 
			
		||||
	    if (size == 0) return -1L;
 | 
			
		||||
 | 
			
		||||
	    offset -= size;
 | 
			
		||||
	}
 | 
			
		||||
	return s->stream.total_in;
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
    /* Rest of function is for reading only */
 | 
			
		||||
 | 
			
		||||
    if (s->z_err == Z_DATA_ERROR) return -1L;
 | 
			
		||||
 | 
			
		||||
    /* compute absolute position */
 | 
			
		||||
    if (whence == SEEK_CUR) {
 | 
			
		||||
	offset += s->stream.total_out;
 | 
			
		||||
    }
 | 
			
		||||
    if (offset < 0) return -1L;
 | 
			
		||||
 | 
			
		||||
    if (s->transparent) {
 | 
			
		||||
	/* map to fseek */
 | 
			
		||||
	s->stream.avail_in = 0;
 | 
			
		||||
	s->stream.next_in = s->inbuf;
 | 
			
		||||
	if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;
 | 
			
		||||
	return offset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* For a negative seek, rewind and use positive seek */
 | 
			
		||||
    if ((uLong)offset >= s->stream.total_out) {
 | 
			
		||||
	offset -= s->stream.total_out;
 | 
			
		||||
    } else if (gzrewind(file) < 0) {
 | 
			
		||||
	return -1L;
 | 
			
		||||
    }
 | 
			
		||||
    /* offset is now the number of bytes to skip. */
 | 
			
		||||
 | 
			
		||||
    if (offset != 0 && s->outbuf == Z_NULL) {
 | 
			
		||||
	s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
 | 
			
		||||
    }
 | 
			
		||||
    while (offset > 0)  {
 | 
			
		||||
	int size = Z_BUFSIZE;
 | 
			
		||||
	if (offset < Z_BUFSIZE) size = (int)offset;
 | 
			
		||||
 | 
			
		||||
	size = gzread(file, s->outbuf, (uInt)size);
 | 
			
		||||
	if (size <= 0) return -1L;
 | 
			
		||||
	offset -= size;
 | 
			
		||||
    }
 | 
			
		||||
    return s->stream.total_out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Rewinds input file. 
 | 
			
		||||
*/
 | 
			
		||||
int EXPORT gzrewind (file)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
{
 | 
			
		||||
    gz_stream *s = (gz_stream*)file;
 | 
			
		||||
    
 | 
			
		||||
    if (s == NULL || s->mode != 'r') return -1;
 | 
			
		||||
 | 
			
		||||
    s->z_err = Z_OK;
 | 
			
		||||
    s->z_eof = 0;
 | 
			
		||||
    s->stream.avail_in = 0;
 | 
			
		||||
    s->stream.next_in = s->inbuf;
 | 
			
		||||
	
 | 
			
		||||
    if (s->startpos == 0) { /* not a compressed file */
 | 
			
		||||
	rewind(s->file);
 | 
			
		||||
	return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    (void) inflateReset(&s->stream);
 | 
			
		||||
    return fseek(s->file, s->startpos, SEEK_SET);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Returns the starting position for the next gzread or gzwrite on the
 | 
			
		||||
   given compressed file. This position represents a number of bytes in the
 | 
			
		||||
   uncompressed data stream.
 | 
			
		||||
*/
 | 
			
		||||
z_off_t EXPORT gztell (file)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
{
 | 
			
		||||
    return gzseek(file, 0L, SEEK_CUR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
     Returns 1 when EOF has previously been detected reading the given
 | 
			
		||||
   input stream, otherwise zero.
 | 
			
		||||
*/
 | 
			
		||||
int EXPORT gzeof (file)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
{
 | 
			
		||||
    gz_stream *s = (gz_stream*)file;
 | 
			
		||||
    
 | 
			
		||||
    return (s == NULL || s->mode != 'r') ? 0 : s->z_eof;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
   Outputs a long in LSB order to the given file
 | 
			
		||||
@@ -470,7 +752,7 @@ local uLong getLong (s)
 | 
			
		||||
     Flushes all pending output if necessary, closes the compressed file
 | 
			
		||||
   and deallocates all the (de)compression state.
 | 
			
		||||
*/
 | 
			
		||||
int gzclose (file)
 | 
			
		||||
int EXPORT gzclose (file)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
{
 | 
			
		||||
    int err;
 | 
			
		||||
@@ -479,14 +761,17 @@ int gzclose (file)
 | 
			
		||||
    if (s == NULL) return Z_STREAM_ERROR;
 | 
			
		||||
 | 
			
		||||
    if (s->mode == 'w') {
 | 
			
		||||
        err = gzflush (file, Z_FINISH);
 | 
			
		||||
        if (err != Z_OK) return destroy(file);
 | 
			
		||||
#ifdef NO_DEFLATE
 | 
			
		||||
	return Z_STREAM_ERROR;
 | 
			
		||||
#else
 | 
			
		||||
        err = do_flush (file, Z_FINISH);
 | 
			
		||||
        if (err != Z_OK) return destroy((gz_stream*)file);
 | 
			
		||||
 | 
			
		||||
        putLong (s->file, s->crc);
 | 
			
		||||
        putLong (s->file, s->stream.total_in);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
    return destroy(file);
 | 
			
		||||
    return destroy((gz_stream*)file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
@@ -496,7 +781,7 @@ int gzclose (file)
 | 
			
		||||
   errnum is set to Z_ERRNO and the application may consult errno
 | 
			
		||||
   to get the exact error code.
 | 
			
		||||
*/
 | 
			
		||||
const char*  gzerror (file, errnum)
 | 
			
		||||
const char*  EXPORT gzerror (file, errnum)
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    int *errnum;
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								infblock.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								infblock.c
									
									
									
									
									
								
							@@ -66,7 +66,7 @@ inflate_blocks_statef *s;
 | 
			
		||||
z_streamp z;
 | 
			
		||||
uLongf *c;
 | 
			
		||||
{
 | 
			
		||||
  if (s->checkfn != Z_NULL)
 | 
			
		||||
  if (c != Z_NULL)
 | 
			
		||||
    *c = s->check;
 | 
			
		||||
  if (s->mode == BTREE || s->mode == DTREE)
 | 
			
		||||
    ZFREE(z, s->sub.trees.blens);
 | 
			
		||||
@@ -81,7 +81,7 @@ uLongf *c;
 | 
			
		||||
  s->bitb = 0;
 | 
			
		||||
  s->read = s->write = s->window;
 | 
			
		||||
  if (s->checkfn != Z_NULL)
 | 
			
		||||
    z->adler = s->check = (*s->checkfn)(0L, Z_NULL, 0);
 | 
			
		||||
    z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
 | 
			
		||||
  Trace((stderr, "inflate:   blocks reset\n"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -105,7 +105,7 @@ uInt w;
 | 
			
		||||
  s->checkfn = c;
 | 
			
		||||
  s->mode = TYPE;
 | 
			
		||||
  Trace((stderr, "inflate:   blocks allocated\n"));
 | 
			
		||||
  inflate_blocks_reset(s, z, &s->check);
 | 
			
		||||
  inflate_blocks_reset(s, z, Z_NULL);
 | 
			
		||||
  return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -380,12 +380,11 @@ int r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflate_blocks_free(s, z, c)
 | 
			
		||||
int inflate_blocks_free(s, z)
 | 
			
		||||
inflate_blocks_statef *s;
 | 
			
		||||
z_streamp z;
 | 
			
		||||
uLongf *c;
 | 
			
		||||
{
 | 
			
		||||
  inflate_blocks_reset(s, z, c);
 | 
			
		||||
  inflate_blocks_reset(s, z, Z_NULL);
 | 
			
		||||
  ZFREE(z, s->window);
 | 
			
		||||
  ZFREE(z, s);
 | 
			
		||||
  Trace((stderr, "inflate:   blocks freed\n"));
 | 
			
		||||
@@ -401,3 +400,14 @@ uInt  n;
 | 
			
		||||
  zmemcpy((charf *)s->window, d, n);
 | 
			
		||||
  s->read = s->write = s->window + n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Returns true if inflate is currently at the end of a block generated
 | 
			
		||||
 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
 | 
			
		||||
 * IN assertion: s != Z_NULL
 | 
			
		||||
 */
 | 
			
		||||
int inflate_blocks_sync_point(s)
 | 
			
		||||
inflate_blocks_statef *s;
 | 
			
		||||
{
 | 
			
		||||
  return s->mode == LENS;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* infblock.h -- header to use infblock.c
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -28,10 +28,12 @@ extern void inflate_blocks_reset OF((
 | 
			
		||||
 | 
			
		||||
extern int inflate_blocks_free OF((
 | 
			
		||||
    inflate_blocks_statef *,
 | 
			
		||||
    z_streamp ,
 | 
			
		||||
    uLongf *));                  /* check value on output */
 | 
			
		||||
    z_streamp));
 | 
			
		||||
 | 
			
		||||
extern void inflate_set_dictionary OF((
 | 
			
		||||
    inflate_blocks_statef *s,
 | 
			
		||||
    const Bytef *d,  /* dictionary */
 | 
			
		||||
    uInt  n));       /* dictionary length */
 | 
			
		||||
 | 
			
		||||
extern int inflate_blocks_sync_point OF((
 | 
			
		||||
    inflate_blocks_statef *s));
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								infcodes.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								infcodes.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
/* infcodes.c -- process literals and length/distance pairs
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -16,11 +16,7 @@
 | 
			
		||||
#define exop word.what.Exop
 | 
			
		||||
#define bits word.what.Bits
 | 
			
		||||
 | 
			
		||||
/* inflate codes private state */
 | 
			
		||||
struct inflate_codes_state {
 | 
			
		||||
 | 
			
		||||
  /* mode */
 | 
			
		||||
  enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
 | 
			
		||||
typedef enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
 | 
			
		||||
      START,    /* x: set up for LEN */
 | 
			
		||||
      LEN,      /* i: get length/literal/eob next */
 | 
			
		||||
      LENEXT,   /* i: getting length extra (have base) */
 | 
			
		||||
@@ -31,7 +27,13 @@ struct inflate_codes_state {
 | 
			
		||||
      WASH,     /* o: got eob, possibly still output waiting */
 | 
			
		||||
      END,      /* x: got eob and all data flushed */
 | 
			
		||||
      BADCODE}  /* x: got error */
 | 
			
		||||
    mode;               /* current inflate_codes mode */
 | 
			
		||||
inflate_codes_mode;
 | 
			
		||||
 | 
			
		||||
/* inflate codes private state */
 | 
			
		||||
struct inflate_codes_state {
 | 
			
		||||
 | 
			
		||||
  /* mode */
 | 
			
		||||
  inflate_codes_mode mode;      /* current inflate_codes mode */
 | 
			
		||||
 | 
			
		||||
  /* mode dependent information */
 | 
			
		||||
  uInt len;
 | 
			
		||||
@@ -235,6 +237,9 @@ int r;
 | 
			
		||||
      r = Z_STREAM_ERROR;
 | 
			
		||||
      LEAVE
 | 
			
		||||
  }
 | 
			
		||||
#ifdef NEED_DUMMY_RETURN
 | 
			
		||||
  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* infcodes.h -- header to use infcodes.c
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* inffast.c -- process literals and length/distance pairs fast
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* inffast.h -- header to use inffast.c
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										72
									
								
								inflate.c
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								inflate.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
/* inflate.c -- zlib interface to inflate modules
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -8,11 +8,7 @@
 | 
			
		||||
 | 
			
		||||
struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
 | 
			
		||||
 | 
			
		||||
/* inflate private state */
 | 
			
		||||
struct internal_state {
 | 
			
		||||
 | 
			
		||||
  /* mode */
 | 
			
		||||
  enum {
 | 
			
		||||
typedef enum {
 | 
			
		||||
      METHOD,   /* waiting for method byte */
 | 
			
		||||
      FLAG,     /* waiting for flag byte */
 | 
			
		||||
      DICT4,    /* four dictionary check bytes to go */
 | 
			
		||||
@@ -27,7 +23,13 @@ struct internal_state {
 | 
			
		||||
      CHECK1,   /* one check byte to go */
 | 
			
		||||
      DONE,     /* finished check, done */
 | 
			
		||||
      BAD}      /* got an error--stay here */
 | 
			
		||||
    mode;               /* current inflate mode */
 | 
			
		||||
inflate_mode;
 | 
			
		||||
 | 
			
		||||
/* inflate private state */
 | 
			
		||||
struct internal_state {
 | 
			
		||||
 | 
			
		||||
  /* mode */
 | 
			
		||||
  inflate_mode  mode;   /* current inflate mode */
 | 
			
		||||
 | 
			
		||||
  /* mode dependent information */
 | 
			
		||||
  union {
 | 
			
		||||
@@ -48,39 +50,35 @@ struct internal_state {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflateReset(z)
 | 
			
		||||
int EXPORT inflateReset(z)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
{
 | 
			
		||||
  uLong c;
 | 
			
		||||
 | 
			
		||||
  if (z == Z_NULL || z->state == Z_NULL)
 | 
			
		||||
    return Z_STREAM_ERROR;
 | 
			
		||||
  z->total_in = z->total_out = 0;
 | 
			
		||||
  z->msg = Z_NULL;
 | 
			
		||||
  z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
 | 
			
		||||
  inflate_blocks_reset(z->state->blocks, z, &c);
 | 
			
		||||
  Trace((stderr, "inflate: reset\n"));
 | 
			
		||||
  inflate_blocks_reset(z->state->blocks, z, Z_NULL);
 | 
			
		||||
  Tracev((stderr, "inflate: reset\n"));
 | 
			
		||||
  return Z_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflateEnd(z)
 | 
			
		||||
int EXPORT inflateEnd(z)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
{
 | 
			
		||||
  uLong c;
 | 
			
		||||
 | 
			
		||||
  if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
 | 
			
		||||
    return Z_STREAM_ERROR;
 | 
			
		||||
  if (z->state->blocks != Z_NULL)
 | 
			
		||||
    inflate_blocks_free(z->state->blocks, z, &c);
 | 
			
		||||
    inflate_blocks_free(z->state->blocks, z);
 | 
			
		||||
  ZFREE(z, z->state);
 | 
			
		||||
  z->state = Z_NULL;
 | 
			
		||||
  Trace((stderr, "inflate: end\n"));
 | 
			
		||||
  Tracev((stderr, "inflate: end\n"));
 | 
			
		||||
  return Z_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflateInit2_(z, w, version, stream_size)
 | 
			
		||||
int EXPORT inflateInit2_(z, w, version, stream_size)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
int w;
 | 
			
		||||
const char *version;
 | 
			
		||||
@@ -129,7 +127,7 @@ int stream_size;
 | 
			
		||||
    inflateEnd(z);
 | 
			
		||||
    return Z_MEM_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  Trace((stderr, "inflate: allocated\n"));
 | 
			
		||||
  Tracev((stderr, "inflate: allocated\n"));
 | 
			
		||||
 | 
			
		||||
  /* reset state */
 | 
			
		||||
  inflateReset(z);
 | 
			
		||||
@@ -137,7 +135,7 @@ int stream_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflateInit_(z, version, stream_size)
 | 
			
		||||
int EXPORT inflateInit_(z, version, stream_size)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
const char *version;
 | 
			
		||||
int stream_size;
 | 
			
		||||
@@ -146,10 +144,10 @@ int stream_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define NEEDBYTE {if(z->avail_in==0)return r;r=Z_OK;}
 | 
			
		||||
#define NEEDBYTE {if(z->avail_in==0)return r; if (f != Z_FINISH) r = Z_OK;}
 | 
			
		||||
#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
 | 
			
		||||
 | 
			
		||||
int inflate(z, f)
 | 
			
		||||
int EXPORT inflate(z, f)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
int f;
 | 
			
		||||
{
 | 
			
		||||
@@ -188,7 +186,7 @@ int f;
 | 
			
		||||
        z->state->sub.marker = 5;       /* can't try inflateSync */
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      Trace((stderr, "inflate: zlib header ok\n"));
 | 
			
		||||
      Tracev((stderr, "inflate: zlib header ok\n"));
 | 
			
		||||
      if (!(b & PRESET_DICT))
 | 
			
		||||
      {
 | 
			
		||||
        z->state->mode = BLOCKS;
 | 
			
		||||
@@ -227,7 +225,7 @@ int f;
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      if (r != Z_STREAM_END)
 | 
			
		||||
        return r;
 | 
			
		||||
        return f == Z_FINISH && r == Z_OK ? Z_BUF_ERROR : r;
 | 
			
		||||
      r = Z_OK;
 | 
			
		||||
      inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
 | 
			
		||||
      if (z->state->nowrap)
 | 
			
		||||
@@ -236,6 +234,7 @@ int f;
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      z->state->mode = CHECK4;
 | 
			
		||||
      if (f == Z_FINISH) r = Z_BUF_ERROR;
 | 
			
		||||
    case CHECK4:
 | 
			
		||||
      NEEDBYTE
 | 
			
		||||
      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
 | 
			
		||||
@@ -259,7 +258,7 @@ int f;
 | 
			
		||||
        z->state->sub.marker = 5;       /* can't try inflateSync */
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      Trace((stderr, "inflate: zlib check ok\n"));
 | 
			
		||||
      Tracev((stderr, "inflate: zlib check ok\n"));
 | 
			
		||||
      z->state->mode = DONE;
 | 
			
		||||
    case DONE:
 | 
			
		||||
      return Z_STREAM_END;
 | 
			
		||||
@@ -268,10 +267,13 @@ int f;
 | 
			
		||||
    default:
 | 
			
		||||
      return Z_STREAM_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
#ifdef NEED_DUMMY_RETURN
 | 
			
		||||
  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflateSetDictionary(z, dictionary, dictLength)
 | 
			
		||||
int EXPORT inflateSetDictionary(z, dictionary, dictLength)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
const Bytef *dictionary;
 | 
			
		||||
uInt  dictLength;
 | 
			
		||||
@@ -295,7 +297,7 @@ uInt  dictLength;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int inflateSync(z)
 | 
			
		||||
int EXPORT inflateSync(z)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
{
 | 
			
		||||
  uInt n;       /* number of bytes to look at */
 | 
			
		||||
@@ -343,3 +345,19 @@ z_streamp z;
 | 
			
		||||
  z->state->mode = BLOCKS;
 | 
			
		||||
  return Z_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Returns true if inflate is currently at the end of a block generated
 | 
			
		||||
 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
 | 
			
		||||
 * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
 | 
			
		||||
 * but removes the length bytes of the resulting empty stored block. When
 | 
			
		||||
 * decompressing, PPP checks that at the end of input packet, inflate is
 | 
			
		||||
 * waiting for these length bytes.
 | 
			
		||||
 */
 | 
			
		||||
int EXPORT inflateSyncPoint(z)
 | 
			
		||||
z_streamp z;
 | 
			
		||||
{
 | 
			
		||||
  if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
 | 
			
		||||
    return Z_STREAM_ERROR;
 | 
			
		||||
  return inflate_blocks_sync_point(z->state->blocks);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,8 @@
 | 
			
		||||
#include "zutil.h"
 | 
			
		||||
#include "inftrees.h"
 | 
			
		||||
 | 
			
		||||
char inflate_copyright[] = " inflate 1.0.5 Copyright 1995-1998 Mark Adler ";
 | 
			
		||||
const char inflate_copyright[] =
 | 
			
		||||
   " inflate 1.0.7 Copyright 1995-1998 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* inftrees.h -- header to use inftrees.c
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* inflate_util.c -- data and routines common to blocks and codes
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/* infutil.h -- types and macros common to blocks and codes
 | 
			
		||||
 * Copyright (C) 1995-1996 Mark Adler
 | 
			
		||||
 * Copyright (C) 1995-1998 Mark Adler
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								minigzip.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								minigzip.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
/* minigzip.c -- simulate gzip using the zlib compression library
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
 * or in pipe mode.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: minigzip.c,v 1.10 1996/07/24 13:41:04 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
@@ -47,18 +47,19 @@
 | 
			
		||||
#ifndef GZ_SUFFIX
 | 
			
		||||
#  define GZ_SUFFIX ".gz"
 | 
			
		||||
#endif
 | 
			
		||||
#define SUFFIX_LEN sizeof(GZ_SUFFIX)
 | 
			
		||||
#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1)
 | 
			
		||||
 | 
			
		||||
extern int unlink OF((const char *));
 | 
			
		||||
 | 
			
		||||
#define BUFLEN 4096
 | 
			
		||||
#define MAX_NAME_LEN 1024
 | 
			
		||||
 | 
			
		||||
#define local static
 | 
			
		||||
/* For MSDOS and other systems with limitation on stack size. For Unix,
 | 
			
		||||
    #define local
 | 
			
		||||
   works also.
 | 
			
		||||
 */
 | 
			
		||||
#ifdef MAXSEG_64K
 | 
			
		||||
#  define local static
 | 
			
		||||
   /* Needed for systems with limitation on stack size. */
 | 
			
		||||
#else
 | 
			
		||||
#  define local
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
char *prog;
 | 
			
		||||
 | 
			
		||||
@@ -201,7 +202,11 @@ void file_uncompress(file)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ===========================================================================
 | 
			
		||||
 * Usage:  minigzip [-d] [files...]
 | 
			
		||||
 * Usage:  minigzip [-d] [-f] [-h] [-1 to -9] [files...]
 | 
			
		||||
 *   -d : decompress
 | 
			
		||||
 *   -f : compress with Z_FILTERED
 | 
			
		||||
 *   -h : compress with Z_HUFFMAN_ONLY
 | 
			
		||||
 *   -1 to -9 : compression level
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int main(argc, argv)
 | 
			
		||||
@@ -210,16 +215,27 @@ int main(argc, argv)
 | 
			
		||||
{
 | 
			
		||||
    int uncompr = 0;
 | 
			
		||||
    gzFile file;
 | 
			
		||||
    char outmode[20];
 | 
			
		||||
 | 
			
		||||
    strcpy(outmode, "wb6 ");
 | 
			
		||||
 | 
			
		||||
    prog = argv[0];
 | 
			
		||||
    argc--, argv++;
 | 
			
		||||
 | 
			
		||||
    if (argc > 0) {
 | 
			
		||||
        uncompr = (strcmp(*argv, "-d") == 0);
 | 
			
		||||
        if (uncompr) {
 | 
			
		||||
    while (argc > 0) {
 | 
			
		||||
      if (strcmp(*argv, "-d") == 0)
 | 
			
		||||
	uncompr = 1;
 | 
			
		||||
      else if (strcmp(*argv, "-f") == 0)
 | 
			
		||||
	outmode[3] = 'f';
 | 
			
		||||
      else if (strcmp(*argv, "-h") == 0)
 | 
			
		||||
	outmode[3] = 'h';
 | 
			
		||||
      else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' &&
 | 
			
		||||
	       (*argv)[2] == 0)
 | 
			
		||||
	outmode[2] = (*argv)[1];
 | 
			
		||||
      else
 | 
			
		||||
	break;
 | 
			
		||||
      argc--, argv++;
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
    if (argc == 0) {
 | 
			
		||||
        SET_BINARY_MODE(stdin);
 | 
			
		||||
        SET_BINARY_MODE(stdout);
 | 
			
		||||
@@ -228,7 +244,7 @@ int main(argc, argv)
 | 
			
		||||
            if (file == NULL) error("can't gzdopen stdin");
 | 
			
		||||
            gz_uncompress(file, stdout);
 | 
			
		||||
        } else {
 | 
			
		||||
            file = gzdopen(fileno(stdout), "wb"); /* "wb9" for max compr. */
 | 
			
		||||
            file = gzdopen(fileno(stdout), outmode);
 | 
			
		||||
            if (file == NULL) error("can't gzdopen stdout");
 | 
			
		||||
            gz_compress(stdin, file);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
# Makefile for zlib.  Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
 | 
			
		||||
# Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
# Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
# For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 | 
			
		||||
# To compile, or to compile and test, type:
 | 
			
		||||
@@ -22,7 +22,8 @@
 | 
			
		||||
# - - - - -
 | 
			
		||||
# Alternately, these variables may be defined below, overriding the values
 | 
			
		||||
# in djgpp.env, as
 | 
			
		||||
INCLUDE_PATH=c:\usr\include
 | 
			
		||||
# INCLUDE_PATH=c:\usr\include
 | 
			
		||||
# LIBRARY_PATH=c:\usr\lib
 | 
			
		||||
 | 
			
		||||
CC=gcc
 | 
			
		||||
 | 
			
		||||
@@ -32,12 +33,12 @@ CC=gcc
 | 
			
		||||
CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
 | 
			
		||||
             -Wstrict-prototypes -Wmissing-prototypes
 | 
			
		||||
 | 
			
		||||
# If cp.exe is not found, replace with copy /Y .
 | 
			
		||||
CP=cp -f
 | 
			
		||||
# If install.exe is not found, replace with $(CP).
 | 
			
		||||
INSTALL=install
 | 
			
		||||
# The default value of RM is "rm -f."  If "rm.exe" is not found, uncomment:
 | 
			
		||||
# RM=del
 | 
			
		||||
# If cp.exe is available, replace "copy /Y" with "cp -fp" .
 | 
			
		||||
CP=copy /Y
 | 
			
		||||
# If gnu install.exe is available, replace $(CP) with ginstall.
 | 
			
		||||
INSTALL=$(CP)
 | 
			
		||||
# The default value of RM is "rm -f."  If "rm.exe" is found, comment out:
 | 
			
		||||
RM=del
 | 
			
		||||
LDLIBS=-L. -lz
 | 
			
		||||
LD=$(CC) -s -o
 | 
			
		||||
LDSHARED=$(CC)
 | 
			
		||||
@@ -77,15 +78,21 @@ libz.a: $(OBJS)
 | 
			
		||||
install: $(INCL) $(LIBS)
 | 
			
		||||
	-@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
 | 
			
		||||
	-@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
 | 
			
		||||
	for %%f in ($(INCL)) do $(INSTALL) %%f $(INCLUDE_PATH)
 | 
			
		||||
	for %%p in ($(LIBS)) do $(INSTALL) %%p $(LIBRARY_PATH)
 | 
			
		||||
	$(INSTALL) zlib.h $(INCLUDE_PATH)
 | 
			
		||||
	$(INSTALL) zconf.h $(INCLUDE_PATH)
 | 
			
		||||
	$(INSTALL) libz.a $(LIBRARY_PATH)
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	for %%f in ($(INCL)) do $(RM) $(INCLUDE_PATH)\%%f
 | 
			
		||||
	for %%p in ($(LIBS)) do $(RM) $(LIBRARY_PATH)\%%p
 | 
			
		||||
	$(RM) $(INCLUDE_PATH)\zlib.h
 | 
			
		||||
	$(RM) $(INCLUDE_PATH)\zconf.h
 | 
			
		||||
	$(RM) $(LIBRARY_PATH)\libz.a
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	for %%p in (*.d *.o *.exe libz.a libz.so* foo.gz) do $(RM) %%p
 | 
			
		||||
	$(RM) *.d
 | 
			
		||||
	$(RM) *.o
 | 
			
		||||
	$(RM) *.exe
 | 
			
		||||
	$(RM) libz.a
 | 
			
		||||
	$(RM) foo.gz
 | 
			
		||||
 | 
			
		||||
DEPS := $(wildcard *.d)
 | 
			
		||||
ifneq ($(DEPS),)
 | 
			
		||||
@@ -15,7 +15,7 @@ CFLAGS=-Oait -Gs -nologo -W3 $(MODEL)
 | 
			
		||||
#-Ox generates bad code with MSC 5.1
 | 
			
		||||
CC=cl
 | 
			
		||||
LD=link
 | 
			
		||||
LDFLAGS=/e/st:0x1000/noe
 | 
			
		||||
LDFLAGS=/e/st:0x1500/noe
 | 
			
		||||
O=.obj
 | 
			
		||||
 | 
			
		||||
# variables
 | 
			
		||||
							
								
								
									
										57
									
								
								msdos/zlib.def
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								msdos/zlib.def
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
LIBRARY		"zlib"
 | 
			
		||||
 | 
			
		||||
DESCRIPTION	'"""zlib data compression library"""'
 | 
			
		||||
 | 
			
		||||
EXETYPE		NT
 | 
			
		||||
 | 
			
		||||
SUBSYSTEM	WINDOWS
 | 
			
		||||
 | 
			
		||||
STUB		'WINSTUB.EXE'
 | 
			
		||||
 | 
			
		||||
VERSION		1.07
 | 
			
		||||
 | 
			
		||||
CODE		 EXECUTE READ
 | 
			
		||||
 | 
			
		||||
DATA		 READ WRITE
 | 
			
		||||
 | 
			
		||||
HEAPSIZE	1048576,4096
 | 
			
		||||
 | 
			
		||||
EXPORTS
 | 
			
		||||
    adler32                        @1
 | 
			
		||||
    compress                       @2
 | 
			
		||||
    crc32                          @3
 | 
			
		||||
    deflate                        @4
 | 
			
		||||
    deflateCopy                    @5
 | 
			
		||||
    deflateEnd                     @6
 | 
			
		||||
    deflateInit2_                  @7
 | 
			
		||||
    deflateInit_                   @8
 | 
			
		||||
    deflateParams                  @9
 | 
			
		||||
    deflateReset                   @10
 | 
			
		||||
    deflateSetDictionary           @11
 | 
			
		||||
    gzclose                        @12
 | 
			
		||||
    gzdopen                        @13
 | 
			
		||||
    gzerror                        @14
 | 
			
		||||
    gzflush                        @15
 | 
			
		||||
    gzopen                         @16
 | 
			
		||||
    gzread                         @17
 | 
			
		||||
    gzwrite                        @18
 | 
			
		||||
    inflate                        @19
 | 
			
		||||
    inflateEnd                     @20
 | 
			
		||||
    inflateInit2_                  @21
 | 
			
		||||
    inflateInit_                   @22
 | 
			
		||||
    inflateReset                   @23
 | 
			
		||||
    inflateSetDictionary           @24
 | 
			
		||||
    inflateSync                    @25
 | 
			
		||||
    uncompress                     @26
 | 
			
		||||
    zlibVersion                    @27
 | 
			
		||||
    gzprintf                       @28
 | 
			
		||||
    gzputc                         @29
 | 
			
		||||
    gzgetc                         @30
 | 
			
		||||
    gzseek                         @31
 | 
			
		||||
    gzrewind                       @32
 | 
			
		||||
    gztell                         @33
 | 
			
		||||
    gzeof                          @34
 | 
			
		||||
    gzsetparams                    @35
 | 
			
		||||
    zError                         @36
 | 
			
		||||
    inflateSyncPoint               @37
 | 
			
		||||
    get_crc_table                  @38
 | 
			
		||||
@@ -2,8 +2,8 @@
 | 
			
		||||
 | 
			
		||||
#define IDR_VERSION1  1
 | 
			
		||||
IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE
 | 
			
		||||
  FILEVERSION	 1,0,5,0
 | 
			
		||||
  PRODUCTVERSION 1,0,5,0
 | 
			
		||||
  FILEVERSION	 1,0,7,0
 | 
			
		||||
  PRODUCTVERSION 1,0,7,0
 | 
			
		||||
  FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK
 | 
			
		||||
  FILEFLAGS	0
 | 
			
		||||
  FILEOS	VOS_DOS_WINDOWS32
 | 
			
		||||
@@ -17,12 +17,12 @@ BEGIN
 | 
			
		||||
 | 
			
		||||
    BEGIN
 | 
			
		||||
      VALUE "FileDescription", "zlib data compression library\0"
 | 
			
		||||
      VALUE "FileVersion",	"1.0.5\0"
 | 
			
		||||
      VALUE "FileVersion",	"1.0.7\0"
 | 
			
		||||
      VALUE "InternalName",	"zlib\0"
 | 
			
		||||
      VALUE "OriginalFilename",	"zlib.lib\0"
 | 
			
		||||
      VALUE "ProductName",	"ZLib.DLL\0"
 | 
			
		||||
      VALUE "Comments",	"DLL support by Alessandro Iacopetti\0"
 | 
			
		||||
      VALUE "LegalCopyright", "(C) 1995-1996 Jean-loup Gailly & Mark Adler\0"
 | 
			
		||||
      VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
 | 
			
		||||
      VALUE "LegalCopyright", "(C) 1995-1998 Jean-loup Gailly & Mark Adler\0"
 | 
			
		||||
    END
 | 
			
		||||
  END
 | 
			
		||||
  BLOCK "VarFileInfo"
 | 
			
		||||
							
								
								
									
										88
									
								
								nt/Makefile.nt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								nt/Makefile.nt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
# Makefile for zlib
 | 
			
		||||
 | 
			
		||||
!include <ntwin32.mak>
 | 
			
		||||
 | 
			
		||||
CC=cl
 | 
			
		||||
LD=link
 | 
			
		||||
CFLAGS=-O -nologo
 | 
			
		||||
LDFLAGS=
 | 
			
		||||
O=.obj
 | 
			
		||||
 | 
			
		||||
# variables
 | 
			
		||||
OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
 | 
			
		||||
  trees$(O)
 | 
			
		||||
OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
 | 
			
		||||
  infutil$(O) inffast$(O)
 | 
			
		||||
 | 
			
		||||
all:  zlib.dll example.exe minigzip.exe
 | 
			
		||||
 | 
			
		||||
adler32.obj: adler32.c zutil.h zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
compress.obj: compress.c zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
crc32.obj: crc32.c zutil.h zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
gzio.obj: gzio.c zutil.h zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
 | 
			
		||||
   infcodes.h infutil.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
 | 
			
		||||
   infcodes.h inffast.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
uncompr.obj: uncompr.c zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
zutil.obj: zutil.c zutil.h zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
example.obj: example.c zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
minigzip.obj: minigzip.c zlib.h zconf.h
 | 
			
		||||
	$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
 | 
			
		||||
 | 
			
		||||
zlib.dll: $(OBJ1) $(OBJ2) zlib.dnt
 | 
			
		||||
	link $(dlllflags) -out:$@ -def:zlib.dnt $(OBJ1) $(OBJ2) $(guilibsdll)
 | 
			
		||||
 | 
			
		||||
zlib.lib: zlib.dll
 | 
			
		||||
 | 
			
		||||
example.exe: example.obj zlib.lib
 | 
			
		||||
	$(LD) $(LDFLAGS) example.obj zlib.lib
 | 
			
		||||
 | 
			
		||||
minigzip.exe: minigzip.obj zlib.lib
 | 
			
		||||
	$(LD) $(LDFLAGS) minigzip.obj zlib.lib
 | 
			
		||||
 | 
			
		||||
test: example.exe minigzip.exe
 | 
			
		||||
	example
 | 
			
		||||
	echo hello world | minigzip | minigzip -d 
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	del *.obj
 | 
			
		||||
	del *.exe
 | 
			
		||||
	del *.dll
 | 
			
		||||
	del *.lib
 | 
			
		||||
							
								
								
									
										44
									
								
								nt/zlib.dnt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								nt/zlib.dnt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
LIBRARY		zlib.dll
 | 
			
		||||
EXETYPE WINDOWS
 | 
			
		||||
CODE		 PRELOAD MOVEABLE DISCARDABLE
 | 
			
		||||
DATA		 PRELOAD MOVEABLE MULTIPLE
 | 
			
		||||
 | 
			
		||||
EXPORTS
 | 
			
		||||
    adler32                        @1
 | 
			
		||||
    compress                       @2
 | 
			
		||||
    crc32                          @3
 | 
			
		||||
    deflate                        @4
 | 
			
		||||
    deflateCopy                    @5
 | 
			
		||||
    deflateEnd                     @6
 | 
			
		||||
    deflateInit2_                  @7
 | 
			
		||||
    deflateInit_                   @8
 | 
			
		||||
    deflateParams                  @9
 | 
			
		||||
    deflateReset                   @10
 | 
			
		||||
    deflateSetDictionary           @11
 | 
			
		||||
    gzclose                        @12
 | 
			
		||||
    gzdopen                        @13
 | 
			
		||||
    gzerror                        @14
 | 
			
		||||
    gzflush                        @15
 | 
			
		||||
    gzopen                         @16
 | 
			
		||||
    gzread                         @17
 | 
			
		||||
    gzwrite                        @18
 | 
			
		||||
    inflate                        @19
 | 
			
		||||
    inflateEnd                     @20
 | 
			
		||||
    inflateInit2_                  @21
 | 
			
		||||
    inflateInit_                   @22
 | 
			
		||||
    inflateReset                   @23
 | 
			
		||||
    inflateSetDictionary           @24
 | 
			
		||||
    inflateSync                    @25
 | 
			
		||||
    uncompress                     @26
 | 
			
		||||
    zlibVersion                    @27
 | 
			
		||||
    gzprintf                       @28
 | 
			
		||||
    gzputc                         @29
 | 
			
		||||
    gzgetc                         @30
 | 
			
		||||
    gzseek                         @31
 | 
			
		||||
    gzrewind                       @32
 | 
			
		||||
    gztell                         @33
 | 
			
		||||
    gzeof                          @34
 | 
			
		||||
    gzsetparams                    @35
 | 
			
		||||
    zError                         @36
 | 
			
		||||
    inflateSyncPoint               @37
 | 
			
		||||
    get_crc_table                  @38
 | 
			
		||||
							
								
								
									
										18
									
								
								trees.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								trees.c
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
/* trees.c -- output deflated data using Huffman coding
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
 *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: trees.c,v 1.11 1996/07/24 13:41:06 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "deflate.h"
 | 
			
		||||
 | 
			
		||||
@@ -56,16 +56,16 @@
 | 
			
		||||
#define REPZ_11_138  18
 | 
			
		||||
/* repeat a zero length 11-138 times  (7 bits of repeat count) */
 | 
			
		||||
 | 
			
		||||
local int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
 | 
			
		||||
local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
 | 
			
		||||
   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
 | 
			
		||||
 | 
			
		||||
local int extra_dbits[D_CODES] /* extra bits for each distance code */
 | 
			
		||||
local const int extra_dbits[D_CODES] /* extra bits for each distance code */
 | 
			
		||||
   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
 | 
			
		||||
 | 
			
		||||
local int extra_blbits[BL_CODES]/* extra bits for each bit length code */
 | 
			
		||||
local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
 | 
			
		||||
   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
 | 
			
		||||
 | 
			
		||||
local uch bl_order[BL_CODES]
 | 
			
		||||
local const uch bl_order[BL_CODES]
 | 
			
		||||
   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
 | 
			
		||||
/* The lengths of the bit length codes are sent in order of decreasing
 | 
			
		||||
 * probability, to avoid transmitting the lengths for unused bit length codes.
 | 
			
		||||
@@ -109,7 +109,7 @@ local int base_dist[D_CODES];
 | 
			
		||||
 | 
			
		||||
struct static_tree_desc_s {
 | 
			
		||||
    ct_data *static_tree;        /* static tree or NULL */
 | 
			
		||||
    intf    *extra_bits;         /* extra bits for each code or NULL */
 | 
			
		||||
    const intf *extra_bits;      /* extra bits for each code or NULL */
 | 
			
		||||
    int     extra_base;          /* base index for extra_bits */
 | 
			
		||||
    int     elems;               /* max number of elements in the tree */
 | 
			
		||||
    int     max_length;          /* max bit length for the codes */
 | 
			
		||||
@@ -154,7 +154,7 @@ local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
 | 
			
		||||
 | 
			
		||||
#else /* DEBUG */
 | 
			
		||||
#  define send_code(s, c, tree) \
 | 
			
		||||
     { if (verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
 | 
			
		||||
     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
 | 
			
		||||
       send_bits(s, tree[c].Code, tree[c].Len); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -416,7 +416,7 @@ local void gen_bitlen(s, desc)
 | 
			
		||||
    ct_data *tree  = desc->dyn_tree;
 | 
			
		||||
    int max_code   = desc->max_code;
 | 
			
		||||
    ct_data *stree = desc->stat_desc->static_tree;
 | 
			
		||||
    intf *extra    = desc->stat_desc->extra_bits;
 | 
			
		||||
    const intf *extra = desc->stat_desc->extra_bits;
 | 
			
		||||
    int base       = desc->stat_desc->extra_base;
 | 
			
		||||
    int max_length = desc->stat_desc->max_length;
 | 
			
		||||
    int h;              /* heap index */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
/* uncompr.c -- decompress a memory buffer
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: uncompr.c,v 1.8 1996/01/30 21:59:26 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
   enough memory, Z_BUF_ERROR if there was not enough room in the output
 | 
			
		||||
   buffer, or Z_DATA_ERROR if the input data was corrupted.
 | 
			
		||||
*/
 | 
			
		||||
int uncompress (dest, destLen, source, sourceLen)
 | 
			
		||||
int EXPORT uncompress (dest, destLen, source, sourceLen)
 | 
			
		||||
    Bytef *dest;
 | 
			
		||||
    uLongf *destLen;
 | 
			
		||||
    const Bytef *source;
 | 
			
		||||
@@ -49,7 +49,7 @@ int uncompress (dest, destLen, source, sourceLen)
 | 
			
		||||
    err = inflate(&stream, Z_FINISH);
 | 
			
		||||
    if (err != Z_STREAM_END) {
 | 
			
		||||
        inflateEnd(&stream);
 | 
			
		||||
        return err;
 | 
			
		||||
        return err == Z_OK ? Z_BUF_ERROR : err;
 | 
			
		||||
    }
 | 
			
		||||
    *destLen = stream.total_out;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										73
									
								
								zconf.h
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								zconf.h
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
/* zconf.h -- configuration of the zlib compression library
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: zconf.h,v 1.20 1996/07/02 15:09:28 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#ifndef _ZCONF_H
 | 
			
		||||
#define _ZCONF_H
 | 
			
		||||
@@ -27,6 +27,7 @@
 | 
			
		||||
#  define inflateInit2_	z_inflateInit2_
 | 
			
		||||
#  define inflateSetDictionary z_inflateSetDictionary
 | 
			
		||||
#  define inflateSync	z_inflateSync
 | 
			
		||||
#  define inflateSyncPoint z_inflateSyncPoint
 | 
			
		||||
#  define inflateReset	z_inflateReset
 | 
			
		||||
#  define compress	z_compress
 | 
			
		||||
#  define uncompress	z_uncompress
 | 
			
		||||
@@ -72,8 +73,10 @@
 | 
			
		||||
#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32))  && !defined(STDC)
 | 
			
		||||
#  define STDC
 | 
			
		||||
#endif
 | 
			
		||||
#if (defined(__STDC__) || defined(__cplusplus)) && !defined(STDC)
 | 
			
		||||
#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
 | 
			
		||||
#  ifndef STDC
 | 
			
		||||
#    define STDC
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef STDC
 | 
			
		||||
@@ -87,6 +90,12 @@
 | 
			
		||||
#  define NO_DUMMY_DECL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Borland C incorrectly complains about missing returns: */
 | 
			
		||||
#if defined(__BORLANDC__)
 | 
			
		||||
#  define NEED_DUMMY_RETURN
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Maximum value for memLevel in deflateInit2 */
 | 
			
		||||
#ifndef MAX_MEM_LEVEL
 | 
			
		||||
#  ifdef MAXSEG_64K
 | 
			
		||||
@@ -96,13 +105,17 @@
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Maximum value for windowBits in deflateInit2 and inflateInit2 */
 | 
			
		||||
/* Maximum value for windowBits in deflateInit2 and inflateInit2.
 | 
			
		||||
 * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
 | 
			
		||||
 * created by gzip. (Files created by minigzip can still be extracted by
 | 
			
		||||
 * gzip.)
 | 
			
		||||
 */
 | 
			
		||||
#ifndef MAX_WBITS
 | 
			
		||||
#  define MAX_WBITS   15 /* 32K LZ77 window */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* The memory requirements for deflate are (in bytes):
 | 
			
		||||
            1 << (windowBits+2)   +  1 << (memLevel+9)
 | 
			
		||||
            (1 << (windowBits+2)) +  (1 << (memLevel+9))
 | 
			
		||||
 that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
 | 
			
		||||
 plus a few kilobytes for small objects. For example, if you want to reduce
 | 
			
		||||
 the default memory requirements from 256K to 128K, compile with
 | 
			
		||||
@@ -172,13 +185,63 @@ typedef uLong FAR uLongf;
 | 
			
		||||
   typedef Byte     *voidp;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#  include <unistd.h> /* for SEEK_* and off_t */
 | 
			
		||||
#  define z_off_t  off_t
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef SEEK_SET
 | 
			
		||||
#  define SEEK_SET        0       /* Seek from beginning of file.  */
 | 
			
		||||
#  define SEEK_CUR        1       /* Seek from current position.  */
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef z_off_t
 | 
			
		||||
#  define  z_off_t long
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Compile with -DZLIB_DLL for Windows DLL support */
 | 
			
		||||
#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL)
 | 
			
		||||
#  undef FAR
 | 
			
		||||
#  include <windows.h>
 | 
			
		||||
#  define EXPORT  WINAPI
 | 
			
		||||
#  ifdef WIN32
 | 
			
		||||
#    define EXPORTVA  WINAPIV
 | 
			
		||||
#  else
 | 
			
		||||
#    define EXPORTVA  FAR _cdecl _export
 | 
			
		||||
#  endif
 | 
			
		||||
#else
 | 
			
		||||
#   if defined (__BORLANDC__) && defined (_Windows) && defined (__DLL__)
 | 
			
		||||
#       define EXPORT _export
 | 
			
		||||
#       define EXPORTVA _export
 | 
			
		||||
#   else
 | 
			
		||||
#       define EXPORT
 | 
			
		||||
#       define EXPORTVA
 | 
			
		||||
#   endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* MVS linker does not support external names larger than 8 bytes */
 | 
			
		||||
#if defined(__MVS__)
 | 
			
		||||
#   pragma map(deflateInit_,"DEIN")
 | 
			
		||||
#   pragma map(deflateInit2_,"DEIN2")
 | 
			
		||||
#   pragma map(deflateEnd,"DEEND")
 | 
			
		||||
#   pragma map(inflateInit_,"ININ")
 | 
			
		||||
#   pragma map(inflateInit2_,"ININ2")
 | 
			
		||||
#   pragma map(inflateEnd,"INEND")
 | 
			
		||||
#   pragma map(inflateSync,"INSY")
 | 
			
		||||
#   pragma map(inflateSetDictionary,"INSEDI")
 | 
			
		||||
#   pragma map(inflate_blocks,"INBL")
 | 
			
		||||
#   pragma map(inflate_blocks_new,"INBLNE")
 | 
			
		||||
#   pragma map(inflate_blocks_free,"INBLFR")
 | 
			
		||||
#   pragma map(inflate_blocks_reset,"INBLRE")
 | 
			
		||||
#   pragma map(inflate_codes_free,"INCOFR")
 | 
			
		||||
#   pragma map(inflate_codes,"INCO")
 | 
			
		||||
#   pragma map(inflate_fast,"INFA")
 | 
			
		||||
#   pragma map(inflate_flush,"INFLU")
 | 
			
		||||
#   pragma map(inflate_mask,"INMA")
 | 
			
		||||
#   pragma map(inflate_set_dictionary,"INSEDI2")
 | 
			
		||||
#   pragma map(inflate_copyright,"INCOPY")
 | 
			
		||||
#   pragma map(inflate_trees_bits,"INTRBI")
 | 
			
		||||
#   pragma map(inflate_trees_dynamic,"INTRDY")
 | 
			
		||||
#   pragma map(inflate_trees_fixed,"INTRFI")
 | 
			
		||||
#   pragma map(inflate_trees_free,"INTRFR")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ZCONF_H */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										107
									
								
								zlib.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								zlib.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
.TH ZLIB 3 "20 January 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
zlib \- compression/decompression library
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
[see
 | 
			
		||||
.I zlib.h
 | 
			
		||||
for full descripton]
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.I zlib
 | 
			
		||||
library is a general purpose data compression library.
 | 
			
		||||
The code is reentrant (thread safe).
 | 
			
		||||
It provides in-memory compression and decompression functions,
 | 
			
		||||
including integrity checks of the uncompressed data.
 | 
			
		||||
This version of the library supports only one compression method (deflation)
 | 
			
		||||
but other algorithms will be added later and will have the same stream interface.
 | 
			
		||||
.LP
 | 
			
		||||
Compression can be done in a single step if the buffers are large enough
 | 
			
		||||
(for example if an input file is mmap'ed),
 | 
			
		||||
or can be done by repeated calls of the compression function.
 | 
			
		||||
In the latter case,
 | 
			
		||||
the application must provide more input and/or consume the output
 | 
			
		||||
(providing more output space) before each call.
 | 
			
		||||
.LP
 | 
			
		||||
The library also supports reading and writing files in
 | 
			
		||||
.I gzip
 | 
			
		||||
(.gz) format
 | 
			
		||||
with an interface similar to that of stdio.
 | 
			
		||||
.LP
 | 
			
		||||
The library does not install any signal handler. The decoder checks
 | 
			
		||||
the consistency of the compressed data, so the library should never
 | 
			
		||||
crash even in case of corrupted input.
 | 
			
		||||
.LP
 | 
			
		||||
All functions of the compression library are documented in the file
 | 
			
		||||
.IR zlib.h.
 | 
			
		||||
The distribution source includes examples of use of the library
 | 
			
		||||
the files
 | 
			
		||||
.I example.c
 | 
			
		||||
and
 | 
			
		||||
.IR minigzip.c .
 | 
			
		||||
.LP
 | 
			
		||||
A Java implementation of
 | 
			
		||||
.IR zlib
 | 
			
		||||
is available in the Java Development Kit 1.1
 | 
			
		||||
.IP
 | 
			
		||||
http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
 | 
			
		||||
.LP
 | 
			
		||||
A Perl interface to
 | 
			
		||||
.IR zlib ,
 | 
			
		||||
written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
 | 
			
		||||
is available at CPAN (Comprehensive Perl Archive Network) sites,
 | 
			
		||||
such as:
 | 
			
		||||
.IP
 | 
			
		||||
ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
 | 
			
		||||
.LP
 | 
			
		||||
A Python interface to
 | 
			
		||||
.IR zlib
 | 
			
		||||
written by A.M. Kuchling <amk@magnet.com>
 | 
			
		||||
is available from the Python Software Association sites, such as:
 | 
			
		||||
.IP
 | 
			
		||||
ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
Questions about zlib should be sent to:
 | 
			
		||||
.IP
 | 
			
		||||
zlib@quest.jpl.nasa.gov
 | 
			
		||||
or, if this fails, to the author addresses given below.
 | 
			
		||||
The zlib home page is:
 | 
			
		||||
.IP
 | 
			
		||||
http://www.cdrom.com/infozip/zlib/
 | 
			
		||||
.LP
 | 
			
		||||
The data format used by the zlib library is described by RFC
 | 
			
		||||
(Request for Comments) 1950 to 1952 in the files: 
 | 
			
		||||
.IP
 | 
			
		||||
ftp://ds.internic.net/rfc/rfc1950.txt (zlib format)
 | 
			
		||||
.br
 | 
			
		||||
rfc1951.txt (deflate format)
 | 
			
		||||
.br
 | 
			
		||||
rfc1952.txt (gzip format)
 | 
			
		||||
.LP
 | 
			
		||||
These documents are also available in other formats from:
 | 
			
		||||
.IP
 | 
			
		||||
ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
 | 
			
		||||
.SH AUTHORS
 | 
			
		||||
Version 1.0.7.
 | 
			
		||||
Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org)
 | 
			
		||||
and Mark Adler (madler@alumni.caltech.edu).
 | 
			
		||||
.LP
 | 
			
		||||
This software is provided "as-is,"
 | 
			
		||||
without any express or implied warranty.
 | 
			
		||||
In no event will the authors be held liable for any damages
 | 
			
		||||
arising from the use of this software.
 | 
			
		||||
See the distribution directory with respect to requirements
 | 
			
		||||
governing redistribution.
 | 
			
		||||
The deflate format used by
 | 
			
		||||
.I zlib
 | 
			
		||||
was defined by Phil Katz.
 | 
			
		||||
The deflate and
 | 
			
		||||
.I zlib
 | 
			
		||||
specifications were written by Peter Deutsch.
 | 
			
		||||
Thanks to all the people who reported problems and suggested various
 | 
			
		||||
improvements in
 | 
			
		||||
.IR zlib ;
 | 
			
		||||
who are too numerous to cite here.
 | 
			
		||||
.LP
 | 
			
		||||
UNIX manual page by R. P. C. Rodgers,
 | 
			
		||||
U.S. National Library of Medicine (rodgers@nlm.nih.gov).
 | 
			
		||||
.\" end of man page
 | 
			
		||||
							
								
								
									
										46
									
								
								zlib.def
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								zlib.def
									
									
									
									
									
								
							@@ -1,46 +0,0 @@
 | 
			
		||||
LIBRARY		"zlib"
 | 
			
		||||
 | 
			
		||||
DESCRIPTION	'"""zlib data compression library"""'
 | 
			
		||||
 | 
			
		||||
EXETYPE		NT
 | 
			
		||||
 | 
			
		||||
SUBSYSTEM	WINDOWS
 | 
			
		||||
 | 
			
		||||
STUB		'WINSTUB.EXE'
 | 
			
		||||
 | 
			
		||||
VERSION		1.05
 | 
			
		||||
 | 
			
		||||
CODE		 EXECUTE READ
 | 
			
		||||
 | 
			
		||||
DATA		 READ WRITE
 | 
			
		||||
 | 
			
		||||
HEAPSIZE	1048576,4096
 | 
			
		||||
 | 
			
		||||
EXPORTS
 | 
			
		||||
		zlibVersion
 | 
			
		||||
		deflate
 | 
			
		||||
		deflateEnd
 | 
			
		||||
		inflate
 | 
			
		||||
		inflateEnd
 | 
			
		||||
		deflateSetDictionary
 | 
			
		||||
		deflateCopy
 | 
			
		||||
		deflateReset
 | 
			
		||||
		deflateParams
 | 
			
		||||
		inflateSetDictionary
 | 
			
		||||
		inflateSync
 | 
			
		||||
		inflateReset
 | 
			
		||||
		compress
 | 
			
		||||
		uncompress
 | 
			
		||||
		gzopen
 | 
			
		||||
		gzdopen
 | 
			
		||||
		gzread
 | 
			
		||||
		gzwrite
 | 
			
		||||
		gzflush
 | 
			
		||||
		gzclose
 | 
			
		||||
		gzerror
 | 
			
		||||
		adler32
 | 
			
		||||
		crc32
 | 
			
		||||
		deflateInit_
 | 
			
		||||
		inflateInit_
 | 
			
		||||
		deflateInit2_
 | 
			
		||||
		inflateInit2_
 | 
			
		||||
							
								
								
									
										361
									
								
								zlib.h
									
									
									
									
									
								
							
							
						
						
									
										361
									
								
								zlib.h
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
 | 
			
		||||
  version 1.0.5, Jan 3rd, 1998.
 | 
			
		||||
  version 1.0.7, Jan 20th, 1998
 | 
			
		||||
 | 
			
		||||
  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
 | 
			
		||||
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
  3. This notice may not be removed or altered from any source distribution.
 | 
			
		||||
 | 
			
		||||
  Jean-loup Gailly        Mark Adler
 | 
			
		||||
  gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
 | 
			
		||||
  jloup@gzip.org          madler@alumni.caltech.edu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  The data format used by the zlib library is described by RFCs (Request for
 | 
			
		||||
@@ -37,30 +37,27 @@ extern "C" {
 | 
			
		||||
 | 
			
		||||
#include "zconf.h"
 | 
			
		||||
 | 
			
		||||
#define ZLIB_VERSION "1.0.5"
 | 
			
		||||
#define ZLIB_VERSION "1.0.7"
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
     The 'zlib' compression library provides in-memory compression and
 | 
			
		||||
  decompression functions, including integrity checks of the uncompressed
 | 
			
		||||
  data.  This version of the library supports only one compression method
 | 
			
		||||
  (deflation) but other algorithms may be added later and will have the same
 | 
			
		||||
  (deflation) but other algorithms will be added later and will have the same
 | 
			
		||||
  stream interface.
 | 
			
		||||
 | 
			
		||||
     For compression the application must provide the output buffer and
 | 
			
		||||
  may optionally provide the input buffer for optimization. For decompression,
 | 
			
		||||
  the application must provide the input buffer and may optionally provide
 | 
			
		||||
  the output buffer for optimization.
 | 
			
		||||
 | 
			
		||||
     Compression can be done in a single step if the buffers are large
 | 
			
		||||
  enough (for example if an input file is mmap'ed), or can be done by
 | 
			
		||||
  repeated calls of the compression function.  In the latter case, the
 | 
			
		||||
  application must provide more input and/or consume the output
 | 
			
		||||
  (providing more output space) before each call.
 | 
			
		||||
 | 
			
		||||
     The library does not install any signal handler. It is recommended to
 | 
			
		||||
  add at least a handler for SIGSEGV when decompressing; the library checks
 | 
			
		||||
  the consistency of the input data whenever possible but may go nuts
 | 
			
		||||
  for some forms of corrupted input.
 | 
			
		||||
     The library also supports reading and writing files in gzip (.gz) format
 | 
			
		||||
  with an interface similar to that of stdio.
 | 
			
		||||
 | 
			
		||||
     The library does not install any signal handler. The decoder checks
 | 
			
		||||
  the consistency of the compressed data, so the library should never
 | 
			
		||||
  crash even in case of corrupted input.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
 | 
			
		||||
@@ -123,7 +120,7 @@ typedef z_stream FAR *z_streamp;
 | 
			
		||||
                        /* constants */
 | 
			
		||||
 | 
			
		||||
#define Z_NO_FLUSH      0
 | 
			
		||||
#define Z_PARTIAL_FLUSH 1
 | 
			
		||||
#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
 | 
			
		||||
#define Z_SYNC_FLUSH    2
 | 
			
		||||
#define Z_FULL_FLUSH    3
 | 
			
		||||
#define Z_FINISH        4
 | 
			
		||||
@@ -200,7 +197,13 @@ extern int EXPORT deflateInit OF((z_streamp strm, int level));
 | 
			
		||||
 | 
			
		||||
extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
			
		||||
/*
 | 
			
		||||
  Performs one or both of the following actions:
 | 
			
		||||
    deflate compresses as much data as possible, and stops when the input
 | 
			
		||||
  buffer becomes empty or the output buffer becomes full. It may introduce some
 | 
			
		||||
  output latency (reading input without producing any output) except when
 | 
			
		||||
  forced to flush.
 | 
			
		||||
 | 
			
		||||
    The detailed semantics are as follows. deflate performs one or both of the
 | 
			
		||||
  following actions:
 | 
			
		||||
 | 
			
		||||
  - Compress more input starting at next_in and update next_in and avail_in
 | 
			
		||||
    accordingly. If not all input can be processed (because there is not
 | 
			
		||||
@@ -222,24 +225,23 @@ extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
			
		||||
  and with zero avail_out, it must be called again after making room in the
 | 
			
		||||
  output buffer because there might be more output pending.
 | 
			
		||||
 | 
			
		||||
    If the parameter flush is set to Z_PARTIAL_FLUSH, the current compression
 | 
			
		||||
  block is terminated and flushed to the output buffer so that the
 | 
			
		||||
  decompressor can get all input data available so far. For method 9, a future
 | 
			
		||||
  variant on method 8, the current block will be flushed but not terminated.
 | 
			
		||||
  Z_SYNC_FLUSH has the same effect as partial flush except that the compressed
 | 
			
		||||
  output is byte aligned (the compressor can clear its internal bit buffer)
 | 
			
		||||
  and the current block is always terminated; this can be useful if the
 | 
			
		||||
  compressor has to be restarted from scratch after an interruption (in which
 | 
			
		||||
  case the internal state of the compressor may be lost).
 | 
			
		||||
    If flush is set to Z_FULL_FLUSH, the compression block is terminated, a
 | 
			
		||||
  special marker is output and the compression dictionary is discarded; this
 | 
			
		||||
  is useful to allow the decompressor to synchronize if one compressed block
 | 
			
		||||
  has been damaged (see inflateSync below).  Flushing degrades compression and
 | 
			
		||||
  so should be used only when necessary.  Using Z_FULL_FLUSH too often can
 | 
			
		||||
  seriously degrade the compression. If deflate returns with avail_out == 0,
 | 
			
		||||
  this function must be called again with the same value of the flush
 | 
			
		||||
  parameter and more output space (updated avail_out), until the flush is
 | 
			
		||||
  complete (deflate returns with non-zero avail_out).
 | 
			
		||||
    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
 | 
			
		||||
  flushed to the output buffer and the output is aligned on a byte boundary, so
 | 
			
		||||
  that the decompressor can get all input data available so far. (In particular
 | 
			
		||||
  avail_in is zero after the call if enough output space has been provided
 | 
			
		||||
  before the call.)  Flushing may degrade compression for some compression
 | 
			
		||||
  algorithms and so it should be used only when necessary.
 | 
			
		||||
 | 
			
		||||
    If flush is set to Z_FULL_FLUSH, all output is flushed as with
 | 
			
		||||
  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
 | 
			
		||||
  restart from this point if previous compressed data has been damaged or if
 | 
			
		||||
  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
 | 
			
		||||
  the compression.
 | 
			
		||||
 | 
			
		||||
    If deflate returns with avail_out == 0, this function must be called again
 | 
			
		||||
  with the same value of the flush parameter and more output space (updated
 | 
			
		||||
  avail_out), until the flush is complete (deflate returns with non-zero
 | 
			
		||||
  avail_out).
 | 
			
		||||
 | 
			
		||||
    If the parameter flush is set to Z_FINISH, pending input is processed,
 | 
			
		||||
  pending output is flushed and deflate returns with Z_STREAM_END if there
 | 
			
		||||
@@ -254,6 +256,9 @@ extern int EXPORT deflate OF((z_streamp strm, int flush));
 | 
			
		||||
  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
 | 
			
		||||
  Z_STREAM_END, then it must be called again as described above.
 | 
			
		||||
 | 
			
		||||
    deflate() sets strm->adler to the adler32 checksum of all input read
 | 
			
		||||
  so far (that is, total_in bytes).
 | 
			
		||||
 | 
			
		||||
    deflate() may update data_type if it can make a good guess about
 | 
			
		||||
  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
 | 
			
		||||
  binary. This field is only for information purposes and does not affect
 | 
			
		||||
@@ -285,21 +290,32 @@ extern int EXPORT deflateEnd OF((z_streamp strm));
 | 
			
		||||
extern int EXPORT inflateInit OF((z_streamp strm));
 | 
			
		||||
 | 
			
		||||
     Initializes the internal stream state for decompression. The fields
 | 
			
		||||
   zalloc, zfree and opaque must be initialized before by the caller.  If
 | 
			
		||||
   zalloc and zfree are set to Z_NULL, inflateInit updates them to use default
 | 
			
		||||
   allocation functions.
 | 
			
		||||
   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
 | 
			
		||||
   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
 | 
			
		||||
   value depends on the compression method), inflateInit determines the
 | 
			
		||||
   compression method from the zlib header and allocates all data structures
 | 
			
		||||
   accordingly; otherwise the allocation will be deferred to the first call of
 | 
			
		||||
   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
 | 
			
		||||
   use default allocation functions.
 | 
			
		||||
 | 
			
		||||
     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
 | 
			
		||||
   enough memory, Z_VERSION_ERROR if the zlib library version is incompatible
 | 
			
		||||
   with the version assumed by the caller.  msg is set to null if there is no
 | 
			
		||||
   error message. inflateInit does not perform any decompression: this will be
 | 
			
		||||
   done by inflate().
 | 
			
		||||
     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
 | 
			
		||||
   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
 | 
			
		||||
   version assumed by the caller.  msg is set to null if there is no error
 | 
			
		||||
   message. inflateInit does not perform any decompression apart from reading
 | 
			
		||||
   the zlib header if present: this will be done by inflate().  (So next_in and
 | 
			
		||||
   avail_in may be modified, but next_out and avail_out are unchanged.)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
			
		||||
/*
 | 
			
		||||
  Performs one or both of the following actions:
 | 
			
		||||
    inflate decompresses as much data as possible, and stops when the input
 | 
			
		||||
  buffer becomes empty or the output buffer becomes full. It may some
 | 
			
		||||
  introduce some output latency (reading input without producing any output)
 | 
			
		||||
  except when forced to flush.
 | 
			
		||||
 | 
			
		||||
  The detailed semantics are as follows. inflate performs one or both of the
 | 
			
		||||
  following actions:
 | 
			
		||||
 | 
			
		||||
  - Decompress more input starting at next_in and update next_in and avail_in
 | 
			
		||||
    accordingly. If not all input can be processed (because there is not
 | 
			
		||||
@@ -320,9 +336,9 @@ extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
			
		||||
  must be called again after making room in the output buffer because there
 | 
			
		||||
  might be more output pending.
 | 
			
		||||
 | 
			
		||||
    If the parameter flush is set to Z_PARTIAL_FLUSH, inflate flushes as much
 | 
			
		||||
    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
 | 
			
		||||
  output as possible to the output buffer. The flushing behavior of inflate is
 | 
			
		||||
  not specified for values of the flush parameter other than Z_PARTIAL_FLUSH
 | 
			
		||||
  not specified for values of the flush parameter other than Z_SYNC_FLUSH
 | 
			
		||||
  and Z_FINISH, but the current implementation actually flushes as much output
 | 
			
		||||
  as possible anyway.
 | 
			
		||||
 | 
			
		||||
@@ -337,18 +353,26 @@ extern int EXPORT inflate OF((z_streamp strm, int flush));
 | 
			
		||||
  is never required, but can be used to inform inflate that a faster routine
 | 
			
		||||
  may be used for the single inflate() call.
 | 
			
		||||
 | 
			
		||||
    inflate() returns Z_OK if some progress has been made (more input
 | 
			
		||||
  processed or more output produced), Z_STREAM_END if the end of the
 | 
			
		||||
  compressed data has been reached and all uncompressed output has been
 | 
			
		||||
  produced, Z_NEED_DICT if a preset dictionary is needed at this point (see
 | 
			
		||||
  inflateSetDictionary below), Z_DATA_ERROR if the input data was corrupted,
 | 
			
		||||
  Z_STREAM_ERROR if the stream structure was inconsistent (for example if
 | 
			
		||||
  next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
 | 
			
		||||
  Z_BUF_ERROR if no progress is possible or if there was not enough room in
 | 
			
		||||
  the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, the
 | 
			
		||||
  application may then call inflateSync to look for a good compression block.
 | 
			
		||||
  In the Z_NEED_DICT case, strm->adler is set to the Adler32 value of the
 | 
			
		||||
  dictionary chosen by the compressor.
 | 
			
		||||
     If a preset dictionary is needed at this point (see inflateSetDictionary
 | 
			
		||||
  below), inflate sets strm-adler to the adler32 checksum of the
 | 
			
		||||
  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
 | 
			
		||||
  it sets strm->adler to the adler32 checksum of all output produced
 | 
			
		||||
  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
 | 
			
		||||
  an error code as described below. At the end of the stream, inflate()
 | 
			
		||||
  checks that its computed adler32 checksum is equal to that saved by the
 | 
			
		||||
  compressor and returns Z_STREAM_END only if the checksum is correct.
 | 
			
		||||
 | 
			
		||||
    inflate() returns Z_OK if some progress has been made (more input processed
 | 
			
		||||
  or more output produced), Z_STREAM_END if the end of the compressed data has
 | 
			
		||||
  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
 | 
			
		||||
  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
 | 
			
		||||
  corrupted (input stream not conforming to the zlib format or incorrect
 | 
			
		||||
  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
 | 
			
		||||
  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
 | 
			
		||||
  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
 | 
			
		||||
  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
 | 
			
		||||
  case, the application may then call inflateSync to look for a good
 | 
			
		||||
  compression block.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -382,14 +406,13 @@ extern int EXPORT deflateInit2 OF((z_streamp strm,
 | 
			
		||||
   the caller.
 | 
			
		||||
 | 
			
		||||
     The method parameter is the compression method. It must be Z_DEFLATED in
 | 
			
		||||
   this version of the library. (Method 9 will allow a 64K history buffer and
 | 
			
		||||
   partial block flushes.)
 | 
			
		||||
   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
 | 
			
		||||
   version of the library (the value 16 will be allowed for method 9). 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.
 | 
			
		||||
   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.
 | 
			
		||||
 | 
			
		||||
     The memLevel parameter specifies how much memory should be allocated
 | 
			
		||||
   for the internal compression state. memLevel=1 uses minimum memory but
 | 
			
		||||
@@ -408,42 +431,35 @@ extern int EXPORT deflateInit2 OF((z_streamp strm,
 | 
			
		||||
   the compression ratio but not the correctness of the compressed output even
 | 
			
		||||
   if it is not set appropriately.
 | 
			
		||||
 | 
			
		||||
     If next_in is not null, the library will use this buffer to hold also
 | 
			
		||||
   some history information; the buffer must either hold the entire input
 | 
			
		||||
   data, or have at least 1<<(windowBits+1) bytes and be writable. If next_in
 | 
			
		||||
   is null, the library will allocate its own history buffer (and leave next_in
 | 
			
		||||
   null). next_out need not be provided here but must be provided by the
 | 
			
		||||
   application for the next call of deflate().
 | 
			
		||||
 | 
			
		||||
     If the history buffer is provided by the application, next_in must
 | 
			
		||||
   must never be changed by the application since the compressor maintains
 | 
			
		||||
   information inside this buffer from call to call; the application
 | 
			
		||||
   must provide more input only by increasing avail_in. next_in is always
 | 
			
		||||
   reset by the library in this case.
 | 
			
		||||
 | 
			
		||||
      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
 | 
			
		||||
   not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
 | 
			
		||||
   an invalid method). msg is set to null if there is no error message.
 | 
			
		||||
   deflateInit2 does not perform any compression: this will be done by
 | 
			
		||||
   deflate(). 
 | 
			
		||||
      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
 | 
			
		||||
   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
 | 
			
		||||
   method). msg is set to null if there is no error message.  deflateInit2 does
 | 
			
		||||
   not perform any compression: this will be done by deflate().
 | 
			
		||||
*/
 | 
			
		||||
                            
 | 
			
		||||
extern int EXPORT deflateSetDictionary OF((z_streamp strm,
 | 
			
		||||
                                           const Bytef *dictionary,
 | 
			
		||||
				           uInt  dictLength));
 | 
			
		||||
/*
 | 
			
		||||
     Initializes the compression dictionary (history buffer) from the given
 | 
			
		||||
   byte sequence without producing any compressed output. This function must
 | 
			
		||||
   be called immediately after deflateInit or deflateInit2, before any call
 | 
			
		||||
   of deflate. The compressor and decompressor must use exactly the same
 | 
			
		||||
     Initializes the compression dictionary from the given byte sequence
 | 
			
		||||
   without producing any compressed output. This function must be called
 | 
			
		||||
   immediately after deflateInit or deflateInit2, before any call of
 | 
			
		||||
   deflate. The compressor and decompressor must use exactly the same
 | 
			
		||||
   dictionary (see inflateSetDictionary).
 | 
			
		||||
 | 
			
		||||
     The dictionary should consist of strings (byte sequences) that are likely
 | 
			
		||||
   to be encountered later in the data to be compressed, with the most commonly
 | 
			
		||||
   used strings preferably put towards the end of the dictionary. Using a
 | 
			
		||||
   dictionary is most useful when the data to be compressed is short and
 | 
			
		||||
   can be predicted with good accuracy; the data can then be compressed better
 | 
			
		||||
   than with the default empty dictionary. In this version of the library,
 | 
			
		||||
   only the last 32K bytes of the dictionary are used.
 | 
			
		||||
   dictionary is most useful when the data to be compressed is short and can be
 | 
			
		||||
   predicted with good accuracy; the data can then be compressed better than
 | 
			
		||||
   with the default empty dictionary.
 | 
			
		||||
 | 
			
		||||
     Depending on the size of the compression data structures selected by
 | 
			
		||||
   deflateInit or deflateInit2, a part of the dictionary may in effect be
 | 
			
		||||
   discarded, for example if the dictionary is larger than the window size in
 | 
			
		||||
   deflate or deflate2. Thus the strings most likely to be useful should be
 | 
			
		||||
   put at the end of the dictionary, not at the front.
 | 
			
		||||
 | 
			
		||||
     Upon return of this function, strm->adler is set to the Adler32 value
 | 
			
		||||
   of the dictionary; the decompressor may later use this value to determine
 | 
			
		||||
   which dictionary has been used by the compressor. (The Adler32 value
 | 
			
		||||
@@ -451,21 +467,16 @@ extern int EXPORT deflateSetDictionary OF((z_streamp strm,
 | 
			
		||||
   actually used by the compressor.)
 | 
			
		||||
 | 
			
		||||
     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
 | 
			
		||||
   parameter is invalid (such as NULL dictionary) or the stream state
 | 
			
		||||
   is inconsistent (for example if deflate has already been called for this
 | 
			
		||||
   stream). deflateSetDictionary does not perform any compression: this will
 | 
			
		||||
   be done by deflate(). 
 | 
			
		||||
   parameter is invalid (such as NULL dictionary) or the stream state is
 | 
			
		||||
   inconsistent (for example if deflate has already been called for this stream
 | 
			
		||||
   or if the compression method is bsort). deflateSetDictionary does not
 | 
			
		||||
   perform any compression: this will be done by deflate().
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT deflateCopy OF((z_streamp dest,
 | 
			
		||||
                                  z_streamp source));
 | 
			
		||||
/*
 | 
			
		||||
     Sets the destination stream as a complete copy of the source stream.  If
 | 
			
		||||
   the source stream is using an application-supplied history buffer, a new
 | 
			
		||||
   buffer is allocated for the destination stream.  The compressed output
 | 
			
		||||
   buffer is always application-supplied. It's the responsibility of the
 | 
			
		||||
   application to provide the correct values of next_out and avail_out for the
 | 
			
		||||
   next call of deflate.
 | 
			
		||||
     Sets the destination stream as a complete copy of the source stream.
 | 
			
		||||
 | 
			
		||||
     This function can be useful when several compression strategies will be
 | 
			
		||||
   tried, for example when there are several ways of pre-processing the input
 | 
			
		||||
@@ -493,12 +504,13 @@ extern int EXPORT deflateReset OF((z_streamp strm));
 | 
			
		||||
 | 
			
		||||
extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy));
 | 
			
		||||
/*
 | 
			
		||||
     Dynamically update the compression level and compression strategy.
 | 
			
		||||
   This can be used to switch between compression and straight copy of
 | 
			
		||||
   the input data, or to switch to a different kind of input data requiring
 | 
			
		||||
   a different strategy. If the compression level is changed, the input
 | 
			
		||||
   available so far is compressed with the old level (and may be flushed);
 | 
			
		||||
   the new level will take effect only at the next call of deflate().
 | 
			
		||||
     Dynamically update the compression level and compression strategy.  The
 | 
			
		||||
   interpretation of level and strategy is as in deflateInit2.  This can be
 | 
			
		||||
   used to switch between compression and straight copy of the input data, or
 | 
			
		||||
   to switch to a different kind of input data requiring a different
 | 
			
		||||
   strategy. If the compression level is changed, the input available so far
 | 
			
		||||
   is compressed with the old level (and may be flushed); the new level will
 | 
			
		||||
   take effect only at the next call of deflate().
 | 
			
		||||
 | 
			
		||||
     Before the call of deflateParams, the stream state must be set as for
 | 
			
		||||
   a call of deflate(), since the currently available input may have to
 | 
			
		||||
@@ -513,46 +525,34 @@ extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy));
 | 
			
		||||
extern int EXPORT inflateInit2 OF((z_streamp strm,
 | 
			
		||||
                                   int  windowBits));
 | 
			
		||||
 | 
			
		||||
     This is another version of inflateInit with more compression options. The
 | 
			
		||||
   fields next_out, zalloc, zfree and opaque must be initialized before by
 | 
			
		||||
   the caller.
 | 
			
		||||
     This is another version of inflateInit with an extra parameter. The
 | 
			
		||||
   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
 | 
			
		||||
   before by the caller.
 | 
			
		||||
 | 
			
		||||
     The windowBits parameter is the base two logarithm of the maximum window
 | 
			
		||||
   size (the size of the history buffer).  It should be in the range 8..15 for
 | 
			
		||||
   this version of the library (the value 16 will be allowed soon). The
 | 
			
		||||
   default value is 15 if inflateInit is used instead. If a compressed stream
 | 
			
		||||
   with a larger window size is given as input, inflate() will return with
 | 
			
		||||
   the error code Z_DATA_ERROR instead of trying to allocate a larger window.
 | 
			
		||||
   this version of the library. The default value is 15 if inflateInit is used
 | 
			
		||||
   instead. If a compressed stream with a larger window size is given as
 | 
			
		||||
   input, inflate() will return with the error code Z_DATA_ERROR instead of
 | 
			
		||||
   trying to allocate a larger window.
 | 
			
		||||
 | 
			
		||||
     If next_out is not null, the library will use this buffer for the history
 | 
			
		||||
   buffer; the buffer must either be large enough to hold the entire output
 | 
			
		||||
   data, or have at least 1<<windowBits bytes.  If next_out is null, the
 | 
			
		||||
   library will allocate its own buffer (and leave next_out null). next_in
 | 
			
		||||
   need not be provided here but must be provided by the application for the
 | 
			
		||||
   next call of inflate().
 | 
			
		||||
 | 
			
		||||
     If the history buffer is provided by the application, next_out must
 | 
			
		||||
   never be changed by the application since the decompressor maintains
 | 
			
		||||
   history information inside this buffer from call to call; the application
 | 
			
		||||
   can only reset next_out to the beginning of the history buffer when
 | 
			
		||||
   avail_out is zero and all output has been consumed.
 | 
			
		||||
 | 
			
		||||
      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
 | 
			
		||||
   not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
 | 
			
		||||
   windowBits < 8). msg is set to null if there is no error message.
 | 
			
		||||
   inflateInit2 does not perform any decompression: this will be done by
 | 
			
		||||
   inflate().
 | 
			
		||||
      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
 | 
			
		||||
   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
 | 
			
		||||
   memLevel). msg is set to null if there is no error message.  inflateInit2
 | 
			
		||||
   does not perform any decompression apart from reading the zlib header if
 | 
			
		||||
   present: this will be done by inflate(). (So next_in and avail_in may be
 | 
			
		||||
   modified, but next_out and avail_out are unchanged.)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT inflateSetDictionary OF((z_streamp strm,
 | 
			
		||||
				           const Bytef *dictionary,
 | 
			
		||||
					   uInt  dictLength));
 | 
			
		||||
/*
 | 
			
		||||
     Initializes the decompression dictionary (history buffer) from the given
 | 
			
		||||
   uncompressed byte sequence. This function must be called immediately after
 | 
			
		||||
   a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen
 | 
			
		||||
   by the compressor can be determined from the Adler32 value returned by this
 | 
			
		||||
   call of inflate. The compressor and decompressor must use exactly the same
 | 
			
		||||
     Initializes the decompression dictionary from the given uncompressed byte
 | 
			
		||||
   sequence. This function must be called immediately after a call of inflate
 | 
			
		||||
   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
 | 
			
		||||
   can be determined from the Adler32 value returned by this call of
 | 
			
		||||
   inflate. The compressor and decompressor must use exactly the same
 | 
			
		||||
   dictionary (see deflateSetDictionary).
 | 
			
		||||
 | 
			
		||||
     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
 | 
			
		||||
@@ -565,12 +565,12 @@ extern int EXPORT inflateSetDictionary OF((z_streamp strm,
 | 
			
		||||
 | 
			
		||||
extern int EXPORT inflateSync OF((z_streamp strm));
 | 
			
		||||
/* 
 | 
			
		||||
    Skips invalid compressed data until the special marker (see deflate()
 | 
			
		||||
  above) can be found, or until all available input is skipped. No output
 | 
			
		||||
  is provided.
 | 
			
		||||
    Skips invalid compressed data until a full flush point (see above the
 | 
			
		||||
  description of deflate with Z_FULL_FLUSH) can be found, or until all
 | 
			
		||||
  available input is skipped. No output is provided.
 | 
			
		||||
 | 
			
		||||
    inflateSync returns Z_OK if the special marker has been found, Z_BUF_ERROR
 | 
			
		||||
  if no more input was provided, Z_DATA_ERROR if no marker has been found,
 | 
			
		||||
    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
 | 
			
		||||
  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
 | 
			
		||||
  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
 | 
			
		||||
  case, the application may save the current current value of total_in which
 | 
			
		||||
  indicates where valid compressed data was found. In the error case, the
 | 
			
		||||
@@ -594,7 +594,7 @@ extern int EXPORT inflateReset OF((z_streamp strm));
 | 
			
		||||
/*
 | 
			
		||||
     The following utility functions are implemented on top of the
 | 
			
		||||
   basic stream-oriented functions. To simplify the interface, some
 | 
			
		||||
   default options are assumed (compression level, window size,
 | 
			
		||||
   default options are assumed (compression level and memory usage,
 | 
			
		||||
   standard memory allocation functions). The source code of these
 | 
			
		||||
   utility functions can easily be modified if you need special options.
 | 
			
		||||
*/
 | 
			
		||||
@@ -639,13 +639,17 @@ extern gzFile EXPORT gzopen  OF((const char *path, const char *mode));
 | 
			
		||||
/*
 | 
			
		||||
     Opens a gzip (.gz) file for reading or writing. The mode parameter
 | 
			
		||||
   is as in fopen ("rb" or "wb") but can also include a compression level
 | 
			
		||||
   ("wb9").  gzopen can be used to read a file which is not in gzip format;
 | 
			
		||||
   in this case gzread will directly read from the file without decompression.
 | 
			
		||||
   ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
 | 
			
		||||
   Huffman only compression as in "wb1h". (See the description
 | 
			
		||||
   of deflateInit2 for more information about the strategy parameter.)
 | 
			
		||||
 | 
			
		||||
     gzopen can be used to read a file which is not in gzip format; in this
 | 
			
		||||
   case gzread will directly read from the file without decompression.
 | 
			
		||||
 | 
			
		||||
     gzopen returns NULL if the file could not be opened or if there was
 | 
			
		||||
   insufficient memory to allocate the (de)compression state; errno
 | 
			
		||||
   can be checked to distinguish the two cases (if errno is zero, the
 | 
			
		||||
   zlib error is Z_MEM_ERROR).
 | 
			
		||||
*/
 | 
			
		||||
   zlib error is Z_MEM_ERROR).  */
 | 
			
		||||
 | 
			
		||||
extern gzFile EXPORT gzdopen  OF((int fd, const char *mode));
 | 
			
		||||
/*
 | 
			
		||||
@@ -660,6 +664,14 @@ extern gzFile EXPORT gzdopen  OF((int fd, const char *mode));
 | 
			
		||||
   the (de)compression state.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT gzsetparams OF((gzFile file, int level, int strategy));
 | 
			
		||||
/*
 | 
			
		||||
     Dynamically update the compression level or strategy. See the description
 | 
			
		||||
   of deflateInit2 for the meaning of these parameters.
 | 
			
		||||
     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
 | 
			
		||||
   opened for writing.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
 | 
			
		||||
/*
 | 
			
		||||
     Reads the given number of uncompressed bytes from the compressed file.
 | 
			
		||||
@@ -675,6 +687,25 @@ extern int EXPORT    gzwrite OF((gzFile file, const voidp buf, unsigned len));
 | 
			
		||||
   (0 in case of error).
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORTVA   gzprintf OF((gzFile file, const char *format, ...));
 | 
			
		||||
/*
 | 
			
		||||
     Converts, formats, and writes the args to the compressed file under
 | 
			
		||||
   control of the format string, as in fprintf. gzprintf returns the number of
 | 
			
		||||
   uncompressed bytes actually written (0 in case of error).
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT    gzputc OF((gzFile file, int c));
 | 
			
		||||
/*
 | 
			
		||||
      Writes c, converted to an unsigned char, into the compressed file.
 | 
			
		||||
   gzputc returns the value that was written, or -1 in case of error.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT    gzgetc OF((gzFile file));
 | 
			
		||||
/*
 | 
			
		||||
      Reads one byte from the compressed file. gzgetc returns this byte
 | 
			
		||||
   or -1 in case of end of file or error.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT    gzflush OF((gzFile file, int flush));
 | 
			
		||||
/*
 | 
			
		||||
     Flushes all pending output into the compressed file. The parameter
 | 
			
		||||
@@ -685,6 +716,45 @@ extern int EXPORT    gzflush OF((gzFile file, int flush));
 | 
			
		||||
   degrade compression.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern z_off_t EXPORT    gzseek OF((gzFile file, z_off_t offset, int whence));
 | 
			
		||||
/* 
 | 
			
		||||
      Sets the starting position for the next gzread or gzwrite on the given
 | 
			
		||||
   compressed file. The offset represents a number of bytes in the
 | 
			
		||||
   uncompressed data stream. The whence parameter is defined as in lseek(2);
 | 
			
		||||
   the value SEEK_END is not supported.
 | 
			
		||||
     If the file is opened for reading, this function is emulated but can be
 | 
			
		||||
   extremely slow. If the file is opened for writing, only forward seeks are
 | 
			
		||||
   supported; gzseek then compresses a sequence of zeroes up to the new
 | 
			
		||||
   starting position.
 | 
			
		||||
 | 
			
		||||
      gzseek returns the resulting offset location as measured in bytes from
 | 
			
		||||
   the beginning of the uncompressed stream, or -1 in case of error, in
 | 
			
		||||
   particular if the file is opened for writing and the new starting position
 | 
			
		||||
   would be before the current position.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT    gzrewind OF((gzFile file));
 | 
			
		||||
/*
 | 
			
		||||
     Rewinds the given file. This function is supported only for reading.
 | 
			
		||||
 | 
			
		||||
   gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern z_off_t EXPORT    gztell OF((gzFile file));
 | 
			
		||||
/*
 | 
			
		||||
     Returns the starting position for the next gzread or gzwrite on the
 | 
			
		||||
   given compressed file. This position represents a number of bytes in the
 | 
			
		||||
   uncompressed data stream.
 | 
			
		||||
 | 
			
		||||
   gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT gzeof OF((gzFile file));
 | 
			
		||||
/*
 | 
			
		||||
     Returns 1 when EOF has previously been detected reading the given
 | 
			
		||||
   input stream, otherwise zero.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int EXPORT    gzclose OF((gzFile file));
 | 
			
		||||
/*
 | 
			
		||||
     Flushes all pending output if necessary, closes the compressed file
 | 
			
		||||
@@ -767,11 +837,14 @@ extern int EXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
 | 
			
		||||
#define inflateInit2(strm, windowBits) \
 | 
			
		||||
        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
 | 
			
		||||
    struct internal_state {int dummy;}; /* hack for buggy compilers */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uLongf *get_crc_table OF((void)); /* can be used by asm versions of crc32() */
 | 
			
		||||
extern const char * EXPORT zError           OF((int err));
 | 
			
		||||
extern int          EXPORT inflateSyncPoint OF((z_streamp z));
 | 
			
		||||
extern uLongf *     EXPORT get_crc_table    OF((void));
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								zutil.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								zutil.c
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
			
		||||
/* zutil.c -- target dependent utility functions for the compression library
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: zutil.c,v 1.17 1996/07/24 13:41:12 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
@@ -28,12 +28,18 @@ const char *z_errmsg[10] = {
 | 
			
		||||
""};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const char *zlibVersion()
 | 
			
		||||
const char * EXPORT zlibVersion()
 | 
			
		||||
{
 | 
			
		||||
    return ZLIB_VERSION;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
 | 
			
		||||
#  ifndef verbose
 | 
			
		||||
#    define verbose 0
 | 
			
		||||
#  endif
 | 
			
		||||
int z_verbose = verbose;
 | 
			
		||||
 | 
			
		||||
void z_error (m)
 | 
			
		||||
    char *m;
 | 
			
		||||
{
 | 
			
		||||
@@ -42,6 +48,16 @@ void z_error (m)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* exported to allow conversion of error code to string for compress() and
 | 
			
		||||
 * uncompress()
 | 
			
		||||
 */
 | 
			
		||||
const char * EXPORT zError(err)
 | 
			
		||||
    int err;
 | 
			
		||||
{
 | 
			
		||||
    return ERR_MSG(err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_MEMCPY
 | 
			
		||||
 | 
			
		||||
void zmemcpy(dest, source, len)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								zutil.h
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								zutil.h
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
/* zutil.h -- internal interface and configuration of the compression library
 | 
			
		||||
 * Copyright (C) 1995-1996 Jean-loup Gailly.
 | 
			
		||||
 * Copyright (C) 1995-1998 Jean-loup Gailly.
 | 
			
		||||
 * For conditions of distribution and use, see copyright notice in zlib.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@@ -8,23 +8,23 @@
 | 
			
		||||
   subject to change. Applications should only use zlib.h.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: zutil.h,v 1.16 1996/07/24 13:41:13 me Exp $ */
 | 
			
		||||
/* @(#) $Id$ */
 | 
			
		||||
 | 
			
		||||
#ifndef _Z_UTIL_H
 | 
			
		||||
#define _Z_UTIL_H
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
#if defined(MSDOS)||defined(VMS)||defined(CRAY)||defined(WIN32)||defined(RISCOS)
 | 
			
		||||
#   include <stddef.h>
 | 
			
		||||
#   include <errno.h>
 | 
			
		||||
#else
 | 
			
		||||
    extern int errno;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef STDC
 | 
			
		||||
#  include <stddef.h>
 | 
			
		||||
#  include <string.h>
 | 
			
		||||
#  include <stdlib.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NO_ERRNO_H
 | 
			
		||||
    extern int errno;
 | 
			
		||||
#else
 | 
			
		||||
#   include <errno.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef local
 | 
			
		||||
#  define local static
 | 
			
		||||
@@ -76,7 +76,13 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
			
		||||
#ifdef MSDOS
 | 
			
		||||
#  define OS_CODE  0x00
 | 
			
		||||
#  ifdef __TURBOC__
 | 
			
		||||
#    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
 | 
			
		||||
       /* Allow compilation with ANSI keywords only enabled */
 | 
			
		||||
       void _Cdecl farfree( void *block );
 | 
			
		||||
       void *_Cdecl farmalloc( unsigned long nbytes );
 | 
			
		||||
#    else
 | 
			
		||||
#     include <alloc.h>
 | 
			
		||||
#    endif
 | 
			
		||||
#  else /* MSC or DJGPP */
 | 
			
		||||
#    include <malloc.h>
 | 
			
		||||
#  endif
 | 
			
		||||
@@ -92,7 +98,7 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
			
		||||
 | 
			
		||||
#if defined(VAXC) || defined(VMS)
 | 
			
		||||
#  define OS_CODE  0x02
 | 
			
		||||
#  define FOPEN(name, mode) \
 | 
			
		||||
#  define F_OPEN(name, mode) \
 | 
			
		||||
     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -120,14 +126,19 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
			
		||||
#  define fdopen(fd,mode) NULL /* No fdopen() */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined(_MSC_VER) && (_MSC_VER >= 600))
 | 
			
		||||
#  define fdopen(fd,type)  _fdopen(fd,type)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /* Common defaults */
 | 
			
		||||
 | 
			
		||||
#ifndef OS_CODE
 | 
			
		||||
#  define OS_CODE  0x03  /* assume Unix */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef FOPEN
 | 
			
		||||
#  define FOPEN(name, mode) fopen((name), (mode))
 | 
			
		||||
#ifndef F_OPEN
 | 
			
		||||
#  define F_OPEN(name, mode) fopen((name), (mode))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
         /* functions */
 | 
			
		||||
@@ -142,9 +153,10 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
			
		||||
#if defined(pyr)
 | 
			
		||||
#  define NO_MEMCPY
 | 
			
		||||
#endif
 | 
			
		||||
#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(_MSC_VER)
 | 
			
		||||
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
 | 
			
		||||
 /* Use our own functions for small and medium model with MSC <= 5.0.
 | 
			
		||||
  * You may have to use the same strategy for Borland C (untested).
 | 
			
		||||
  * The __SC__ check is for Symantec.
 | 
			
		||||
  */
 | 
			
		||||
#  define NO_MEMCPY
 | 
			
		||||
#endif
 | 
			
		||||
@@ -170,16 +182,14 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
			
		||||
/* Diagnostic functions */
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
#  include <stdio.h>
 | 
			
		||||
#  ifndef verbose
 | 
			
		||||
#    define verbose 0
 | 
			
		||||
#  endif
 | 
			
		||||
   extern int z_verbose;
 | 
			
		||||
   extern void z_error    OF((char *m));
 | 
			
		||||
#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
 | 
			
		||||
#  define Trace(x) fprintf x
 | 
			
		||||
#  define Tracev(x) {if (verbose) fprintf x ;}
 | 
			
		||||
#  define Tracevv(x) {if (verbose>1) fprintf x ;}
 | 
			
		||||
#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
 | 
			
		||||
#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
 | 
			
		||||
#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
 | 
			
		||||
#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
 | 
			
		||||
#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
 | 
			
		||||
#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
 | 
			
		||||
#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
 | 
			
		||||
#else
 | 
			
		||||
#  define Assert(cond,msg)
 | 
			
		||||
#  define Trace(x)
 | 
			
		||||
@@ -190,8 +200,8 @@ extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef uLong (*check_func) OF((uLong check, const Bytef *buf, uInt len));
 | 
			
		||||
 | 
			
		||||
typedef uLong (EXPORT *check_func) OF((uLong check, const Bytef *buf,
 | 
			
		||||
				       uInt len));
 | 
			
		||||
voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
 | 
			
		||||
void   zcfree  OF((voidpf opaque, voidpf ptr));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user