diff --git a/ChangeLog b/ChangeLog
index 668d036..54470f2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,22 @@
 		ChangeLog file for zlib
 
+Changes in 0.9 (1 May 95)
+- don't assume that zalloc clears the allocated memory (the TurboC bug
+  was Mark's bug after all :)
+- let again gzread copy uncompressed data unchanged (was working in 0.71)
+- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
+- added a test of inflateSync in example.c
+- moved MAX_WBITS to zconf.h because users might want to change that.
+- document explicitly that zalloc(64K) on MSDOS must return a normalized
+  pointer (zero offset)
+- added Makefiles for Microsoft C, Turbo C, Borland C++
+
 Changes in 0.8 (29 April 95)
 - added fast inflate (inffast.c)
 - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
   is incompatible with previous versions of zlib which returned Z_OK.
 - work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
+  (actually that was not a compiler bug, see 0.81 above)
 - gzread no longer reads one extra byte in certain cases
 - In gzio destroy(), don't reference a freed structure
 - avoid many warnings for MSDOS
diff --git a/Makefile b/Makefile
index facba8a..f251670 100644
--- a/Makefile
+++ b/Makefile
@@ -33,11 +33,11 @@
 	rm -f *.o example minigzip inftest libgz.a foo.gz
 
 zip:
-	zip -ul9 zlib README ChangeLog Makefile *.[ch]
+	zip -ul9 zlib README ChangeLog Makefile Makefile.??? Makefile.?? *.[ch]
 
 tgz:
 	cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \
-		zlib/*.[ch]
+		zlib/Makefile.??? zlib/Makefile.?? zlib/*.[ch]
 
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
diff --git a/Makefile.bak b/Makefile.bak
new file mode 100644
index 0000000..bfe1b74
--- /dev/null
+++ b/Makefile.bak
@@ -0,0 +1,59 @@
+CC=gcc
+CFLAGS=-O2
+#CFLAGS=-g -DDEBUG
+LDFLAGS=-L. -lgz
+
+RANLIB=ranlib
+
+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 = example.o minigzip.o inftest.o
+
+all: example minigzip inftest
+
+test: all
+	./example
+	echo hello world | ./minigzip | ./minigzip -d 
+
+libgz.a: $(OBJS)
+	ar rc $@ $(OBJS)
+	$(RANLIB) $@
+
+example: example.o libgz.a
+	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
+
+minigzip: minigzip.o libgz.a
+	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
+
+inftest: inftest.o libgz.a
+	$(CC) $(CFLAGS) -o $@ inftest.o $(LDFLAGS)
+
+clean:
+	rm -f *.o example minigzip inftest libgz.a foo.gz
+
+zip:
+	zip -ul9 zlib README ChangeLog Makefile *.[ch]
+
+tgz:
+	cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \
+		zlib/*.[ch]
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+adler32.o: zutil.h zlib.h zconf.h
+compress.o: zlib.h zconf.h
+crc32.o: zutil.h zlib.h zconf.h
+deflate.o: deflate.h zutil.h zlib.h zconf.h
+example.o: zlib.h zconf.h
+gzio.o: zutil.h zlib.h zconf.h
+infblock.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h
+infcodes.o: zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h
+inflate.o: zutil.h zlib.h zconf.h infblock.h
+inftest.o: zutil.h zlib.h zconf.h
+inftrees.o: zutil.h zlib.h zconf.h inftrees.h
+infutil.o: zutil.h zlib.h zconf.h inftrees.h infutil.h
+minigzip.o: zlib.h zconf.h
+trees.o: deflate.h zutil.h zlib.h zconf.h
+uncompr.o: zlib.h zconf.h
+zutil.o: zutil.h zlib.h zconf.h
diff --git a/Makefile.bor b/Makefile.bor
new file mode 100644
index 0000000..877ed62
--- /dev/null
+++ b/Makefile.bor
@@ -0,0 +1,98 @@
+# Makefile for zlib
+# Borland C++   ************ UNTESTED ***********
+
+# To use, do "make -fmakefile.bor"
+
+# WARNING: the small model is supported but only for small values of
+# MAX_WBITS and MAX_MEM_LEVEL
+
+# ------------- Turbo C++, Borland C++ -------------
+MODEL=-ml
+CFLAGS=-O2 -Z $(MODEL)
+CC=bcc
+LD=bcc
+LIB=tlib
+#   replace bcc with tcc for Turbo C++ 1.0
+LDFLAGS=$(MODEL)
+O=.obj
+
+# variables
+OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
+  trees$(O)
+OBJP1 = 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)
+OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
+  infutil$(O)+inffast$(O)
+
+all: test
+
+adler32.obj: adler32.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+compress.obj: compress.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+crc32.obj: crc32.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+gzio.obj: gzio.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
+   infcodes.h infutil.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
+   infcodes.h inffast.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
+	$(CC) -c $(CFLAGS) $*.c
+
+trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+uncompr.obj: uncompr.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+zutil.obj: zutil.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+example.obj: example.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+minigzip.obj: minigzip.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+# we must cut the command line to fit in the MS/DOS 128 byte limit:
+zlib.lib: $(OBJ1) $(OBJ2)
+	$(LIB) zlib +$(OBJP1)
+	$(LIB) zlib +$(OBJP2)
+
+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
diff --git a/Makefile.msc b/Makefile.msc
new file mode 100644
index 0000000..375d21c
--- /dev/null
+++ b/Makefile.msc
@@ -0,0 +1,95 @@
+# Makefile for zlib
+# Microsoft C 5.1 or later
+
+# To use, do "make makefile.msc"
+
+# WARNING: the small model is supported but only for small values of
+# MAX_WBITS and MAX_MEM_LEVEL
+
+# ------------- Microsoft C 5.1 and later -------------
+MODEL=-AL
+CFLAGS=-Oait -Gs -nologo -W3 $(MODEL)
+#-Ox generates bad code with MSC 5.1
+CC=cl
+LD=link
+LDFLAGS=/e/st:0x1000/noe
+O=.obj
+
+# variables
+OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
+  trees$(O)
+OBJP1 = 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)
+OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
+  infutil$(O)+inffast$(O)
+
+adler32.obj: adler32.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+compress.obj: compress.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+crc32.obj: crc32.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+gzio.obj: gzio.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
+   infcodes.h infutil.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
+   infcodes.h inffast.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
+	$(CC) -c $(CFLAGS) $*.c
+
+trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+uncompr.obj: uncompr.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+zutil.obj: zutil.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+example.obj: example.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+minigzip.obj: minigzip.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+# we must cut the command line to fit in the MS/DOS 128 byte limit:
+zlib.lib: $(OBJ1) $(OBJ2)
+	lib zlib $(OBJ1);
+	lib zlib $(OBJ2);
+
+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
diff --git a/Makefile.tc b/Makefile.tc
new file mode 100644
index 0000000..51075f7
--- /dev/null
+++ b/Makefile.tc
@@ -0,0 +1,97 @@
+# Makefile for zlib
+# TurboC 2.0
+
+# To use, do "make -fmakefile.tc"
+
+# WARNING: the small model is supported but only for small values of
+# MAX_WBITS and MAX_MEM_LEVEL
+
+# ------------- Turbo C 2.0 -------------
+MODEL=-ml
+CFLAGS=-O2 -Z $(MODEL)
+CC=tcc
+LD=tcc
+LIB=tlib
+LDFLAGS=$(MODEL)
+O=.obj
+
+# variables
+OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
+  trees$(O)
+OBJP1 = 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)
+OBJP2 = zutil$(O)+inflate$(O)+infblock$(O)+inftrees$(O)+infcodes$(O)+\
+  infutil$(O)+inffast$(O)
+
+all: test
+
+adler32.obj: adler32.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+compress.obj: compress.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+crc32.obj: crc32.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+gzio.obj: gzio.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
+   infcodes.h infutil.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
+   infcodes.h inffast.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
+	$(CC) -c $(CFLAGS) $*.c
+
+infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h
+	$(CC) -c $(CFLAGS) $*.c
+
+inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h
+	$(CC) -c $(CFLAGS) $*.c
+
+trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+uncompr.obj: uncompr.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+zutil.obj: zutil.c zutil.h zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+example.obj: example.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+minigzip.obj: minigzip.c zlib.h zconf.h
+	$(CC) -c $(CFLAGS) $*.c
+
+# we must cut the command line to fit in the MS/DOS 128 byte limit:
+zlib.lib: $(OBJ1) $(OBJ2)
+	$(LIB) zlib +$(OBJP1)
+	$(LIB) zlib +$(OBJP2)
+
+example.exe: example.obj zlib.lib
+	$(LD) $(LDFLAGS) -eexample.exe example.obj zlib.lib
+
+minigzip.exe: minigzip.obj zlib.lib
+	$(LD) $(LDFLAGS) -eminigzip.exe minigzip.obj zlib.lib
+
+test: example.exe minigzip.exe
+	example
+	echo hello world | minigzip | minigzip -d 
+
+#clean:
+#	del *.obj
+#	del *.exe
diff --git a/README b/README
index a8d5788..0c718f1 100644
--- a/README
+++ b/README
@@ -1,6 +1,4 @@
-zlib 0.8 is a beta version of a general purpose compression library.
-This is the first version with no known bugs. (There may still be
-problem on SGI, to be checked.)
+zlib 0.9 is a beta version of a general purpose compression library.
 
 The data format used by the zlib library is described in the
 file zlib-3.1.doc, deflate-1.1.doc and gzip-4.1.doc, available
@@ -11,18 +9,17 @@
 which also tests that the library is working correctly.
 To compile all files and run the test program, just type: make test
 
-The changes made in version 0.8 are documented in the file ChangeLog.
-The main changes since 0.71 are:
-- added fast inflate (inffast.c)
-- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
-  is incompatible with previous versions of zlib which returned Z_OK.
-- work around a nasty TurboC compiler bug
+The changes made in version 0.9 are documented in the file ChangeLog.
+The main changes since 0.8 are:
+- don't assume that zalloc clears the allocated memory
+- let again gzread copy uncompressed data unchanged (was working in 0.71)
+- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
 
 On MSDOS, this version works in both large and small model. However
 small model compression works only for small values of MEM_LEVEL and
 WBITS (see zutil.h). Small model decompression should work up to WBITS=15.
-This version of zlib does not yet support small or medium model with
-far allocation of big objects.
+This version of zlib does not support small or medium model with far
+allocation of big objects.
 
 
   Copyright (C) 1995 Jean-loup Gailly and Mark Adler
diff --git a/crc32.c b/crc32.c
index e8d385f..d9485c2 100644
--- a/crc32.c
+++ b/crc32.c
@@ -3,12 +3,17 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: crc32.c,v 1.4 1995/04/14 14:55:12 jloup Exp $ */
+/* $Id: crc32.c,v 1.5 1995/05/01 13:55:46 jloup Exp $ */
 
 #include "zlib.h"
 
 extern uLong crc_table[];   /* crc table, defined below */
 
