zlib 0.91
diff --git a/ChangeLog b/ChangeLog
index 54470f2..e97948e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
ChangeLog file for zlib
+Changes in 0.91 (2 May 95)
+- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
+- Document the memory requirements in zconf.h
+- added "make install"
+- fix sync search logic in inflateSync
+- deflate(Z_FULL_FLUSH) now works even if output buffer too short
+- after inflateSync, don't scare people with just "lo world"
+- added support for DJGPP
+
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 :)
@@ -10,6 +19,7 @@
- document explicitly that zalloc(64K) on MSDOS must return a normalized
pointer (zero offset)
- added Makefiles for Microsoft C, Turbo C, Borland C++
+- faster crc32()
Changes in 0.8 (29 April 95)
- added fast inflate (inffast.c)
diff --git a/Makefile b/Makefile
index f251670..9a48249 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,17 @@
+# Makefile for zlib
+# Copyright (C) 1995 Jean-loup Gailly.
+# For conditions of distribution and use, see copyright notice in zlib.h
+
CC=cc
CFLAGS=-O
+#CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
#CFLAGS=-g -DDEBUG
LDFLAGS=-L. -lgz
RANLIB=ranlib
+prefix=/usr/local
+
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
@@ -16,6 +23,14 @@
./example
echo hello world | ./minigzip | ./minigzip -d
+install: libgz.a
+ -@mkdir $(prefix)/include
+ -@mkdir $(prefix)/lib
+ cp zlib.h zconf.h $(prefix)/include
+ chmod 644 $(prefix)/include/zlib.h $(prefix)/include/zconf.h
+ cp libgz.a $(prefix)/lib
+ chmod 644 $(prefix)/lib/libgz.a
+
libgz.a: $(OBJS)
ar rc $@ $(OBJS)
$(RANLIB) $@
diff --git a/Makefile.bak b/Makefile.bak
deleted file mode 100644
index bfe1b74..0000000
--- a/Makefile.bak
+++ /dev/null
@@ -1,59 +0,0 @@
-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
index 877ed62..732ea5d 100644
--- a/Makefile.bor
+++ b/Makefile.bor
@@ -4,7 +4,10 @@
# To use, do "make -fmakefile.bor"
# WARNING: the small model is supported but only for small values of
-# MAX_WBITS and MAX_MEM_LEVEL
+# MAX_WBITS and MAX_MEM_LEVEL. If you wish to reduce the memory
+# requirements (default 256K for big objects plus a few K), you can add
+# to CFLAGS below: -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
+# See zconf.h for details about the memory requirements.
# ------------- Turbo C++, Borland C++ -------------
MODEL=-ml
diff --git a/Makefile.msc b/Makefile.msc
index 375d21c..d6899d8 100644
--- a/Makefile.msc
+++ b/Makefile.msc
@@ -4,7 +4,10 @@
# To use, do "make makefile.msc"
# WARNING: the small model is supported but only for small values of
-# MAX_WBITS and MAX_MEM_LEVEL
+# MAX_WBITS and MAX_MEM_LEVEL. If you wish to reduce the memory
+# requirements (default 256K for big objects plus a few K), you can add
+# to CFLAGS below: -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
+# See zconf.h for details about the memory requirements.
# ------------- Microsoft C 5.1 and later -------------
MODEL=-AL
diff --git a/Makefile.tc b/Makefile.tc
index 51075f7..e173a55 100644
--- a/Makefile.tc
+++ b/Makefile.tc
@@ -4,7 +4,10 @@
# To use, do "make -fmakefile.tc"
# WARNING: the small model is supported but only for small values of
-# MAX_WBITS and MAX_MEM_LEVEL
+# MAX_WBITS and MAX_MEM_LEVEL. If you wish to reduce the memory
+# requirements (default 256K for big objects plus a few K), you can add
+# to CFLAGS below: -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
+# See zconf.h for details about the memory requirements.
# ------------- Turbo C 2.0 -------------
MODEL=-ml
diff --git a/README b/README
index 0c718f1..caeccb9 100644
--- a/README
+++ b/README
@@ -1,25 +1,31 @@
-zlib 0.9 is a beta version of a general purpose compression library.
+zlib 0.91 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
+files zlib-3.1.doc, deflate-1.1.doc and gzip-4.1.doc, available
in ftp.uu.net:/pub/archiving/zip/doc.
All functions of the compression library are documented in the file
zlib.h. A usage example of the library is given in the file example.c
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.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
+To compile all files and run the test program, just type: make test
+(For MSDOS, use one of the special makefiles such as Makefile.msc.)
+To install the zlib library (libgz.a) in /usr/local/lib, type: make install
+To install in a different directory, use for example: make install prefix=$HOME
+This will install in $HOME/lib instead of /usr/local/lib.
+
+The changes made in version 0.91 are documented in the file ChangeLog.
+The main changes since 0.9 are:
+- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
+- Document the memory requirements in zconf.h
+- added "make install"
+- added support for DJGPP
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 support small or medium model with far
-allocation of big objects.
+small model compression works only for small values of MAX_MEM_LEVEL
+and MAX_WBITS (see zconf.h). Small model decompression should work up
+to MAX_WBITS=15. 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/deflate.c b/deflate.c
index 75db3d0..b65ba25 100644
--- a/deflate.c
+++ b/deflate.c
@@ -47,7 +47,7 @@
*
*/
-/* $Id: deflate.c,v 1.6 1995/05/01 17:23:57 jloup Exp $ */
+/* $Id: deflate.c,v 1.7 1995/05/02 13:28:18 jloup Exp $ */
#include "deflate.h"
@@ -165,7 +165,7 @@
z_stream *strm;
int level;
{
- return deflateInit2 (strm, level, DEFLATED, MAX_WBITS, MAX_MEM_LEVEL, 0);
+ return deflateInit2 (strm, level, DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, 0);
/* To do: ignore strm->next_in if we use it as window */
}
@@ -344,22 +344,23 @@
*/
if (strm->avail_in != 0 ||
(flush == Z_FINISH && strm->state->status != FINISH_STATE)) {
+ int quit;
if (flush == Z_FINISH) {
strm->state->status = FINISH_STATE;
}
if (strm->state->level <= 3) {
- if (deflate_fast(strm->state, flush)) return Z_OK;
+ quit = deflate_fast(strm->state, flush);
} else {
- if (deflate_slow(strm->state, flush)) return Z_OK;
+ quit = deflate_slow(strm->state, flush);
}
- /* ??? 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;
}
+ if (quit) return Z_OK;
}
Assert(strm->avail_out > 0, "bug2");
diff --git a/example.c b/example.c
index c1bac1e..5c34733 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.7 1995/05/01 16:57:22 jloup Exp $ */
+/* $Id: example.c,v 1.8 1995/05/02 15:52:32 jloup Exp $ */
#include <stdio.h>
#include "zlib.h"
@@ -12,7 +12,9 @@
# include <string.h>
#endif
+#ifndef __GO32__
extern void exit __P((int));
+#endif
#define BUFLEN 4096
@@ -253,7 +255,7 @@
err = inflateEnd(&d_stream);
CHECK_ERR(err, "inflateEnd");
- printf("after inflateSync(): %s\n", uncompr);
+ printf("after inflateSync(): hel%s\n", uncompr);
}
/* ===========================================================================
diff --git a/gzio.c b/gzio.c
index 1f5e130..7a3d05a 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.6 1995/04/30 19:52:21 jloup Exp $ */
+/* $Id: gzio.c,v 1.7 1995/05/02 12:22:08 jloup Exp $ */
#include <stdio.h>
@@ -128,7 +128,7 @@
if (s->mode == 'w') {
err = deflateInit2(&(s->stream), Z_DEFAULT_COMPRESSION,
- DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, 0);
+ DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0);
/* windowBits is passed < 0 to suppress zlib header */
s->stream.next_out = s->outbuf = ALLOC(Z_BUFSIZE);
@@ -221,7 +221,7 @@
char *mode;
{
char name[20];
- sprintf(name, "_fd:%d_", fd); /* for debugging */
+ sprintf(name, "<fd:%d>", fd); /* for debugging */
return gz_open (name, mode, fd);
}
diff --git a/inflate.c b/inflate.c
index bed4e54..0b0ee87 100644
--- a/inflate.c
+++ b/inflate.c
@@ -145,7 +145,7 @@
{
case METHOD:
NEEDBYTE
- if (((z->state->sub.method = NEXTBYTE) & 0xf != DEFLATED))
+ if (((z->state->sub.method = NEXTBYTE) & 0xf) != DEFLATED)
{
z->state->mode = BAD;
z->msg = "unknown compression method";
@@ -243,7 +243,10 @@
if (z == Z_NULL || z->state == Z_NULL)
return Z_STREAM_ERROR;
if (z->state->mode != BAD)
+ {
+ z->state->mode = BAD;
z->state->sub.marker = 0;
+ }
if ((n = z->avail_in) == 0)
return Z_BUF_ERROR;
p = z->next_in;
@@ -252,10 +255,12 @@
/* search */
while (n && m < 4)
{
- if (*p == (m < 2 ? 0 : 0xff))
+ if (*p == (Byte)(m < 2 ? 0 : 0xff))
m++;
- else if (*p || m > 2)
+ else if (*p)
m = 0;
+ else
+ m = 4 - m;
p++, n--;
}
diff --git a/minigzip.c b/minigzip.c
index d3d2fe9..8f58080 100644
--- a/minigzip.c
+++ b/minigzip.c
@@ -13,12 +13,14 @@
* or in pipe mode.
*/
-/* $Id: minigzip.c,v 1.3 1995/04/29 14:27:21 jloup Exp $ */
+/* $Id: minigzip.c,v 1.4 1995/05/02 15:54:22 jloup Exp $ */
#include <stdio.h>
#include "zlib.h"
+#ifndef __GO32__
extern void exit __P((int));
+#endif
extern int unlink __P((const char *));
#ifdef STDC
diff --git a/zconf.h b/zconf.h
index 4e05a3e..1abb0ea 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.10 1995/04/30 19:27:14 jloup Exp $ */
+/* $Id: zconf.h,v 1.11 1995/05/02 13:07:21 jloup Exp $ */
#ifndef _ZCONF_H
#define _ZCONF_H
@@ -32,6 +32,7 @@
# define STDC
#endif
+/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
# ifdef MAXSEG_64K
# define MAX_MEM_LEVEL 8
@@ -40,10 +41,24 @@
# endif
#endif
+/* Maximum value for windowBits in deflateInit2 and inflateInit2 */
#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)
+ 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
+ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+ The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
/* Type declarations */
#ifndef __P /* function prototypes */
diff --git a/zlib.h b/zlib.h
index e64ab91..1712209 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1,5 +1,5 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 0.9 April 30th, 1995.
+ version 0.91 May 2nd, 1995.
Copyright (C) 1995 Jean-loup Gailly and Mark Adler
@@ -28,7 +28,7 @@
#include "zconf.h"
-#define ZLIB_VERSION "0.9"
+#define ZLIB_VERSION "0.91"
/*
The 'zlib' compression library provides in-memory compression and
@@ -335,7 +335,8 @@
The memLevel parameter specifies how much memory should be allocated
for the internal compression state. memLevel=1 uses minimum memory but
is slow and reduces compression ratio; memLevel=9 uses maximum memory
- for optimal speed. The default value is 8.
+ for optimal speed. The default value is 8. See zconf.h for total memory
+ usage as a function of windowBits and memLevel.
The strategy parameter is used to tune the compression algorithm. Use
the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data
diff --git a/zutil.c b/zutil.c
index 4ceb89f..508ad62 100644
--- a/zutil.c
+++ b/zutil.c
@@ -3,13 +3,15 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-/* $Id: zutil.c,v 1.6 1995/04/29 14:54:02 jloup Exp $ */
+/* $Id: zutil.c,v 1.7 1995/05/02 15:54:47 jloup Exp $ */
#include <stdio.h>
#include "zutil.h"
+#ifndef __GO32__
extern void exit __P((int));
+#endif
char *zlib_version = ZLIB_VERSION;
@@ -55,8 +57,9 @@
}
#endif
-#if defined(MSDOS) && !defined(__SMALL__) && !defined(M_I86SM)
-# ifdef __TURBOC__
+#if defined(__TURBOC__) && !defined(__SMALL__)
+
+# define MY_ZCALLOC
/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
* and farmalloc(64K) returns a pointer with an offset of 8, so we
@@ -124,8 +127,11 @@
ptr = opaque; /* just to make some compilers happy */
z_error("zcfree: ptr not found");
}
+#endif /* __TURBOC__ */
-# else /* MSC */
+#if defined(M_I86CM) || defined(M_I86LM) /* MSC compact or large model */
+
+# define MY_ZCALLOC
#if (!defined(_MSC_VER) || (_MSC_VER < 600))
# define _halloc halloc
@@ -144,12 +150,15 @@
_hfree(ptr);
}
-# endif /* __TURBOC__ ? */
+#endif /* defined(M_I86CM) || defined(M_I86LM) */
-#else /* !MSDOS */
+#ifndef MY_ZCALLOC /* Any system without a special alloc function */
+
+#ifndef __GO32__
extern voidp calloc __P((uInt items, uInt size));
extern void free __P((voidp ptr));
+#endif
voidp zcalloc (opaque, items, size)
voidp opaque;
@@ -166,4 +175,4 @@
free(ptr);
}
-#endif /* MSDOS */
+#endif /* MY_ZCALLOC */
diff --git a/zutil.h b/zutil.h
index a4b00a0..503a445 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.7 1995/04/30 10:55:33 jloup Exp $ */
+/* $Id: zutil.h,v 1.8 1995/05/02 15:44:46 jloup Exp $ */
#ifndef _Z_UTIL_H
#define _Z_UTIL_H
@@ -17,6 +17,7 @@
#ifdef MSDOS
# include <stddef.h>
+# include <errno.h>
#else
extern int errno;
#endif
@@ -43,7 +44,14 @@
#define DEFLATED 8
#define DEF_WBITS 15
-/* default WBITS for decompression. MAX_WBITS is useful for compression only */
+/* default windowBits for decompression. MAX_WBITS is for compression only */
+
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+/* default memLevel */
#define STORED_BLOCK 0
#define STATIC_TREES 1