+#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
+#define DO2(buf)  DO1(buf); DO1(buf);
+#define DO4(buf)  DO2(buf); DO2(buf);
+#define DO8(buf)  DO4(buf); DO4(buf);
+
 /* ========================================================================= */
 uLong crc32(crc, buf, len)
     uLong crc;
@@ -17,8 +22,13 @@
 {
     if (buf == Z_NULL) return 0L;
     crc = crc ^ 0xffffffffL;
+    while (len >= 8)
+    {
+      DO8(buf);
+      len -= 8;
+    }
     if (len) do {
-	crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
+      DO1(buf);
     } while (--len);
     return crc ^ 0xffffffffL;
 }
@@ -29,7 +39,7 @@
  */
 #ifdef DYNAMIC_CRC_TABLE
 
-void make_crc_table()
+local void make_crc_table()
 {
   uLong c;
   int n, k;
diff --git a/deflate.c b/deflate.c
index e7e52af..75db3d0 100644
--- a/deflate.c
+++ b/deflate.c
@@ -47,7 +47,7 @@
  *
  */
 
-/* $Id: deflate.c,v 1.5 1995/04/29 16:52:05 jloup Exp $ */
+/* $Id: deflate.c,v 1.6 1995/05/01 17:23:57 jloup Exp $ */
 
 #include "deflate.h"
 
@@ -152,12 +152,20 @@
     s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
     s->head[s->ins_h] = (str))
 
+/* ===========================================================================
+ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+ * prev[] will be initialized on the fly.
+ */
+#define CLEAR_HASH(s) \
+    s->head[s->hash_size-1] = NIL; \
+    zmemzero((char*)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
 /* ========================================================================= */
 int deflateInit (strm, level)
     z_stream *strm;
     int level;
 {
-    return deflateInit2 (strm, level, DEFLATED, WBITS, MEM_LEVEL, 0);
+    return deflateInit2 (strm, level, DEFLATED, MAX_WBITS, MAX_MEM_LEVEL, 0);
     /* To do: ignore strm->next_in if we use it as window */
 }
 
@@ -345,6 +353,13 @@
 	} else {
 	    if (deflate_slow(strm->state, flush)) return Z_OK;
 	}
+	/* ??? remember Z_FULL_FLUSH if we didn't have enough space */
+	if (flush == Z_FULL_FLUSH) {
+	    ct_stored_block(strm->state, (char*)0, 0L, 0); /* special marker */
+	    flush_pending(strm);
+	    CLEAR_HASH(strm->state);             /* forget history */
+	    if (strm->avail_out == 0) return Z_OK;
+	}
     }
     Assert(strm->avail_out > 0, "bug2");
 
@@ -435,12 +450,7 @@
 
     s->window_size = (ulg)2L*s->w_size;
 
-
-    /* Initialize the hash table (avoiding 64K overflow for 16 bit systems).
-     * prev[] will be initialized on the fly.
-     */
-    s->head[s->hash_size-1] = NIL;
-    zmemzero((char*)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+    CLEAR_HASH(s);
 
     /* Set the default configuration parameters:
      */
@@ -930,8 +940,10 @@
             s->lookahead--;
         }
     }
-    if (s->match_available) ct_tally (s, 0, s->window[s->strstart-1]);
-
+    if (s->match_available) {
+	ct_tally (s, 0, s->window[s->strstart-1]);
+	s->match_available = 0;
+    }
     FLUSH_BLOCK(s, flush == Z_FINISH);
     return 0;
 }
diff --git a/deflate.h b/deflate.h
index 740c25a..1f8068e 100644
--- a/deflate.h
+++ b/deflate.h
@@ -8,7 +8,7 @@
    subject to change. Applications should only use zlib.h.
  */
 
-/* $Id: deflate.h,v 1.3 1995/04/14 12:39:45 jloup Exp $ */
+/* $Id: deflate.h,v 1.4 1995/05/01 15:08:45 jloup Exp $ */
 
 #include "zutil.h"
 
@@ -268,3 +268,5 @@
 void ct_init       __P((deflate_state *s));
 int  ct_tally      __P((deflate_state *s, int dist, int lc));
 ulg ct_flush_block __P((deflate_state *s, char *buf, ulg stored_len, int eof));
+void ct_stored_block __P((deflate_state *s, char *buf, ulg stored_len,
+			  int eof));
diff --git a/example.c b/example.c
index 5b482b8..c1bac1e 100644
--- a/example.c
+++ b/example.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: example.c,v 1.6 1995/04/29 16:53:46 jloup Exp $ */
+/* $Id: example.c,v 1.7 1995/05/01 16:57:22 jloup Exp $ */
 
 #include <stdio.h>
 #include "zlib.h"
@@ -182,6 +182,81 @@
 }
 
 /* ===========================================================================
+ * Test deflate() with full flush
+ */
+void test_flush(compr)
+    Byte compr[];
+{
+    z_stream c_stream; /* compression stream */
+    int err;
+    int len = strlen(hello)+1;
+
+    c_stream.zalloc = (alloc_func)0;
+    c_stream.zfree = (free_func)0;
+
+    err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
+    CHECK_ERR(err, "deflateInit");
+
+    c_stream.next_in  = (Byte*)hello;
+    c_stream.next_out = compr;
+    c_stream.avail_in = 3;
+    c_stream.avail_out = BUFLEN;
+    err = deflate(&c_stream, Z_FULL_FLUSH);
+    CHECK_ERR(err, "deflate");
+
+    compr[3]++; /* force an error in first compressed block */
+    c_stream.avail_in = len - 3;
+
+    err = deflate(&c_stream, Z_FINISH);
+    if (err != Z_STREAM_END) {
+	CHECK_ERR(err, "deflate");
+    }
+    err = deflateEnd(&c_stream);
+    CHECK_ERR(err, "deflateEnd");
+}
+
+/* ===========================================================================
+ * Test inflateSync()
+ */
+void test_sync(compr)
+    Byte compr[];
+{
+    local Byte uncompr[BUFLEN];
+    int err;
+    z_stream d_stream; /* decompression stream */
+
+    strcpy((char*)uncompr, "garbage");
+
+    d_stream.zalloc = (alloc_func)0;
+    d_stream.zfree = (free_func)0;
+
+    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 = sizeof(uncompr);
+
+    inflate(&d_stream, Z_NO_FLUSH);
+    CHECK_ERR(err, "inflate");
+
+    d_stream.avail_in = BUFLEN-2; /* let inflate read all compressed data */
+    err = inflateSync(&d_stream); /* skip the damaged part */
+    CHECK_ERR(err, "inflateSync");
+
+    err = inflate(&d_stream, Z_FINISH);
+    if (err != Z_DATA_ERROR) {
+        fprintf(stderr, "inflate should report DATA_ERROR\n");
+	/* Because of incorrect adler32 */
+    }
+    err = inflateEnd(&d_stream);
+    CHECK_ERR(err, "inflateEnd");
+
+    printf("after inflateSync(): %s\n", uncompr);
+}
+
+/* ===========================================================================
  * Usage:  example [output.gz  [input.gz]]
  */
 
@@ -204,8 +279,10 @@
 	      (argc > 2 ? argv[2] : "foo.gz"));
 
     test_deflate(compr);
-
     test_inflate(compr);
 
+    test_flush(compr);
+    test_sync(compr);
+
     exit(0);
 }
diff --git a/gzio.c b/gzio.c
index 6c3211a..1f5e130 100644
--- a/gzio.c
+++ b/gzio.c
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
-/* $Id: gzio.c,v 1.5 1995/04/29 17:13:56 jloup Exp $ */
+/* $Id: gzio.c,v 1.6 1995/04/30 19:52:21 jloup Exp $ */
 
 #include <stdio.h>
 
@@ -128,7 +128,7 @@
     
     if (s->mode == 'w') {
 	err = deflateInit2(&(s->stream), Z_DEFAULT_COMPRESSION,
-			   DEFLATED, -WBITS, MEM_LEVEL, 0);
+			   DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, 0);
 	/* windowBits is passed < 0 to suppress zlib header */
 
 	s->stream.next_out = s->outbuf = ALLOC(Z_BUFSIZE);
@@ -137,7 +137,7 @@
 	    return destroy(s), (gzFile)Z_NULL;
 	}
     } else {
-	err = inflateInit2(&(s->stream), -WBITS);
+	err = inflateInit2(&(s->stream), -MAX_WBITS);
 	s->stream.next_in  = s->inbuf = ALLOC(Z_BUFSIZE);
 
 	if (err != Z_OK || s->inbuf == Z_NULL) {
@@ -249,7 +249,7 @@
 	    len--; n++;
 	}
 	if (len == 0) return n;
-	return n + fread(buf, 1, len, s->file);
+	return n + fread(b, 1, len, s->file);
     }
     if (s->z_err == Z_DATA_ERROR) return -1; /* bad .gz file */
     if (s->z_err == Z_STREAM_END) return 0;  /* don't read crc as data */
diff --git a/infblock.c b/infblock.c
index 2c2f8dd..538fa62 100644
--- a/infblock.c
+++ b/infblock.c
@@ -60,6 +60,28 @@
       the two sets of lengths.
  */
 
+
+void inflate_blocks_reset(s, z, c)
+struct inflate_blocks_state *s;
+z_stream *z;
+uLong *c;
+{
+  if (s->checkfn != Z_NULL)
+    *c = s->check;
+  if (s->mode == BTREE || s->mode == DTREE)
+    ZFREE(z, s->sub.trees.blens);
+  if (s->mode == CODES)
+    inflate_codes_free(s->sub.codes, z);
+  s->mode = TYPE;
+  s->bitk = 0;
+  s->bitb = 0;
+  s->read = s->write = s->window;
+  if (s->checkfn != Z_NULL)
+    s->check = (*s->checkfn)(0L, Z_NULL, 0);
+  Trace((stderr, "inflate:   blocks reset\n"));
+}
+
+
 struct inflate_blocks_state *inflate_blocks_new(z, c, w)
 z_stream *z;
 check_func c;
@@ -75,13 +97,11 @@
     ZFREE(z, s);
     return Z_NULL;
   }
-  s->mode = TYPE;
-  s->bitk = 0;
-  s->read = s->write = s->window;
   s->end = s->window + w;
   s->checkfn = c;
-  if (s->checkfn != Z_NULL)
-    s->check = (*s->checkfn)(0L, Z_NULL, 0);
+  s->mode = TYPE;
+  Trace((stderr, "inflate:   blocks allocated\n"));
+  inflate_blocks_reset(s, z, &s->check);
   return s;
 }
 
@@ -112,12 +132,16 @@
       switch (t >> 1)
       {
         case 0:				/* stored */
+	  Trace((stderr, "inflate:     stored block%s\n",
+		 s->last ? " (last)" : ""));
 	  DUMPBITS(3)
 	  t = k & 7;			/* go to byte boundary */
 	  DUMPBITS(t)
 	  s->mode = LENS;		/* get length of stored block */
 	  break;
 	case 1:				/* fixed */
+	  Trace((stderr, "inflate:     fixed codes block%s\n",
+		 s->last ? " (last)" : ""));
 	  {
 	    uInt bl, bd;
 	    inflate_huft *tl, *td;
@@ -134,12 +158,14 @@
 	  s->mode = CODES;
 	  break;
 	case 2:				/* dynamic */
+	  Trace((stderr, "inflate:     dynamic codes block%s\n",
+		 s->last ? " (last)" : ""));
 	  DUMPBITS(3)
 	  s->mode = TABLE;
 	  break;
 	case 3:				/* illegal */
 	  DUMPBITS(3)
-	  s->mode = INF_ERROR;
+	  s->mode = BAD;
 	  z->msg = "invalid block type";
 	  r = Z_DATA_ERROR;
 	  LEAVE
@@ -149,13 +175,14 @@
       NEEDBITS(32)
       if ((~b) >> 16 != (b & 0xffff))
       {
-        s->mode = INF_ERROR;
+        s->mode = BAD;
 	z->msg = "invalid stored block lengths";
 	r = Z_DATA_ERROR;
 	LEAVE
       }
       k = 0;				/* dump bits */
       s->sub.left = (uInt)b & 0xffff;
+      Tracev((stderr, "inflate:       stored length %u\n", s->sub.left));
       s->mode = s->sub.left ? STORED : TYPE;
       break;
     case STORED:
@@ -164,6 +191,9 @@
 	NEEDOUT
 	OUTBYTE(NEXTBYTE)
       } while (--s->sub.left);
+      Tracev((stderr, "inflate:       stored end, %lu total out\n",
+	      z->total_out + (q >= s->read ? q - s->read :
+	      (s->end - s->read) + (q - s->window))));
       s->mode = s->last ? DRY : TYPE;
       break;
     case TABLE:
@@ -172,7 +202,7 @@
 #ifndef PKZIP_BUG_WORKAROUND
       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
       {
-        s->mode = INF_ERROR;
+        s->mode = BAD;
         z->msg = "too many length or distance symbols";
 	r = Z_DATA_ERROR;
 	LEAVE
@@ -188,6 +218,7 @@
       }
       DUMPBITS(14)
       s->sub.trees.index = 0;
+      Tracev((stderr, "inflate:       table sizes ok\n"));
       s->mode = BTREE;
     case BTREE:
       while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
@@ -205,10 +236,11 @@
       {
         r = t;
 	if (r == Z_DATA_ERROR)
-	  s->mode = INF_ERROR;
+	  s->mode = BAD;
 	LEAVE
       }
       s->sub.trees.index = 0;
+      Tracev((stderr, "inflate:       bits tree ok\n"));
       s->mode = DTREE;
     case DTREE:
       while (t = s->sub.trees.table,
@@ -240,7 +272,7 @@
 	  if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
 	      (c == 16 && i < 1))
 	  {
-	    s->mode = INF_ERROR;
+	    s->mode = BAD;
 	    z->msg = "invalid bit length repeat";
 	    r = Z_DATA_ERROR;
 	    LEAVE
@@ -267,10 +299,11 @@
 	if (t != Z_OK)
 	{
 	  if (t == (uInt)Z_DATA_ERROR)
-	    s->mode = INF_ERROR;
+	    s->mode = BAD;
 	  r = t;
 	  LEAVE
 	}
+        Tracev((stderr, "inflate:       trees ok\n"));
 	if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
 	{
 	  inflate_trees_free(td, z);
@@ -289,17 +322,20 @@
       r = Z_OK;
       inflate_codes_free(s->sub.codes, z);
       LOAD
+      Tracev((stderr, "inflate:       codes end, %lu total out\n",
+	      z->total_out + (q >= s->read ? q - s->read :
+	      (s->end - s->read) + (q - s->window))));
       if (!s->last)
       {
         s->mode = TYPE;
-      break;
+	break;
       }
       if (k > 7)              /* return unused byte, if any */
       {
         Assert(k < 16, "inflate_codes grabbed too many bytes")
         k -= 8;
-      n++;
-      p--;                    /* can always return one */
+	n++;
+	p--;                    /* can always return one */
       }
       s->mode = DRY;
     case DRY:
@@ -310,7 +346,7 @@
     case DONE:
       r = Z_STREAM_END;
       LEAVE
-    case INF_ERROR:
+    case BAD:
       r = Z_DATA_ERROR;
       LEAVE
     default:
@@ -325,13 +361,9 @@
 z_stream *z;
 uLong *c;
 {
-  if (s->checkfn != Z_NULL)
-    *c = s->check;
-  if (s->mode == BTREE || s->mode == DTREE)
-    ZFREE(z, s->sub.trees.blens);
-  if (s->mode == CODES)
-    inflate_codes_free(s->sub.codes, z);
+  inflate_blocks_reset(s, z, c);
   ZFREE(z, s->window);
   ZFREE(z, s);
+  Trace((stderr, "inflate:   blocks freed\n"));
   return Z_OK;
 }
diff --git a/infblock.h b/infblock.h
index 4a9e0e2..33e1696 100644
--- a/infblock.h
+++ b/infblock.h
@@ -11,16 +11,21 @@
 struct inflate_blocks_state;
 
 extern struct inflate_blocks_state * inflate_blocks_new __P((
-    z_stream *z,
-    check_func c,               /* check function */
-    uInt w));                   /* window size */
+    z_stream *,
+    check_func,                 /* check function */
+    uInt));                     /* window size */
 
 extern int inflate_blocks __P((
     struct inflate_blocks_state *,
     z_stream *,
     int));			/* initial return code */
 
+extern void inflate_blocks_reset __P((
+    struct inflate_blocks_state *,
+    z_stream *,
+    uLong *));                  /* check value on output */
+
 extern int inflate_blocks_free __P((
     struct inflate_blocks_state *,
     z_stream *,
-    uLong *));                        /* check value on output */
+    uLong *));                  /* check value on output */
diff --git a/infcodes.c b/infcodes.c
index 489f9d6..fc56547 100644
--- a/infcodes.c
+++ b/infcodes.c
@@ -29,7 +29,7 @@
       LIT,	/* o: got literal, waiting for output space */
       WASH,	/* o: got eob, possibly still output waiting */
       END,	/* x: got eob and all data flushed */
-      BAD}	/* x: got error */
+      BADCODE}	/* x: got error */
     mode;		/* current inflate_codes mode */
 
   /* mode dependent information */
@@ -70,6 +70,7 @@
     c->dbits = (Byte)bd;
     c->ltree = tl;
     c->dtree = td;
+    Tracev((stderr, "inflate:       codes new\n"));
   }
   return c;
 }
@@ -107,7 +108,7 @@
 	LOAD
 	if (r != Z_OK)
 	{
-	  c->mode = r == Z_STREAM_END ? WASH : BAD;
+	  c->mode = r == Z_STREAM_END ? WASH : BADCODE;
 	  break;
 	}
       }
@@ -124,7 +125,7 @@
       {
         if (e == -128)		/* invalid code */
 	{
-	  c->mode = BAD;
+	  c->mode = BADCODE;
 	  z->msg = "invalid literal/length code";
 	  r = Z_DATA_ERROR;
 	  LEAVE
@@ -132,6 +133,7 @@
 	e = -e;
 	if (e & 64)		/* end of block */
 	{
+	  Tracevv((stderr, "inflate:         end of block\n"));
 	  c->mode = WASH;
 	  break;
 	}
@@ -142,6 +144,9 @@
       if (e & 16)		/* literal */
       {
 	c->sub.lit = t->base;
+	Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
+		 "inflate:         literal '%c'\n" :
+		 "inflate:         literal 0x%02x\n", t->base));
 	c->mode = LIT;
 	break;
       }
@@ -155,6 +160,7 @@
       DUMPBITS(j)
       c->sub.code.need = c->dbits;
       c->sub.code.tree = c->dtree;
+      Tracevv((stderr, "inflate:         length %u\n", c->len));
       c->mode = DIST;
     case DIST:		/* i: get distance next */
       j = c->sub.code.need;
@@ -165,7 +171,7 @@
       {
         if (e == -128)
 	{
-	  c->mode = BAD;
+	  c->mode = BADCODE;
 	  z->msg = "invalid distance code";
 	  r = Z_DATA_ERROR;
 	  LEAVE
@@ -182,6 +188,7 @@
       NEEDBITS(j)
       c->sub.copy.dist += (uInt)b & inflate_mask[j];
       DUMPBITS(j)
+      Tracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
       c->mode = COPY;
     case COPY:		/* o: copying bytes in window, waiting for space */
       f = (uInt)(q - s->window) < c->sub.copy.dist ?
@@ -210,7 +217,7 @@
     case END:
       r = Z_STREAM_END;
       LEAVE
-    case BAD:		/* x: got error */
+    case BADCODE:	/* x: got error */
       r = Z_DATA_ERROR;
       LEAVE
     default:
@@ -227,4 +234,5 @@
   inflate_trees_free(c->dtree, z);
   inflate_trees_free(c->ltree, z);
   ZFREE(z, c);
+  Tracev((stderr, "inflate:       codes free\n"));
 }
diff --git a/inffast.c b/inffast.c
index 29c97e2..980a925 100644
--- a/inffast.c
+++ b/inffast.c
@@ -73,6 +73,7 @@
 	e = -e;
 	if (e & 64)		/* end of block */
 	{
+	  Tracevv((stderr, "inflate:         * end of block\n"));
           UNGRAB
 	  UPDATE
 	  return Z_STREAM_END;
@@ -83,6 +84,9 @@
     /* process literal or length (end of block already trapped) */
     if (e & 16)			/* then it's a literal */
     {
+      Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
+		"inflate:         * literal '%c'\n" :
+		"inflate:         * literal 0x%02x\n", t->base));
       *q++ = (Byte)t->base;
       m--;
     }
@@ -91,6 +95,7 @@
       /* get length of block to copy (already have extra bits) */
       c = t->base + ((uInt)b & inflate_mask[e]);
       DUMPBITS(e);
+      Tracevv((stderr, "inflate:         * length %u\n", c));
 
       /* decode distance base of block to copy */
       GRABBITS(15);		/* max bits for distance code */
@@ -109,13 +114,14 @@
       DUMPBITS(t->bits)
 
       /* get extra bits to add to distance base */
-      GRABBITS(e)           /* get extra bits (up to 13) */
+      GRABBITS((uInt)e)		/* get extra bits (up to 13) */
       d = t->base + ((uInt)b & inflate_mask[e]);
       DUMPBITS(e)
+      Tracevv((stderr, "inflate:         * distance %u\n", d));
 
       /* do the copy */
       m -= c;
-      if (q - s->window >= d)		/* if offset before destination, */
+      if ((uInt)(q - s->window) >= d)	/* if offset before destination, */
       {					/*  just copy */
 	r = q - d;
 	*q++ = *r++;  c--;		/* minimum count is three, */
@@ -128,7 +134,7 @@
       {
 	e = d - (q - s->window);	/* bytes from offset to end */
 	r = s->end - e;			/* pointer to offset */
-	if (c > e)			/* if source crosses, */
+	if (c > (uInt)e)		/* if source crosses, */
 	{
 	  c -= e;			/* copy to end of window */
 	  do {
diff --git a/inflate.c b/inflate.c
index b76e246..bed4e54 100644
--- a/inflate.c
+++ b/inflate.c
@@ -15,38 +15,63 @@
   enum {
       METHOD,	/* waiting for method byte */
       FLAG,	/* waiting for flag byte */
-      START,	/* make new blocks state */
       BLOCKS,	/* decompressing blocks */
       CHECK4,	/* four check bytes to go */
       CHECK3,	/* three check bytes to go */
       CHECK2,	/* two check bytes to go */
       CHECK1,	/* one check byte to go */
       DONE,	/* finished check, done */
-      INF_ERROR}/* got an error--stay here */
+      BAD}	/* got an error--stay here */
     mode;		/* current inflate mode */
 
   /* mode dependent information */
   union {
     uInt method;	/* if FLAGS, method byte */
-    struct inflate_blocks_state
-      *blocks;		/* if BLOCKS, current state */
     struct {
-      uLong was;		/* computed check value */
-      uLong need;		/* stream check value */
-    } check;		/* if CHECK, check values to compare */
+      uLong was;                /* computed check value */
+      uLong need;               /* stream check value */
+    } check;            /* if CHECK, check values to compare */
+    uInt marker;	/* if BAD, inflateSync's marker bytes count */
   } sub;	/* submode */
 
   /* mode independent information */
   int  nowrap;		/* flag for no wrapper */
   uInt wbits;  		/* log2(window size)  (8..15, defaults to 15) */
+  struct inflate_blocks_state
+    *blocks;		/* current inflate_blocks state */
 
 };
 
 
-int inflateInit(z)
+int inflateReset(z)
 z_stream *z;
 {
-    return inflateInit2(z, WBITS);
+  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"));
+  return Z_OK;
+}
+
+
+int inflateEnd(z)
+z_stream *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);
+  ZFREE(z, z->state);
+  z->state = Z_NULL;
+  Trace((stderr, "inflate: end\n"));
+  return Z_OK;
 }
 
 
@@ -59,12 +84,10 @@
     return Z_STREAM_ERROR;
   if (z->zalloc == Z_NULL) z->zalloc = zcalloc;
   if (z->zfree == Z_NULL) z->zfree = zcfree;
-  z->total_in = z->total_out = 0;
-  z->msg = Z_NULL;
   if ((z->state = (struct internal_state *)
        ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
     return Z_MEM_ERROR;
-  z->state->mode = METHOD;
+  z->state->blocks = Z_NULL;
 
   /* handle undocumented nowrap option (no zlib header or check) */
   z->state->nowrap = 0;
@@ -72,7 +95,6 @@
   {
     w = - w;
     z->state->nowrap = 1;
-    z->state->mode = START;
   }
 
   /* set window size */
@@ -81,20 +103,40 @@
     inflateEnd(z);
     return Z_STREAM_ERROR;
   }
-  z->state->wbits = w;
+  z->state->wbits = (uInt)w;
+
+  /* create inflate_blocks state */
+  if ((z->state->blocks =
+       inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, 1 << w))
+      == Z_NULL)
+  {
+    inflateEnd(z);
+    return Z_MEM_ERROR;
+  }
+  Trace((stderr, "inflate: allocated\n"));
+
+  /* reset state */
+  inflateReset(z);
   return Z_OK;
 }
 
 
+int inflateInit(z)
+z_stream *z;
+{
+  return inflateInit2(z, DEF_WBITS);
+}
+
+
+#define NEEDBYTE {if(z->avail_in==0)return r;r=Z_OK;}
 #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
 
 int inflate(z, f)
 z_stream *z;
 int f;
 {
-  int r = f; /* to avoid warning about unused f */
+  int r = f;	/* to avoid warning about unused f */
   uInt b;
-  uLong c;
 
   if (z == Z_NULL || z->next_in == Z_NULL)
     return Z_STREAM_ERROR;
@@ -102,77 +144,86 @@
   while (1) switch (z->state->mode)
   {
     case METHOD:
-      if (z->avail_in == 0) return r;  r = Z_OK;
+      NEEDBYTE
       if (((z->state->sub.method = NEXTBYTE) & 0xf != DEFLATED))
       {
-        z->state->mode = INF_ERROR;
+        z->state->mode = BAD;
 	z->msg = "unknown compression method";
-	return Z_DATA_ERROR;
+	z->state->sub.marker = 5;	/* can't try inflateSync */
+	break;
       }
       if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
       {
-        z->state->mode = INF_ERROR;
+        z->state->mode = BAD;
 	z->msg = "invalid window size";
-	return Z_DATA_ERROR;
+	z->state->sub.marker = 5;	/* can't try inflateSync */
+	break;
       }
       z->state->mode = FLAG;
     case FLAG:
-      if (z->avail_in == 0) return r;  r = Z_OK;
+      NEEDBYTE
       if ((b = NEXTBYTE) & 0x20)
       {
-        z->state->mode = INF_ERROR;
+        z->state->mode = BAD;
 	z->msg = "invalid reserved bit";
-	return Z_DATA_ERROR;
+	z->state->sub.marker = 5;	/* can't try inflateSync */
+	break;
       }
       if (((z->state->sub.method << 8) + b) % 31)
       {
-        z->state->mode = INF_ERROR;
+        z->state->mode = BAD;
 	z->msg = "incorrect header check";
-	return Z_DATA_ERROR;
-      }
-      z->state->mode = START;
-    case START:
-      if ((z->state->sub.blocks = inflate_blocks_new(z,
-         z->state->nowrap ? Z_NULL : adler32,
-         1<< z->state->wbits)) == Z_NULL)
-        return Z_MEM_ERROR;
-      z->state->mode = BLOCKS;
-    case BLOCKS:
-      if ((r = inflate_blocks(z->state->sub.blocks, z, r)) != Z_STREAM_END)
-        return r;
-      inflate_blocks_free(z->state->sub.blocks, z, &c);
-      if (z->state->nowrap)
-      {
-      z->state->mode = DONE;
+	z->state->sub.marker = 5;	/* can't try inflateSync */
 	break;
       }
-      z->state->sub.check.was = c;
+      Trace((stderr, "inflate: zlib header ok\n"));
+      z->state->mode = BLOCKS;
+    case BLOCKS:
+      r = inflate_blocks(z->state->blocks, z, r);
+      if (r == Z_DATA_ERROR)
+      {
+        z->state->mode = BAD;
+	z->state->sub.marker = 0;	/* can try inflateSync */
+	break;
+      }
+      if (r != Z_STREAM_END)
+	return r;
+      r = Z_OK;
+      inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
+      if (z->state->nowrap)
+      {
+	z->state->mode = DONE;
+	break;
+      }
       z->state->mode = CHECK4;
     case CHECK4:
-      if (z->avail_in == 0) return r;  r = Z_OK;
+      NEEDBYTE
       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
       z->state->mode = CHECK3;
     case CHECK3:
-      if (z->avail_in == 0) return r;  r = Z_OK;
+      NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
       z->state->mode = CHECK2;
     case CHECK2:
-      if (z->avail_in == 0) return r;  r = Z_OK;
+      NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
       z->state->mode = CHECK1;
     case CHECK1:
-      if (z->avail_in == 0) return r;  r = Z_OK;
+      NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE;
+
       if (z->state->sub.check.was != z->state->sub.check.need)
       {
-        z->state->mode = INF_ERROR;
+        z->state->mode = BAD;
         z->msg = "incorrect data check";
-	return Z_DATA_ERROR;
+	z->state->sub.marker = 5;	/* can't try inflateSync */
+	break;
       }
+      Trace((stderr, "inflate: zlib check ok\n"));
       z->state->mode = DONE;
     case DONE:
       return Z_STREAM_END;
-    case INF_ERROR:
+    case BAD:
       return Z_DATA_ERROR;
     default:
       return Z_STREAM_ERROR;
@@ -180,41 +231,46 @@
 }
 
 
-int inflateEnd(z)
-z_stream *z;
-{
-  uLong c;
-
-  if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
-    return Z_STREAM_ERROR;
-  if (z->state->mode == BLOCKS)
-    inflate_blocks_free(z->state->sub.blocks, z, &c);
-  ZFREE(z, z->state);
-  z->state = Z_NULL;
-  return Z_OK;
-}
-
-
-/* inflateSync not implemented yet--this just consumes input */
 int inflateSync(z)
 z_stream *z;
 {
-  if (z == Z_NULL) return Z_STREAM_ERROR;
-  if (z->avail_in == 0) return Z_BUF_ERROR;
-  do {
-    z->total_in++;
-  } while (--z->avail_in);
-  return Z_DATA_ERROR;
-}
+  uInt n;	/* number of bytes to look at */
+  Byte *p;	/* pointer to bytes */
+  uInt m;	/* number of marker bytes found in a row */
+  uLong r, w;	/* temporaries to save total_in and total_out */
 
+  /* set up */
+  if (z == Z_NULL || z->state == Z_NULL)
+    return Z_STREAM_ERROR;
+  if (z->state->mode != BAD)
+    z->state->sub.marker = 0;
+  if ((n = z->avail_in) == 0)
+    return Z_BUF_ERROR;
+  p = z->next_in;
+  m = z->state->sub.marker;
 
-/* inflateReset not fully implemented yet--this frees and reallocates */
-int inflateReset(z)
-z_stream *z;
-{
-  int r;
+  /* search */
+  while (n && m < 4)
+  {
+    if (*p == (m < 2 ? 0 : 0xff))
+      m++;
+    else if (*p || m > 2)
+      m = 0;
+    p++, n--;
+  }
 
-  if ((r = inflateEnd(z)) != Z_OK)
-    return r;
-  return inflateInit(z);
+  /* restore */
+  z->total_in += p - z->next_in;
+  z->next_in = p;
+  z->avail_in = n;
+  z->state->sub.marker = m;
+
+  /* return no joy or set up to restart on a new block */
+  if (m != 4)
+    return Z_DATA_ERROR;
+  r = z->total_in;  w = z->total_out;
+  inflateReset(z);
+  z->total_in = r;  z->total_out = w;
+  z->state->mode = BLOCKS;
+  return Z_OK;
 }
diff --git a/infutil.c b/infutil.c
index 3f687e6..a5902e7 100644
--- a/infutil.c
+++ b/infutil.c
@@ -44,7 +44,9 @@
     s->check = (*s->checkfn)(s->check, q, n);
 
   /* copy as far as end of window */
-  while (n--) *p++ = *q++;
+  zmemcpy(p, q, n);
+  p += n;
+  q += n;
 
   /* see if more to copy at beginning of window */
   if (q == s->end)
@@ -68,7 +70,9 @@
       s->check = (*s->checkfn)(s->check, q, n);
 
     /* copy */
-    while (n--) *p++ = *q++;
+    zmemcpy(p, q, n);
+    p += n;
+    q += n;
   }
 
   /* update pointers */
diff --git a/infutil.h b/infutil.h
index 2aabf3c..f468f1a 100644
--- a/infutil.h
+++ b/infutil.h
@@ -22,7 +22,7 @@
       CODES,	/* processing fixed or dynamic block */
       DRY,	/* output remaining window bytes */
       DONE,	/* finished last block, done */
-      INF_ERROR}/* got a data error--stuck here */
+      BAD}	/* got a data error--stuck here */
     mode;		/* current inflate_block mode */
 
   /* mode dependent information */
@@ -63,13 +63,7 @@
 #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
 #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
 #define NEXTBYTE (n--,*p++)
-#ifdef __TURBOC__ /* bug in TurboC compiler, bad code for b << 0 */
-#  define NEEDBITS(j) {\
-  while(k<(j)){NEEDBYTE;b=k?b|(((uLong)NEXTBYTE)<<k):NEXTBYTE;k+=8;}\
-}
-#else
-#  define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#endif
+#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
 #define DUMPBITS(j) {b>>=(j);k-=(j);}
 /*   output bytes */
 #define WAVAIL (q<s->read?s->read-q-1:s->end-q)
diff --git a/trees.c b/trees.c
index 9234add..eb69d49 100644
--- a/trees.c
+++ b/trees.c
@@ -29,7 +29,7 @@
  *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
  */
 
-/* $Id: trees.c,v 1.3 1995/04/29 13:49:46 jloup Exp $ */
+/* $Id: trees.c,v 1.4 1995/05/01 16:53:44 jloup Exp $ */
 
 #include "deflate.h"
 
@@ -723,6 +723,22 @@
 }
 
 /* ===========================================================================
+ * Send a stored block
+ */
+void ct_stored_block(s, buf, stored_len, eof)
+    deflate_state *s;
+    char *buf;        /* input block */
+    ulg stored_len;   /* length of input block */
+    int eof;          /* true if this is the last block for a file */
+{
+    send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
+    s->compressed_len = (s->compressed_len + 3 + 7) & ~7L;
+    s->compressed_len += (stored_len + 4) << 3;
+
+    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+}
+
+/* ===========================================================================
  * Determine the best encoding for the current block: dynamic trees, static
  * trees or store, and output the encoded block to the zip file. This function
  * returns the total compressed length for the file so far.
@@ -771,8 +787,8 @@
      * the whole file is transformed into a stored file:
      */
 #ifdef STORED_FILE_OK
-#  ifdef FORCE_METHOD
-    if (level == 1 && eof && compressed_len == 0L) { /* force stored file */
+#  ifdef FORCE_STORED_FILE
+    if (eof && compressed_len == 0L) { /* force stored file */
 #  else
     if (stored_len <= opt_lenb && eof && s->compressed_len==0L && seekable()) {
 #  endif
@@ -785,8 +801,8 @@
     } else
 #endif /* STORED_FILE_OK */
 
-#ifdef FORCE_METHOD
-    if (level == 2 && buf != (char*)0) { /* force stored block */
+#ifdef FORCE_STORED
+    if (buf != (char*)0) { /* force stored block */
 #else
     if (stored_len+4 <= opt_lenb && buf != (char*)0) {
                        /* 4: two words for the lengths */
@@ -797,14 +813,10 @@
          * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
          * transform a block into a stored block.
          */
-        send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
-        s->compressed_len = (s->compressed_len + 3 + 7) & ~7L;
-        s->compressed_len += (stored_len + 4) << 3;
+	ct_stored_block(s, buf, stored_len, eof);
 
-        copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
-
-#ifdef FORCE_METHOD
-    } else if (level == 3) { /* force static trees */
+#ifdef FORCE_STATIC
+    } else if (static_lenb >= 0) { /* force static trees */
 #else
     } else if (static_lenb == opt_lenb) {
 #endif
diff --git a/zconf.h b/zconf.h
index bcd8510..4e05a3e 100644
--- a/zconf.h
+++ b/zconf.h
@@ -3,7 +3,7 @@
  * For conditions of distribution and use, see copyright notice in zlib.h 
  */
 
-/* $Id: zconf.h,v 1.9 1995/04/29 12:02:14 jloup Exp $ */
+/* $Id: zconf.h,v 1.10 1995/04/30 19:27:14 jloup Exp $ */
 
 #ifndef _ZCONF_H
 #define _ZCONF_H
@@ -32,10 +32,16 @@
 #  define STDC
 #endif
 
-#ifdef MAXSEG_64K
-#  define MAX_MEM_LEVEL 8
-#else
-#  define MAX_MEM_LEVEL 9
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
 #endif
 
 			/* Type declarations */
@@ -52,7 +58,7 @@
   typedef unsigned char  Byte;  /* 8 bits */
 #endif
 #ifndef uInt
-  typedef unsigned int   uInt;  /* may be 16 or 32 bits */
+  typedef unsigned int   uInt;  /* 16 bits or more */
 #endif
 #ifndef uLong
   typedef unsigned long  uLong; /* 32 bits or more */
diff --git a/zlib.h b/zlib.h
index f72fff8..e64ab91 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1,5 +1,5 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 0.8 April 29th, 1995.
+  version 0.9 April 30th, 1995.
 
   Copyright (C) 1995 Jean-loup Gailly and Mark Adler
 
@@ -28,7 +28,7 @@
 
 #include "zconf.h"
 
-#define ZLIB_VERSION "0.8"
+#define ZLIB_VERSION "0.9"
 
 /* 
      The 'zlib' compression library provides in-memory compression and
@@ -81,7 +81,7 @@
    opaque before calling the init function. All other fields are set by the
    compression library and must not be updated by the application.
 
-   The opaque value provided by the application will be passed as first
+   The opaque value provided by the application will be passed as the first
    parameter for calls of zalloc and zfree. This can be useful for custom
    memory management. The compression library attaches no meaning to the
    opaque value.
@@ -89,7 +89,12 @@
    zalloc must return Z_NULL if there is not enough memory for the object.
    On 16-bit systems, the functions zalloc and zfree must be able to allocate
    exactly 65536 bytes, but will not be required to allocate more than this
-   if the symbol MAXSEG_64K is defined (see zconf.h).
+   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
+   pointers returned by zalloc for objects of exactly 65536 bytes *must*
+   have their offset normalized to zero. The default allocation function
+   provided by this library ensures this (see zutil.c). To reduce memory
+   requirements and avoid any allocation of 64K objects, at the expense of
+   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
 
    The fields total_in and total_out can be used for statistics or
    progress reports. After compression, total_in holds the total size of
@@ -265,7 +270,7 @@
 
     If the parameter flush is set to Z_PARTIAL_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 paramater other than Z_PARTIAL_FLUSH
+  not specified for values of the flush parameter other than Z_PARTIAL_FLUSH
   and Z_FINISH, but the current implementation actually flushes as much output
   as possible anyway.
 
@@ -367,7 +372,7 @@
      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 responsability of the
+   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.
 
@@ -430,12 +435,13 @@
 
 extern int inflateSync __P((z_stream *strm));
 /* 
-    Skips invalid compressed data until the special marker and a valid block
-  can be found, or until all available input is skipped. No output is provided.
+    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.
 
-    inflateSync returns Z_OK if a valid block has been found, Z_BUF_ERROR if
-  no more input was provided, Z_DATA_ERROR if not valid block has been found,
-  Z_STREAM_ERROR if the stream structure was inconsistent. In the success
+    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,
+  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
   application may repeatedly call inflateSync, providing more input each time,
@@ -469,7 +475,7 @@
      Compresses the source buffer into the destination buffer.  sourceLen is
    the byte length of the source buffer. Upon entry, destLen is the total
    size of the destination buffer, which must be at least 0.1% larger than
-   sourceLen plus 8 bytes. Upon exit, destLen is the actual size of the
+   sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
    compressed buffer.
      This function can be used to compress a whole file at once if the
    input file is mmap'ed.
@@ -505,7 +511,7 @@
    is as in fopen ("rb" or "wb"). gzopen can also 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 return NULL if the file could not be opened or if there was
+     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).
@@ -516,7 +522,7 @@
      gzdopen() associates a gzFile with the file descriptor fd.  File
    descriptors are obtained from calls like open, dup, creat, or pipe.
    The mode parameter is as in fopen ("rb" or "wb").
-     gzdopen return NULL if there was insufficient memory to allocate
+     gzdopen returns NULL if there was insufficient memory to allocate
    the (de)compression state.
 */
 
@@ -574,7 +580,7 @@
      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
    return the updated checksum. If buf is NULL, this function returns
    the required initial value for the checksum.
-   An Adler-32 cheksum is almost as reliable as a CRC32 but can be computed
+   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
    much faster. Usage example:
 
      uLong adler = adler32(0L, Z_NULL, 0);
diff --git a/zutil.h b/zutil.h
index 88f5961..a4b00a0 100644
--- a/zutil.h
+++ b/zutil.h
@@ -8,7 +8,7 @@
    subject to change. Applications should only use zlib.h.
  */
 
-/* $Id: zutil.h,v 1.6 1995/04/29 15:52:16 jloup Exp $ */
+/* $Id: zutil.h,v 1.7 1995/04/30 10:55:33 jloup Exp $ */
 
 #ifndef _Z_UTIL_H
 #define _Z_UTIL_H
@@ -42,13 +42,8 @@
 
 #define DEFLATED   8
 
-#ifndef WBITS
-# define WBITS   15 /* 32K window */
-#endif
-
-#ifndef MEM_LEVEL
-# define MEM_LEVEL  8
-#endif
+#define DEF_WBITS 15
+/* default WBITS for decompression. MAX_WBITS is useful for compression only */
 
 #define STORED_BLOCK 0
 #define STATIC_TREES 1
