Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 4ca984fb44 | 
| @@ -1,9 +1,14 @@ | |||||||
| 		ChangeLog file for zlib | 		ChangeLog file for zlib | ||||||
|  |  | ||||||
| Changes in 0.79 (28 April 95) | Changes in 0.8 (29 April 95) | ||||||
| - add fast inflate (inffast.c) | - 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) | ||||||
|  | - gzread no longer reads one extra byte in certain cases | ||||||
| - In gzio destroy(), don't reference a freed structure | - In gzio destroy(), don't reference a freed structure | ||||||
| - avoid many warnings for MSDOS | - avoid many warnings for MSDOS | ||||||
|  | - avoid the ERROR symbol which is used by MS Windows | ||||||
|  |  | ||||||
| Changes in 0.71 (14 April 95) | Changes in 0.71 (14 April 95) | ||||||
| - Fixed more MSDOS compilation problems :( There is still a bug with | - Fixed more MSDOS compilation problems :( There is still a bug with | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								README
									
									
									
									
									
								
							| @@ -1,4 +1,6 @@ | |||||||
| zlib 0.79 is a beta version of a general purpose compression library. | 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.) | ||||||
|  |  | ||||||
| The data format used by the zlib library is described in the | 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 | file zlib-3.1.doc, deflate-1.1.doc and gzip-4.1.doc, available | ||||||
| @@ -9,15 +11,18 @@ zlib.h. A usage example of the library is given in the file example.c | |||||||
| which also tests that the library is working correctly. | which also tests that the library is working correctly. | ||||||
| To compile all files and run the test program, just type: make test | To compile all files and run the test program, just type: make test | ||||||
|  |  | ||||||
| The changes made in version 0.79 are documented in the file ChangeLog. | The changes made in version 0.8 are documented in the file ChangeLog. | ||||||
| The main changes since 0.71 are: | The main changes since 0.71 are: | ||||||
| - add fast inflate (inffast.c) | - added fast inflate (inffast.c) | ||||||
| - In gzio destroy(), don't reference a freed structure | - 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 | ||||||
|  |  | ||||||
| On MSDOS, this version works in large and small model with MSC; in | On MSDOS, this version works in both large and small model. However | ||||||
| small model only with TurboC (bug being investigated). For both | small model compression works only for small values of MEM_LEVEL and | ||||||
| compilers, small model compression works only for small values of | WBITS (see zutil.h). Small model decompression should work up to WBITS=15. | ||||||
| MEM_LEVEL and WBITS (see zutil.h), and requires -DUSE_CALLOC. | This version of zlib does not yet support small or medium model with | ||||||
|  | far allocation of big objects. | ||||||
|  |  | ||||||
|  |  | ||||||
|   Copyright (C) 1995 Jean-loup Gailly and Mark Adler |   Copyright (C) 1995 Jean-loup Gailly and Mark Adler | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
|  * For conditions of distribution and use, see copyright notice in zlib.h  |  * For conditions of distribution and use, see copyright notice in zlib.h  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: compress.c,v 1.4 1995/04/10 15:52:04 jloup Exp $ */ | /* $Id: compress.c,v 1.5 1995/04/29 17:18:43 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include "zlib.h" | #include "zlib.h" | ||||||
|  |  | ||||||
| @@ -44,9 +44,9 @@ int compress (dest, destLen, source, sourceLen) | |||||||
|     if (err != Z_OK) return err; |     if (err != Z_OK) return err; | ||||||
|  |  | ||||||
|     err = deflate(&stream, Z_FINISH); |     err = deflate(&stream, Z_FINISH); | ||||||
|     if (err != Z_OK) { |     if (err != Z_STREAM_END) { | ||||||
| 	deflateEnd(&stream); | 	deflateEnd(&stream); | ||||||
| 	return err; | 	return err == Z_OK ? Z_BUF_ERROR : err; | ||||||
|     } |     } | ||||||
|     *destLen = stream.total_out; |     *destLen = stream.total_out; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								deflate.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								deflate.c
									
									
									
									
									
								
							| @@ -47,7 +47,7 @@ | |||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: deflate.c,v 1.4 1995/04/14 19:49:46 jloup Exp $ */ | /* $Id: deflate.c,v 1.5 1995/04/29 16:52:05 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include "deflate.h" | #include "deflate.h" | ||||||
|  |  | ||||||
| @@ -117,8 +117,10 @@ local void fill_window   __P((deflate_state *s)); | |||||||
| local int  deflate_fast  __P((deflate_state *s, int flush)); | local int  deflate_fast  __P((deflate_state *s, int flush)); | ||||||
| local int  deflate_slow  __P((deflate_state *s, int flush)); | local int  deflate_slow  __P((deflate_state *s, int flush)); | ||||||
| local void lm_init       __P((deflate_state *s)); | local void lm_init       __P((deflate_state *s)); | ||||||
|  |  | ||||||
| local int  longest_match __P((deflate_state *s, IPos cur_match)); | local int  longest_match __P((deflate_state *s, IPos cur_match)); | ||||||
|  | local void putShortMSB   __P((deflate_state *s, uInt b)); | ||||||
|  | local void flush_pending __P((z_stream *strm)); | ||||||
|  | local int read_buf       __P((z_stream *strm, char *buf, unsigned size)); | ||||||
| #ifdef ASMV | #ifdef ASMV | ||||||
|       void match_init __P((void)); /* asm code initialization */ |       void match_init __P((void)); /* asm code initialization */ | ||||||
| #endif | #endif | ||||||
| @@ -225,7 +227,7 @@ int deflateInit2 (strm, level, method, windowBits, memLevel, strategy) | |||||||
|  |  | ||||||
|     s->level = level; |     s->level = level; | ||||||
|     s->strategy = strategy; |     s->strategy = strategy; | ||||||
|     s->method = method; |     s->method = (Byte)method; | ||||||
|  |  | ||||||
|     return deflateReset(strm); |     return deflateReset(strm); | ||||||
| } | } | ||||||
| @@ -265,8 +267,8 @@ local void putShortMSB (s, b) | |||||||
|     deflate_state *s; |     deflate_state *s; | ||||||
|     uInt b; |     uInt b; | ||||||
| { | { | ||||||
|     put_byte(s, b >> 8); |     put_byte(s, (Byte)(b >> 8)); | ||||||
|     put_byte(s, b & 0xff); |     put_byte(s, (Byte)(b & 0xff)); | ||||||
| }    | }    | ||||||
|  |  | ||||||
| /* ========================================================================= | /* ========================================================================= | ||||||
| @@ -346,17 +348,18 @@ int deflate (strm, flush) | |||||||
|     } |     } | ||||||
|     Assert(strm->avail_out > 0, "bug2"); |     Assert(strm->avail_out > 0, "bug2"); | ||||||
|  |  | ||||||
|     if (flush != Z_FINISH || strm->state->noheader) return Z_OK; |     if (flush != Z_FINISH) return Z_OK; | ||||||
|  |     if (strm->state->noheader) return Z_STREAM_END; | ||||||
|  |  | ||||||
|     /* Write the zlib trailer (adler32) */ |     /* Write the zlib trailer (adler32) */ | ||||||
|     putShortMSB(strm->state, strm->state->adler >> 16); |     putShortMSB(strm->state, (uInt)(strm->state->adler >> 16)); | ||||||
|     putShortMSB(strm->state, strm->state->adler & 0xffff); |     putShortMSB(strm->state, (uInt)(strm->state->adler & 0xffff)); | ||||||
|     flush_pending(strm); |     flush_pending(strm); | ||||||
|     /* If avail_out is zero, the application will call deflate again |     /* If avail_out is zero, the application will call deflate again | ||||||
|      * to flush the rest. |      * to flush the rest. | ||||||
|      */ |      */ | ||||||
|     strm->state->noheader = 1; /* write the trailer only once! */ |     strm->state->noheader = 1; /* write the trailer only once! */ | ||||||
|     return Z_OK; |     return strm->state->pending != 0 ? Z_OK : Z_STREAM_END; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* ========================================================================= */ | /* ========================================================================= */ | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								example.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								example.c
									
									
									
									
									
								
							| @@ -3,11 +3,17 @@ | |||||||
|  * For conditions of distribution and use, see copyright notice in zlib.h  |  * For conditions of distribution and use, see copyright notice in zlib.h  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: example.c,v 1.5 1995/04/14 20:35:56 jloup Exp $ */ | /* $Id: example.c,v 1.6 1995/04/29 16:53:46 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include "zlib.h" | #include "zlib.h" | ||||||
|  |  | ||||||
|  | #ifdef STDC | ||||||
|  | #  include <string.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | extern void exit  __P((int)); | ||||||
|  |  | ||||||
| #define BUFLEN 4096 | #define BUFLEN 4096 | ||||||
|  |  | ||||||
| #define local static | #define local static | ||||||
| @@ -25,6 +31,12 @@ | |||||||
|  |  | ||||||
| char *hello = "hello world"; | char *hello = "hello world"; | ||||||
|  |  | ||||||
|  | void test_compress __P((void)); | ||||||
|  | void test_gzio     __P((char *out, char *in)); | ||||||
|  | void test_deflate  __P((Byte compr[])); | ||||||
|  | void test_inflate  __P((Byte compr[])); | ||||||
|  | void main          __P((int argc, char *argv[])); | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
|  * Test compress() and uncompress() |  * Test compress() and uncompress() | ||||||
|  */ |  */ | ||||||
| @@ -37,15 +49,15 @@ void test_compress() | |||||||
|     int err; |     int err; | ||||||
|     uLong len = strlen(hello)+1; |     uLong len = strlen(hello)+1; | ||||||
|  |  | ||||||
|     err = compress(compr, &comprLen, hello, len); |     err = compress(compr, &comprLen, (Byte*)hello, len); | ||||||
|     CHECK_ERR(err, "compress"); |     CHECK_ERR(err, "compress"); | ||||||
|  |  | ||||||
|     strcpy(uncompr, "garbage"); |     strcpy((char*)uncompr, "garbage"); | ||||||
|  |  | ||||||
|     err = uncompress(uncompr, &uncomprLen, compr, comprLen); |     err = uncompress(uncompr, &uncomprLen, compr, comprLen); | ||||||
|     CHECK_ERR(err, "uncompress"); |     CHECK_ERR(err, "uncompress"); | ||||||
|  |  | ||||||
|     if (strcmp(uncompr, hello)) { |     if (strcmp((char*)uncompr, hello)) { | ||||||
| 	fprintf(stderr, "bad uncompress\n"); | 	fprintf(stderr, "bad uncompress\n"); | ||||||
|     } else { |     } else { | ||||||
| 	printf("uncompress(): %s\n", uncompr); | 	printf("uncompress(): %s\n", uncompr); | ||||||
| @@ -80,7 +92,7 @@ void test_gzio(out, in) | |||||||
|     if (file == NULL) { |     if (file == NULL) { | ||||||
| 	fprintf(stderr, "gzopen error\n"); | 	fprintf(stderr, "gzopen error\n"); | ||||||
|     } |     } | ||||||
|     strcpy(uncompr, "garbage"); |     strcpy((char*)uncompr, "garbage"); | ||||||
|  |  | ||||||
|     uncomprLen = gzread(file, uncompr, uncomprLen); |     uncomprLen = gzread(file, uncompr, uncomprLen); | ||||||
|     if (uncomprLen != len) { |     if (uncomprLen != len) { | ||||||
| @@ -88,7 +100,7 @@ void test_gzio(out, in) | |||||||
|     } |     } | ||||||
|     gzclose(file); |     gzclose(file); | ||||||
|  |  | ||||||
|     if (strcmp(uncompr, hello)) { |     if (strcmp((char*)uncompr, hello)) { | ||||||
| 	fprintf(stderr, "bad gzread\n"); | 	fprintf(stderr, "bad gzread\n"); | ||||||
|     } else { |     } else { | ||||||
| 	printf("gzread(): %s\n", uncompr); | 	printf("gzread(): %s\n", uncompr); | ||||||
| @@ -96,9 +108,9 @@ void test_gzio(out, in) | |||||||
| } | } | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
|  * Test deflate() with small buffers, return the compressed length. |  * Test deflate() with small buffers | ||||||
|  */ |  */ | ||||||
| uLong test_deflate(compr) | void test_deflate(compr) | ||||||
|     Byte compr[]; |     Byte compr[]; | ||||||
| { | { | ||||||
|     z_stream c_stream; /* compression stream */ |     z_stream c_stream; /* compression stream */ | ||||||
| @@ -120,16 +132,15 @@ uLong test_deflate(compr) | |||||||
| 	CHECK_ERR(err, "deflate"); | 	CHECK_ERR(err, "deflate"); | ||||||
|     } |     } | ||||||
|     /* Finish the stream, still forcing small buffers: */ |     /* Finish the stream, still forcing small buffers: */ | ||||||
|     do { |     for (;;) { | ||||||
| 	c_stream.avail_out = 1; | 	c_stream.avail_out = 1; | ||||||
| 	err = deflate(&c_stream, Z_FINISH); | 	err = deflate(&c_stream, Z_FINISH); | ||||||
|  | 	if (err == Z_STREAM_END) break; | ||||||
| 	CHECK_ERR(err, "deflate"); | 	CHECK_ERR(err, "deflate"); | ||||||
|     } while (c_stream.avail_out == 0); |     } | ||||||
|  |  | ||||||
|     err = deflateEnd(&c_stream); |     err = deflateEnd(&c_stream); | ||||||
|     CHECK_ERR(err, "deflateEnd"); |     CHECK_ERR(err, "deflateEnd"); | ||||||
|  |  | ||||||
|     return c_stream.total_out; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
| @@ -142,7 +153,7 @@ void test_inflate(compr) | |||||||
|     int err; |     int err; | ||||||
|     z_stream d_stream; /* decompression stream */ |     z_stream d_stream; /* decompression stream */ | ||||||
|  |  | ||||||
|     strcpy(uncompr, "garbage"); |     strcpy((char*)uncompr, "garbage"); | ||||||
|  |  | ||||||
|     d_stream.zalloc = (alloc_func)0; |     d_stream.zalloc = (alloc_func)0; | ||||||
|     d_stream.zfree = (free_func)0; |     d_stream.zfree = (free_func)0; | ||||||
| @@ -163,7 +174,7 @@ void test_inflate(compr) | |||||||
|     err = inflateEnd(&d_stream); |     err = inflateEnd(&d_stream); | ||||||
|     CHECK_ERR(err, "inflateEnd"); |     CHECK_ERR(err, "inflateEnd"); | ||||||
|  |  | ||||||
|     if (strcmp(uncompr, hello)) { |     if (strcmp((char*)uncompr, hello)) { | ||||||
| 	fprintf(stderr, "bad inflate\n"); | 	fprintf(stderr, "bad inflate\n"); | ||||||
|     } else { |     } else { | ||||||
| 	printf("inflate(): %s\n", uncompr); | 	printf("inflate(): %s\n", uncompr); | ||||||
| @@ -179,7 +190,6 @@ void main(argc, argv) | |||||||
|     char *argv[]; |     char *argv[]; | ||||||
| { | { | ||||||
|     local Byte compr[BUFLEN]; |     local Byte compr[BUFLEN]; | ||||||
|     uLong comprLen; |  | ||||||
|  |  | ||||||
|     if (zlib_version[0] != ZLIB_VERSION[0]) { |     if (zlib_version[0] != ZLIB_VERSION[0]) { | ||||||
| 	fprintf(stderr, "incompatible zlib version\n"); | 	fprintf(stderr, "incompatible zlib version\n"); | ||||||
| @@ -193,7 +203,7 @@ void main(argc, argv) | |||||||
|     test_gzio((argc > 1 ? argv[1] : "foo.gz"), |     test_gzio((argc > 1 ? argv[1] : "foo.gz"), | ||||||
| 	      (argc > 2 ? argv[2] : "foo.gz")); | 	      (argc > 2 ? argv[2] : "foo.gz")); | ||||||
|  |  | ||||||
|     comprLen = test_deflate(compr); |     test_deflate(compr); | ||||||
|  |  | ||||||
|     test_inflate(compr); |     test_inflate(compr); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								gzio.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								gzio.c
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ | |||||||
|  * For conditions of distribution and use, see copyright notice in zlib.h |  * For conditions of distribution and use, see copyright notice in zlib.h | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: gzio.c,v 1.4 1995/04/14 14:50:52 jloup Exp $ */ | /* $Id: gzio.c,v 1.5 1995/04/29 17:13:56 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| @@ -46,7 +46,12 @@ typedef struct gz_stream { | |||||||
| } gz_stream; | } gz_stream; | ||||||
|  |  | ||||||
|  |  | ||||||
| /* =========================================================================== | local int    destroy __P((gz_stream *s)); | ||||||
|  | local gzFile gz_open __P((char *path, char *mode, int  fd)); | ||||||
|  | local void   putLong __P((FILE *file, uLong x)); | ||||||
|  | local uLong  getLong __P((Byte *buf)); | ||||||
|  |  | ||||||
|  |  /* =========================================================================== | ||||||
|  * Cleanup then free the given gz_stream. Return a zlib error code. |  * Cleanup then free the given gz_stream. Return a zlib error code. | ||||||
|  */ |  */ | ||||||
| local int destroy (s) | local int destroy (s) | ||||||
| @@ -339,7 +344,7 @@ int gzflush (file, flush) | |||||||
| 	if (len != 0) { | 	if (len != 0) { | ||||||
| 	    if (fwrite(s->outbuf, 1, len, s->file) != len) { | 	    if (fwrite(s->outbuf, 1, len, s->file) != len) { | ||||||
| 		s->z_err = Z_ERRNO; | 		s->z_err = Z_ERRNO; | ||||||
| 		break; | 		return Z_ERRNO; | ||||||
| 	    } | 	    } | ||||||
| 	    s->stream.next_out = s->outbuf; | 	    s->stream.next_out = s->outbuf; | ||||||
| 	    s->stream.avail_out = Z_BUFSIZE; | 	    s->stream.avail_out = Z_BUFSIZE; | ||||||
| @@ -347,14 +352,14 @@ int gzflush (file, flush) | |||||||
| 	if (done) break; | 	if (done) break; | ||||||
| 	s->z_err = deflate(&(s->stream), flush); | 	s->z_err = deflate(&(s->stream), flush); | ||||||
|  |  | ||||||
| 	if (s->z_err != Z_OK) break; |         /* deflate has finished flushing only when it hasn't used up | ||||||
|  |  | ||||||
| 	/* deflate has finished flushing only when it hasn't used up |  | ||||||
|          * all the available space in the output buffer:  |          * all the available space in the output buffer:  | ||||||
|          */ |          */ | ||||||
| 	done = (s->stream.avail_out != 0); |         done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); | ||||||
|  |   | ||||||
|  | 	if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; | ||||||
|     } |     } | ||||||
|     return s->z_err; |     return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
| @@ -395,12 +400,15 @@ int gzclose (file) | |||||||
|     gzFile file; |     gzFile file; | ||||||
| { | { | ||||||
|     uInt n; |     uInt n; | ||||||
|  |     int err; | ||||||
|     gz_stream *s = (gz_stream*)file; |     gz_stream *s = (gz_stream*)file; | ||||||
|  |  | ||||||
|     if (s == NULL) return Z_STREAM_ERROR; |     if (s == NULL) return Z_STREAM_ERROR; | ||||||
|  |  | ||||||
|     if (s->mode == 'w') { |     if (s->mode == 'w') { | ||||||
| 	gzflush (file, Z_FINISH); | 	err = gzflush (file, Z_FINISH); | ||||||
|  | 	if (err != Z_OK) return destroy(file); | ||||||
|  |  | ||||||
| 	putLong (s->file, s->crc); | 	putLong (s->file, s->crc); | ||||||
| 	putLong (s->file, s->stream.total_in); | 	putLong (s->file, s->stream.total_in); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								infblock.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								infblock.c
									
									
									
									
									
								
							| @@ -139,7 +139,7 @@ int r; | |||||||
| 	  break; | 	  break; | ||||||
| 	case 3:				/* illegal */ | 	case 3:				/* illegal */ | ||||||
| 	  DUMPBITS(3) | 	  DUMPBITS(3) | ||||||
| 	  s->mode = ERROR; | 	  s->mode = INF_ERROR; | ||||||
| 	  z->msg = "invalid block type"; | 	  z->msg = "invalid block type"; | ||||||
| 	  r = Z_DATA_ERROR; | 	  r = Z_DATA_ERROR; | ||||||
| 	  LEAVE | 	  LEAVE | ||||||
| @@ -149,7 +149,7 @@ int r; | |||||||
|       NEEDBITS(32) |       NEEDBITS(32) | ||||||
|       if ((~b) >> 16 != (b & 0xffff)) |       if ((~b) >> 16 != (b & 0xffff)) | ||||||
|       { |       { | ||||||
|         s->mode = ERROR; |         s->mode = INF_ERROR; | ||||||
| 	z->msg = "invalid stored block lengths"; | 	z->msg = "invalid stored block lengths"; | ||||||
| 	r = Z_DATA_ERROR; | 	r = Z_DATA_ERROR; | ||||||
| 	LEAVE | 	LEAVE | ||||||
| @@ -172,7 +172,7 @@ int r; | |||||||
| #ifndef PKZIP_BUG_WORKAROUND | #ifndef PKZIP_BUG_WORKAROUND | ||||||
|       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) |       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) | ||||||
|       { |       { | ||||||
|         s->mode = ERROR; |         s->mode = INF_ERROR; | ||||||
|         z->msg = "too many length or distance symbols"; |         z->msg = "too many length or distance symbols"; | ||||||
| 	r = Z_DATA_ERROR; | 	r = Z_DATA_ERROR; | ||||||
| 	LEAVE | 	LEAVE | ||||||
| @@ -205,7 +205,7 @@ int r; | |||||||
|       { |       { | ||||||
|         r = t; |         r = t; | ||||||
| 	if (r == Z_DATA_ERROR) | 	if (r == Z_DATA_ERROR) | ||||||
| 	  s->mode = ERROR; | 	  s->mode = INF_ERROR; | ||||||
| 	LEAVE | 	LEAVE | ||||||
|       } |       } | ||||||
|       s->sub.trees.index = 0; |       s->sub.trees.index = 0; | ||||||
| @@ -240,7 +240,7 @@ int r; | |||||||
| 	  if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || | 	  if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || | ||||||
| 	      (c == 16 && i < 1)) | 	      (c == 16 && i < 1)) | ||||||
| 	  { | 	  { | ||||||
| 	    s->mode = ERROR; | 	    s->mode = INF_ERROR; | ||||||
| 	    z->msg = "invalid bit length repeat"; | 	    z->msg = "invalid bit length repeat"; | ||||||
| 	    r = Z_DATA_ERROR; | 	    r = Z_DATA_ERROR; | ||||||
| 	    LEAVE | 	    LEAVE | ||||||
| @@ -267,7 +267,7 @@ int r; | |||||||
| 	if (t != Z_OK) | 	if (t != Z_OK) | ||||||
| 	{ | 	{ | ||||||
| 	  if (t == (uInt)Z_DATA_ERROR) | 	  if (t == (uInt)Z_DATA_ERROR) | ||||||
| 	    s->mode = ERROR; | 	    s->mode = INF_ERROR; | ||||||
| 	  r = t; | 	  r = t; | ||||||
| 	  LEAVE | 	  LEAVE | ||||||
| 	} | 	} | ||||||
| @@ -289,8 +289,19 @@ int r; | |||||||
|       r = Z_OK; |       r = Z_OK; | ||||||
|       inflate_codes_free(s->sub.codes, z); |       inflate_codes_free(s->sub.codes, z); | ||||||
|       LOAD |       LOAD | ||||||
|       s->mode = s->last ? DRY : TYPE; |       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 */ | ||||||
|  |       } | ||||||
|  |       s->mode = DRY; | ||||||
|     case DRY: |     case DRY: | ||||||
|       FLUSH |       FLUSH | ||||||
|       if (s->read != s->write) |       if (s->read != s->write) | ||||||
| @@ -299,7 +310,7 @@ int r; | |||||||
|     case DONE: |     case DONE: | ||||||
|       r = Z_STREAM_END; |       r = Z_STREAM_END; | ||||||
|       LEAVE |       LEAVE | ||||||
|     case ERROR: |     case INF_ERROR: | ||||||
|       r = Z_DATA_ERROR; |       r = Z_DATA_ERROR; | ||||||
|       LEAVE |       LEAVE | ||||||
|     default: |     default: | ||||||
| @@ -309,13 +320,11 @@ int r; | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int inflate_blocks_free(s, z, c, e) | int inflate_blocks_free(s, z, c) | ||||||
| struct inflate_blocks_state *s; | struct inflate_blocks_state *s; | ||||||
| z_stream *z; | z_stream *z; | ||||||
| uLong *c; | uLong *c; | ||||||
| int *e; |  | ||||||
| { | { | ||||||
|   *e = (int)(s->bitk > 7 ? (s->bitb >> (s->bitk & 7)) & 0xff : -1); |  | ||||||
|   if (s->checkfn != Z_NULL) |   if (s->checkfn != Z_NULL) | ||||||
|     *c = s->check; |     *c = s->check; | ||||||
|   if (s->mode == BTREE || s->mode == DTREE) |   if (s->mode == BTREE || s->mode == DTREE) | ||||||
|   | |||||||
| @@ -11,9 +11,9 @@ | |||||||
| struct inflate_blocks_state; | struct inflate_blocks_state; | ||||||
|  |  | ||||||
| extern struct inflate_blocks_state * inflate_blocks_new __P(( | extern struct inflate_blocks_state * inflate_blocks_new __P(( | ||||||
|     z_stream *, |     z_stream *z, | ||||||
|     check_func checkfn,               /* check function */ |     check_func c,               /* check function */ | ||||||
|     uInt));                     /* window size */ |     uInt w));                   /* window size */ | ||||||
|  |  | ||||||
| extern int inflate_blocks __P(( | extern int inflate_blocks __P(( | ||||||
|     struct inflate_blocks_state *, |     struct inflate_blocks_state *, | ||||||
| @@ -23,5 +23,4 @@ extern int inflate_blocks __P(( | |||||||
| extern int inflate_blocks_free __P(( | extern int inflate_blocks_free __P(( | ||||||
|     struct inflate_blocks_state *, |     struct inflate_blocks_state *, | ||||||
|     z_stream *, |     z_stream *, | ||||||
|     uLong *,			/* check value on output */ |     uLong *));                        /* check value on output */ | ||||||
|     int *));			/* possible leftover byte to return */ |  | ||||||
|   | |||||||
| @@ -8,6 +8,8 @@ | |||||||
| #include "infutil.h" | #include "infutil.h" | ||||||
| #include "inffast.h" | #include "inffast.h" | ||||||
|  |  | ||||||
|  | struct inflate_codes_state {int dummy;}; /* for buggy compilers */ | ||||||
|  |  | ||||||
| /* simplify the use of the inflate_huft type with some defines */ | /* simplify the use of the inflate_huft type with some defines */ | ||||||
| #define base more.Base | #define base more.Base | ||||||
| #define next more.Next | #define next more.Next | ||||||
|   | |||||||
							
								
								
									
										230
									
								
								inflate-0.72.c
									
									
									
									
									
								
							
							
						
						
									
										230
									
								
								inflate-0.72.c
									
									
									
									
									
								
							| @@ -1,230 +0,0 @@ | |||||||
| /* inflate.c -- zlib interface to inflate modules |  | ||||||
|  * Copyright (C) 1995 Mark Adler |  | ||||||
|  * For conditions of distribution and use, see copyright notice in zlib.h  |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include "zutil.h" |  | ||||||
| #include "infblock.h" |  | ||||||
|  |  | ||||||
| struct inflate_blocks_state {int dummy;}; /* for buggy compilers */ |  | ||||||
|  |  | ||||||
| /* inflate private state */ |  | ||||||
| struct internal_state { |  | ||||||
|  |  | ||||||
|   /* mode */ |  | ||||||
|   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 */ |  | ||||||
|       ERROR}	/* 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 */ |  | ||||||
|   } sub;	/* submode */ |  | ||||||
|  |  | ||||||
|   /* mode independent information */ |  | ||||||
|   int  nowrap;		/* flag for no wrapper */ |  | ||||||
|   uInt wbits;  		/* log2(window size)  (8..15, defaults to 15) */ |  | ||||||
|  |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int inflateInit(z) |  | ||||||
| z_stream *z; |  | ||||||
| { |  | ||||||
|     return inflateInit2(z, WBITS); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int inflateInit2(z, w) |  | ||||||
| z_stream *z; |  | ||||||
| int w; |  | ||||||
| { |  | ||||||
|   /* initialize state */ |  | ||||||
|   if (z == Z_NULL) |  | ||||||
|     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; |  | ||||||
|  |  | ||||||
|   /* handle undocumented nowrap option (no zlib header or check) */ |  | ||||||
|   z->state->nowrap = 0; |  | ||||||
|   if (w < 0) |  | ||||||
|   { |  | ||||||
|     w = - w; |  | ||||||
|     z->state->nowrap = 1; |  | ||||||
|     z->state->mode = START; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /* set window size */ |  | ||||||
|   if (w < 8 || w > 15) |  | ||||||
|   { |  | ||||||
|     inflateEnd(z); |  | ||||||
|     return Z_STREAM_ERROR; |  | ||||||
|   } |  | ||||||
|   z->state->wbits = w; |  | ||||||
|   return Z_OK; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++) |  | ||||||
|  |  | ||||||
| int inflate(z, f) |  | ||||||
| z_stream *z; |  | ||||||
| int f; |  | ||||||
| { |  | ||||||
|   int r; |  | ||||||
|   uInt b; |  | ||||||
|   uLong c; |  | ||||||
|  |  | ||||||
|   if (z == Z_NULL || z->next_in == Z_NULL) |  | ||||||
|     return Z_STREAM_ERROR; |  | ||||||
|   r = Z_BUF_ERROR; |  | ||||||
|   while (1) switch (z->state->mode) |  | ||||||
|   { |  | ||||||
|     case METHOD: |  | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |  | ||||||
|       if (((z->state->sub.method = NEXTBYTE) & 0xf != DEFLATED)) |  | ||||||
|       { |  | ||||||
|         z->state->mode = ERROR; |  | ||||||
| 	z->msg = "unknown compression method"; |  | ||||||
| 	return Z_DATA_ERROR; |  | ||||||
|       } |  | ||||||
|       if ((z->state->sub.method >> 4) > z->state->wbits) |  | ||||||
|       { |  | ||||||
|         z->state->mode = ERROR; |  | ||||||
| 	z->msg = "invalid window size"; |  | ||||||
| 	return Z_DATA_ERROR; |  | ||||||
|       } |  | ||||||
|       z->state->mode = FLAG; |  | ||||||
|     case FLAG: |  | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |  | ||||||
|       if ((b = NEXTBYTE) & 0x20) |  | ||||||
|       { |  | ||||||
|         z->state->mode = ERROR; |  | ||||||
| 	z->msg = "invalid reserved bit"; |  | ||||||
| 	return Z_DATA_ERROR; |  | ||||||
|       } |  | ||||||
|       if (((z->state->sub.method << 8) + b) % 31) |  | ||||||
|       { |  | ||||||
|         z->state->mode = ERROR; |  | ||||||
| 	z->msg = "incorrect header check"; |  | ||||||
| 	return Z_DATA_ERROR; |  | ||||||
|       } |  | ||||||
|       z->state->mode = START; |  | ||||||
|     case START: |  | ||||||
|       if ((z->state->sub.blocks = |  | ||||||
|            inflate_blocks_new(z,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, &r); |  | ||||||
|       if (z->state->nowrap) |  | ||||||
|       { |  | ||||||
|         if (r != -1) |  | ||||||
| 	  z->msg = "inflate bug--took one too many bytes"; |  | ||||||
| 	z->state->mode = r == -1 ? DONE : ERROR; |  | ||||||
| 	break; |  | ||||||
|       } |  | ||||||
|       z->state->sub.check.was = c; |  | ||||||
|       if (r != -1) |  | ||||||
|       { |  | ||||||
| 	z->state->sub.check.need = (uLong)r << 24; |  | ||||||
|         z->state->mode = CHECK3; |  | ||||||
|         r = Z_OK; |  | ||||||
| 	break; |  | ||||||
|       } |  | ||||||
|       r = Z_OK; |  | ||||||
|       z->state->mode = CHECK4; |  | ||||||
|     case CHECK4: |  | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |  | ||||||
|       z->state->sub.check.need = (uLong)NEXTBYTE << 24; |  | ||||||
|       z->state->mode = CHECK3; |  | ||||||
|     case CHECK3: |  | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |  | ||||||
|       z->state->sub.check.need += (uLong)NEXTBYTE << 16; |  | ||||||
|       z->state->mode = CHECK2; |  | ||||||
|     case CHECK2: |  | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |  | ||||||
|       z->state->sub.check.need += (uLong)NEXTBYTE << 8; |  | ||||||
|       z->state->mode = CHECK1; |  | ||||||
|     case CHECK1: |  | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |  | ||||||
|       z->state->sub.check.need += (uLong)NEXTBYTE; |  | ||||||
|       if (z->state->sub.check.was != z->state->sub.check.need) |  | ||||||
|       { |  | ||||||
|         z->state->mode = ERROR; |  | ||||||
|         z->msg = "incorrect data check"; |  | ||||||
| 	return Z_DATA_ERROR; |  | ||||||
|       } |  | ||||||
|       z->state->mode = DONE; |  | ||||||
|     case DONE: |  | ||||||
|       return Z_STREAM_END; |  | ||||||
|     case ERROR: |  | ||||||
|       return Z_DATA_ERROR; |  | ||||||
|     default: |  | ||||||
|       return Z_STREAM_ERROR; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int inflateEnd(z) |  | ||||||
| z_stream *z; |  | ||||||
| { |  | ||||||
|   uLong c; |  | ||||||
|   int e; |  | ||||||
|  |  | ||||||
|   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, &e); |  | ||||||
|   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; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* inflateReset not fully implemented yet--this frees and reallocates */ |  | ||||||
| int inflateReset(z) |  | ||||||
| z_stream *z; |  | ||||||
| { |  | ||||||
|   int r; |  | ||||||
|  |  | ||||||
|   if ((r = inflateEnd(z)) != Z_OK) |  | ||||||
|     return r; |  | ||||||
|   return inflateInit(z); |  | ||||||
| } |  | ||||||
							
								
								
									
										33
									
								
								inflate.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								inflate.c
									
									
									
									
									
								
							| @@ -22,7 +22,7 @@ struct internal_state { | |||||||
|       CHECK2,	/* two check bytes to go */ |       CHECK2,	/* two check bytes to go */ | ||||||
|       CHECK1,	/* one check byte to go */ |       CHECK1,	/* one check byte to go */ | ||||||
|       DONE,	/* finished check, done */ |       DONE,	/* finished check, done */ | ||||||
|       ERROR}	/* got an error--stay here */ |       INF_ERROR}/* got an error--stay here */ | ||||||
|     mode;		/* current inflate mode */ |     mode;		/* current inflate mode */ | ||||||
|  |  | ||||||
|   /* mode dependent information */ |   /* mode dependent information */ | ||||||
| @@ -92,7 +92,7 @@ int inflate(z, f) | |||||||
| z_stream *z; | z_stream *z; | ||||||
| int f; | int f; | ||||||
| { | { | ||||||
|   int r; |   int r = f; /* to avoid warning about unused f */ | ||||||
|   uInt b; |   uInt b; | ||||||
|   uLong c; |   uLong c; | ||||||
|  |  | ||||||
| @@ -105,13 +105,13 @@ int f; | |||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |       if (z->avail_in == 0) return r;  r = Z_OK; | ||||||
|       if (((z->state->sub.method = NEXTBYTE) & 0xf != DEFLATED)) |       if (((z->state->sub.method = NEXTBYTE) & 0xf != DEFLATED)) | ||||||
|       { |       { | ||||||
|         z->state->mode = ERROR; |         z->state->mode = INF_ERROR; | ||||||
| 	z->msg = "unknown compression method"; | 	z->msg = "unknown compression method"; | ||||||
| 	return Z_DATA_ERROR; | 	return Z_DATA_ERROR; | ||||||
|       } |       } | ||||||
|       if ((z->state->sub.method >> 4) + 8 > z->state->wbits) |       if ((z->state->sub.method >> 4) + 8 > z->state->wbits) | ||||||
|       { |       { | ||||||
|         z->state->mode = ERROR; |         z->state->mode = INF_ERROR; | ||||||
| 	z->msg = "invalid window size"; | 	z->msg = "invalid window size"; | ||||||
| 	return Z_DATA_ERROR; | 	return Z_DATA_ERROR; | ||||||
|       } |       } | ||||||
| @@ -120,13 +120,13 @@ int f; | |||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |       if (z->avail_in == 0) return r;  r = Z_OK; | ||||||
|       if ((b = NEXTBYTE) & 0x20) |       if ((b = NEXTBYTE) & 0x20) | ||||||
|       { |       { | ||||||
|         z->state->mode = ERROR; |         z->state->mode = INF_ERROR; | ||||||
| 	z->msg = "invalid reserved bit"; | 	z->msg = "invalid reserved bit"; | ||||||
| 	return Z_DATA_ERROR; | 	return Z_DATA_ERROR; | ||||||
|       } |       } | ||||||
|       if (((z->state->sub.method << 8) + b) % 31) |       if (((z->state->sub.method << 8) + b) % 31) | ||||||
|       { |       { | ||||||
|         z->state->mode = ERROR; |         z->state->mode = INF_ERROR; | ||||||
| 	z->msg = "incorrect header check"; | 	z->msg = "incorrect header check"; | ||||||
| 	return Z_DATA_ERROR; | 	return Z_DATA_ERROR; | ||||||
|       } |       } | ||||||
| @@ -140,23 +140,13 @@ int f; | |||||||
|     case BLOCKS: |     case BLOCKS: | ||||||
|       if ((r = inflate_blocks(z->state->sub.blocks, z, r)) != Z_STREAM_END) |       if ((r = inflate_blocks(z->state->sub.blocks, z, r)) != Z_STREAM_END) | ||||||
|         return r; |         return r; | ||||||
|       inflate_blocks_free(z->state->sub.blocks, z, &c, &r); |       inflate_blocks_free(z->state->sub.blocks, z, &c); | ||||||
|       if (z->state->nowrap) |       if (z->state->nowrap) | ||||||
|       { |       { | ||||||
|         if (r != -1) |       z->state->mode = DONE; | ||||||
| 	  z->msg = "inflate bug--took one too many bytes"; |  | ||||||
| 	z->state->mode = r == -1 ? DONE : ERROR; |  | ||||||
| 	break; | 	break; | ||||||
|       } |       } | ||||||
|       z->state->sub.check.was = c; |       z->state->sub.check.was = c; | ||||||
|       if (r != -1) |  | ||||||
|       { |  | ||||||
| 	z->state->sub.check.need = (uLong)r << 24; |  | ||||||
|         z->state->mode = CHECK3; |  | ||||||
|         r = Z_OK; |  | ||||||
| 	break; |  | ||||||
|       } |  | ||||||
|       r = Z_OK; |  | ||||||
|       z->state->mode = CHECK4; |       z->state->mode = CHECK4; | ||||||
|     case CHECK4: |     case CHECK4: | ||||||
|       if (z->avail_in == 0) return r;  r = Z_OK; |       if (z->avail_in == 0) return r;  r = Z_OK; | ||||||
| @@ -175,14 +165,14 @@ int f; | |||||||
|       z->state->sub.check.need += (uLong)NEXTBYTE; |       z->state->sub.check.need += (uLong)NEXTBYTE; | ||||||
|       if (z->state->sub.check.was != z->state->sub.check.need) |       if (z->state->sub.check.was != z->state->sub.check.need) | ||||||
|       { |       { | ||||||
|         z->state->mode = ERROR; |         z->state->mode = INF_ERROR; | ||||||
|         z->msg = "incorrect data check"; |         z->msg = "incorrect data check"; | ||||||
| 	return Z_DATA_ERROR; | 	return Z_DATA_ERROR; | ||||||
|       } |       } | ||||||
|       z->state->mode = DONE; |       z->state->mode = DONE; | ||||||
|     case DONE: |     case DONE: | ||||||
|       return Z_STREAM_END; |       return Z_STREAM_END; | ||||||
|     case ERROR: |     case INF_ERROR: | ||||||
|       return Z_DATA_ERROR; |       return Z_DATA_ERROR; | ||||||
|     default: |     default: | ||||||
|       return Z_STREAM_ERROR; |       return Z_STREAM_ERROR; | ||||||
| @@ -194,12 +184,11 @@ int inflateEnd(z) | |||||||
| z_stream *z; | z_stream *z; | ||||||
| { | { | ||||||
|   uLong c; |   uLong c; | ||||||
|   int e; |  | ||||||
|  |  | ||||||
|   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL) |   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL) | ||||||
|     return Z_STREAM_ERROR; |     return Z_STREAM_ERROR; | ||||||
|   if (z->state->mode == BLOCKS) |   if (z->state->mode == BLOCKS) | ||||||
|     inflate_blocks_free(z->state->sub.blocks, z, &c, &e); |     inflate_blocks_free(z->state->sub.blocks, z, &c); | ||||||
|   ZFREE(z, z->state); |   ZFREE(z, z->state); | ||||||
|   z->state = Z_NULL; |   z->state = Z_NULL; | ||||||
|   return Z_OK; |   return Z_OK; | ||||||
|   | |||||||
| @@ -2,6 +2,8 @@ | |||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include "zutil.h" | #include "zutil.h" | ||||||
|  |  | ||||||
|  | void main __P((void)); | ||||||
|  |  | ||||||
| /* This test is in honor of Ed Hamrick who suggested that the interface | /* This test is in honor of Ed Hamrick who suggested that the interface | ||||||
|    to inflate be a byte at a time--this implements that, and is, of course, |    to inflate be a byte at a time--this implements that, and is, of course, | ||||||
|    monumentally slow.  It has the virtue though of stressing the push-pull |    monumentally slow.  It has the virtue though of stressing the push-pull | ||||||
| @@ -61,7 +63,7 @@ void main() | |||||||
|       break; |       break; | ||||||
|   } |   } | ||||||
|   inflateEnd(&z); |   inflateEnd(&z); | ||||||
|   fprintf(stderr, "%d bytes in, %d bytes out\n", z.total_in, z.total_out); |   fprintf(stderr, "%ld bytes in, %ld bytes out\n", z.total_in, z.total_out); | ||||||
|   if (z.msg != NULL) |   if (z.msg != NULL) | ||||||
|     fprintf(stderr, "msg is <%s>\n", z.msg); |     fprintf(stderr, "msg is <%s>\n", z.msg); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -383,6 +383,7 @@ uInt s;		/* size of item */ | |||||||
| { | { | ||||||
|   Assert(s == sizeof(inflate_huft) && n <= fixed_left, |   Assert(s == sizeof(inflate_huft) && n <= fixed_left, | ||||||
|          "inflate_trees falloc overflow"); |          "inflate_trees falloc overflow"); | ||||||
|  |   if (q) s++; /* to make some compilers happy */ | ||||||
|   fixed_left -= n; |   fixed_left -= n; | ||||||
|   return (voidp)(fixed_mem + fixed_left); |   return (voidp)(fixed_mem + fixed_left); | ||||||
| } | } | ||||||
| @@ -393,6 +394,7 @@ voidp q; | |||||||
| voidp p; | voidp p; | ||||||
| { | { | ||||||
|   Assert(0, "inflate_trees ffree called!"); |   Assert(0, "inflate_trees ffree called!"); | ||||||
|  |   if (q) q = p; /* to make some compilers happy */ | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ int r; | |||||||
|   q = s->read; |   q = s->read; | ||||||
|  |  | ||||||
|   /* compute number of bytes to copy as far as end of window */ |   /* compute number of bytes to copy as far as end of window */ | ||||||
|   n = (q <= s->write ? s->write : s->end) - q; |   n = (uInt)((q <= s->write ? s->write : s->end) - q); | ||||||
|   if (n > z->avail_out) n = z->avail_out; |   if (n > z->avail_out) n = z->avail_out; | ||||||
|   if (n && r == Z_BUF_ERROR) r = Z_OK; |   if (n && r == Z_BUF_ERROR) r = Z_OK; | ||||||
|  |  | ||||||
| @@ -55,7 +55,7 @@ int r; | |||||||
|       s->write = s->window; |       s->write = s->window; | ||||||
|  |  | ||||||
|     /* compute bytes to copy */ |     /* compute bytes to copy */ | ||||||
|     n = s->write - q; |     n = (uInt)(s->write - q); | ||||||
|     if (n > z->avail_out) n = z->avail_out; |     if (n > z->avail_out) n = z->avail_out; | ||||||
|     if (n && r == Z_BUF_ERROR) r = Z_OK; |     if (n && r == Z_BUF_ERROR) r = Z_OK; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								infutil.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								infutil.h
									
									
									
									
									
								
							| @@ -22,7 +22,7 @@ struct inflate_blocks_state { | |||||||
|       CODES,	/* processing fixed or dynamic block */ |       CODES,	/* processing fixed or dynamic block */ | ||||||
|       DRY,	/* output remaining window bytes */ |       DRY,	/* output remaining window bytes */ | ||||||
|       DONE,	/* finished last block, done */ |       DONE,	/* finished last block, done */ | ||||||
|       ERROR}	/* got a data error--stuck here */ |       INF_ERROR}/* got a data error--stuck here */ | ||||||
|     mode;		/* current inflate_block mode */ |     mode;		/* current inflate_block mode */ | ||||||
|  |  | ||||||
|   /* mode dependent information */ |   /* mode dependent information */ | ||||||
| @@ -63,7 +63,13 @@ struct inflate_blocks_state { | |||||||
| #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} | #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 NEEDBYTE {if(n)r=Z_OK;else LEAVE} | ||||||
| #define NEXTBYTE (n--,*p++) | #define NEXTBYTE (n--,*p++) | ||||||
| #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}} | #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 DUMPBITS(j) {b>>=(j);k-=(j);} | #define DUMPBITS(j) {b>>=(j);k-=(j);} | ||||||
| /*   output bytes */ | /*   output bytes */ | ||||||
| #define WAVAIL (q<s->read?s->read-q-1:s->end-q) | #define WAVAIL (q<s->read?s->read-q-1:s->end-q) | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								minigzip.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								minigzip.c
									
									
									
									
									
								
							| @@ -13,15 +13,21 @@ | |||||||
|  * or in pipe mode. |  * or in pipe mode. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: minigzip.c,v 1.2 1995/04/14 20:03:12 jloup Exp $ */ | /* $Id: minigzip.c,v 1.3 1995/04/29 14:27:21 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include "zlib.h" | #include "zlib.h" | ||||||
|  |  | ||||||
| extern void exit __P((int)); | extern void exit  __P((int)); | ||||||
|  | extern int unlink __P((const char *)); | ||||||
|  |  | ||||||
|  | #ifdef STDC | ||||||
|  | #  include <string.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef MSDOS | #ifdef MSDOS | ||||||
| #  include <fcntl.h> /* ??? find where setmode declared */ | #  include <fcntl.h> | ||||||
|  | #  include <io.h> | ||||||
| #  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) | #  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) | ||||||
| #else | #else | ||||||
| #  define SET_BINARY_MODE(file) | #  define SET_BINARY_MODE(file) | ||||||
| @@ -38,6 +44,13 @@ extern void exit __P((int)); | |||||||
|  |  | ||||||
| char *prog; | char *prog; | ||||||
|  |  | ||||||
|  | void error           __P((char *msg)); | ||||||
|  | void gz_compress     __P((FILE   *in, gzFile out)); | ||||||
|  | void gz_uncompress   __P((gzFile in, FILE   *out)); | ||||||
|  | void file_compress   __P((char  *file)); | ||||||
|  | void file_uncompress __P((char  *file)); | ||||||
|  | void main            __P((int argc, char *argv[])); | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
|  * Display error message and exit |  * Display error message and exit | ||||||
|  */ |  */ | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								trees.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								trees.c
									
									
									
									
									
								
							| @@ -29,7 +29,7 @@ | |||||||
|  *          Addison-Wesley, 1983. ISBN 0-201-06672-6. |  *          Addison-Wesley, 1983. ISBN 0-201-06672-6. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: trees.c,v 1.2 1995/04/10 16:21:44 jloup Exp $ */ | /* $Id: trees.c,v 1.3 1995/04/29 13:49:46 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include "deflate.h" | #include "deflate.h" | ||||||
|  |  | ||||||
| @@ -944,7 +944,7 @@ local void set_data_type(s) | |||||||
|     while (n < 7)        bin_freq += s->dyn_ltree[n++].Freq; |     while (n < 7)        bin_freq += s->dyn_ltree[n++].Freq; | ||||||
|     while (n < 128)    ascii_freq += s->dyn_ltree[n++].Freq; |     while (n < 128)    ascii_freq += s->dyn_ltree[n++].Freq; | ||||||
|     while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; |     while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; | ||||||
|     s->data_type = bin_freq > (ascii_freq >> 2) ? BINARY : ASCII; |     s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? BINARY : ASCII); | ||||||
| } | } | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								zconf.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								zconf.h
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ | |||||||
|  * For conditions of distribution and use, see copyright notice in zlib.h  |  * For conditions of distribution and use, see copyright notice in zlib.h  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: zconf.h,v 1.8 1995/04/14 20:59:22 jloup Exp $ */ | /* $Id: zconf.h,v 1.9 1995/04/29 12:02:14 jloup Exp $ */ | ||||||
|  |  | ||||||
| #ifndef _ZCONF_H | #ifndef _ZCONF_H | ||||||
| #define _ZCONF_H | #define _ZCONF_H | ||||||
| @@ -28,6 +28,9 @@ | |||||||
| #if defined(MSDOS) && !defined(__32BIT__) | #if defined(MSDOS) && !defined(__32BIT__) | ||||||
| #  define MAXSEG_64K | #  define MAXSEG_64K | ||||||
| #endif | #endif | ||||||
|  | #if !defined(STDC) && (defined(MSDOS) || defined(__STDC__)) | ||||||
|  | #  define STDC | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef MAXSEG_64K | #ifdef MAXSEG_64K | ||||||
| #  define MAX_MEM_LEVEL 8 | #  define MAX_MEM_LEVEL 8 | ||||||
| @@ -38,7 +41,7 @@ | |||||||
| 			/* Type declarations */ | 			/* Type declarations */ | ||||||
|  |  | ||||||
| #ifndef __P /* function prototypes */ | #ifndef __P /* function prototypes */ | ||||||
| #  if defined(__STDC__) || defined(MSDOS) | #  ifdef STDC | ||||||
| #    define __P(args)  args | #    define __P(args)  args | ||||||
| #  else | #  else | ||||||
| #    define __P(args)  () | #    define __P(args)  () | ||||||
| @@ -55,7 +58,7 @@ | |||||||
|   typedef unsigned long  uLong; /* 32 bits or more */ |   typedef unsigned long  uLong; /* 32 bits or more */ | ||||||
| #endif | #endif | ||||||
| #ifndef voidp | #ifndef voidp | ||||||
| #  if defined(__STDC__) || defined(MSDOS) | #  ifdef STDC | ||||||
|      typedef void *voidp; |      typedef void *voidp; | ||||||
| #  else | #  else | ||||||
|      typedef Byte *voidp; |      typedef Byte *voidp; | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								zlib.h
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								zlib.h
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| /* zlib.h -- interface of the 'zlib' general purpose compression library | /* zlib.h -- interface of the 'zlib' general purpose compression library | ||||||
|   version 0.79  April 28th, 1995. |   version 0.8 April 29th, 1995. | ||||||
|  |  | ||||||
|   Copyright (C) 1995 Jean-loup Gailly and Mark Adler |   Copyright (C) 1995 Jean-loup Gailly and Mark Adler | ||||||
|  |  | ||||||
| @@ -28,7 +28,7 @@ | |||||||
|  |  | ||||||
| #include "zconf.h" | #include "zconf.h" | ||||||
|  |  | ||||||
| #define ZLIB_VERSION "0.79" | #define ZLIB_VERSION "0.8" | ||||||
|  |  | ||||||
| /*  | /*  | ||||||
|      The 'zlib' compression library provides in-memory compression and |      The 'zlib' compression library provides in-memory compression and | ||||||
| @@ -191,25 +191,30 @@ extern int deflate __P((z_stream *strm, int flush)); | |||||||
|   so should be used only when necessary.  Using Z_FULL_FLUSH too often can |   so should be used only when necessary.  Using Z_FULL_FLUSH too often can | ||||||
|   seriously degrade the compression. |   seriously degrade the compression. | ||||||
|  |  | ||||||
|     If the parameter flush is set to Z_FINISH, all pending input is |     If the parameter flush is set to Z_FINISH, all pending input is processed, | ||||||
|   processed and all pending output is flushed. The next operation on this |   all pending output is flushed and deflate returns with Z_STREAM_END if there | ||||||
|   stream must be another call of deflate with Z_FINISH but no more input data |   was enough output space; if deflate returns with Z_OK, this function must be | ||||||
|   (unchanged avail_in) if this call returned with avail_out equal to zero, |   called again with Z_FINISH and more output space (updated avail_out) but no | ||||||
|   or a call of deflateEnd to deallocate the compression state. Z_FINISH can |   more input data, until it returns with Z_STREAM_END or an error. After | ||||||
|   be used immediately after deflateInit if all the compression is to be |   deflate has returned Z_STREAM_END, the only possible operations on the | ||||||
|   done in a single step. In this case, avail_out must be at least 0.1% |   stream are deflateReset or deflateEnd. | ||||||
|   larger than avail_in plus 12 bytes. |    | ||||||
|  |     Z_FINISH can be used immediately after deflateInit if all the compression | ||||||
|  |   is to be done in a single step. In this case, avail_out must be at least | ||||||
|  |   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() may update data_type if it can make a good guess about |     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 |   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 |   binary. This field is only for information purposes and does not affect | ||||||
|   the compression algorithm in any manner. |   the compression algorithm in any manner. | ||||||
|  |  | ||||||
|     deflate() returns Z_OK if some progress has been made (more input processed |     deflate() returns Z_OK if some progress has been made (more input | ||||||
|   or more output produced), Z_STREAM_ERROR if the stream state was |   processed or more output produced), Z_STREAM_END if all input has been | ||||||
|   inconsistent (for example if next_in or next_out was NULL), Z_BUF_ERROR if |   consumed and all output has been produced (only when flush is set to | ||||||
|   no progress is possible or if there was not enough room in the output buffer |   Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example | ||||||
|   when Z_FINISH is used. ??? to be changed (use Z_STEAM_END) */ |   if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  |  | ||||||
| extern int deflateEnd __P((z_stream *strm)); | extern int deflateEnd __P((z_stream *strm)); | ||||||
| @@ -534,7 +539,8 @@ extern int    gzflush __P((gzFile file, int flush)); | |||||||
| /* | /* | ||||||
|      Flushes all pending output into the compressed file. The parameter |      Flushes all pending output into the compressed file. The parameter | ||||||
|    flush is as in the deflate() function. The return value is the zlib |    flush is as in the deflate() function. The return value is the zlib | ||||||
|    error number (see function gzerror below). |    error number (see function gzerror below). gzflush returns Z_OK if | ||||||
|  |    the flush parameter is Z_FINISH and all output could be flushed. | ||||||
|      gzflush should be called only when strictly necessary because it can |      gzflush should be called only when strictly necessary because it can | ||||||
|    degrade compression. |    degrade compression. | ||||||
| */ | */ | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								zutil.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								zutil.c
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ | |||||||
|  * For conditions of distribution and use, see copyright notice in zlib.h  |  * For conditions of distribution and use, see copyright notice in zlib.h  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: zutil.c,v 1.5 1995/04/14 21:30:23 jloup Exp $ */ | /* $Id: zutil.c,v 1.6 1995/04/29 14:54:02 jloup Exp $ */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| @@ -55,7 +55,7 @@ void zmemzero(dest, len) | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(MSDOS) && !defined(USE_CALLOC) | #if defined(MSDOS) && !defined(__SMALL__) && !defined(M_I86SM) | ||||||
| #  ifdef __TURBOC__ | #  ifdef __TURBOC__ | ||||||
|  |  | ||||||
| /* Turbo C malloc() does not allow dynamic allocation of 64K bytes | /* Turbo C malloc() does not allow dynamic allocation of 64K bytes | ||||||
| @@ -84,7 +84,7 @@ local ptr_table table[MAX_PTR]; | |||||||
|  |  | ||||||
| voidp zcalloc (voidp opaque, unsigned items, unsigned size) | voidp zcalloc (voidp opaque, unsigned items, unsigned size) | ||||||
| { | { | ||||||
|     voidp buf; |     voidp buf = opaque; /* just to make some compilers happy */ | ||||||
|     ulg bsize = (ulg)items*size; |     ulg bsize = (ulg)items*size; | ||||||
|  |  | ||||||
|     if (bsize < 65536L) { |     if (bsize < 65536L) { | ||||||
| @@ -121,6 +121,7 @@ void  zcfree (voidp opaque, voidp ptr) | |||||||
| 	next_ptr--; | 	next_ptr--; | ||||||
| 	return; | 	return; | ||||||
|     } |     } | ||||||
|  |     ptr = opaque; /* just to make some compilers happy */ | ||||||
|     z_error("zcfree: ptr not found"); |     z_error("zcfree: ptr not found"); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -133,11 +134,13 @@ void  zcfree (voidp opaque, voidp ptr) | |||||||
|  |  | ||||||
| voidp zcalloc (voidp opaque, unsigned items, unsigned size) | voidp zcalloc (voidp opaque, unsigned items, unsigned size) | ||||||
| { | { | ||||||
|  |     if (opaque) opaque = 0; /* to make compiler happy */ | ||||||
|     return _halloc((long)items, size); |     return _halloc((long)items, size); | ||||||
| } | } | ||||||
|  |  | ||||||
| void  zcfree (voidp opaque, voidp ptr) | void  zcfree (voidp opaque, voidp ptr) | ||||||
| { | { | ||||||
|  |     if (opaque) opaque = 0; /* to make compiler happy */ | ||||||
|     _hfree(ptr); |     _hfree(ptr); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								zutil.h
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								zutil.h
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ | |||||||
|    subject to change. Applications should only use zlib.h. |    subject to change. Applications should only use zlib.h. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* $Id: zutil.h,v 1.5 1995/04/14 21:22:38 jloup Exp $ */ | /* $Id: zutil.h,v 1.6 1995/04/29 15:52:16 jloup Exp $ */ | ||||||
|  |  | ||||||
| #ifndef _Z_UTIL_H | #ifndef _Z_UTIL_H | ||||||
| #define _Z_UTIL_H | #define _Z_UTIL_H | ||||||
| @@ -20,9 +20,8 @@ | |||||||
| #else | #else | ||||||
|     extern int errno; |     extern int errno; | ||||||
| #endif | #endif | ||||||
| #ifdef __STDC__ | #ifdef STDC | ||||||
| #  include <string.h> | #  include <string.h> | ||||||
| #  include <memory.h> |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifndef local | #ifndef local | ||||||
| @@ -66,7 +65,6 @@ extern char *z_errmsg[]; /* indexed by 1-zlib_error */ | |||||||
| #  define OS_CODE  0x00 | #  define OS_CODE  0x00 | ||||||
| #  ifdef __TURBOC__ | #  ifdef __TURBOC__ | ||||||
| #    include <alloc.h> | #    include <alloc.h> | ||||||
| #    define exit(n) _exit(n) |  | ||||||
| #  else /* MSC */ | #  else /* MSC */ | ||||||
| #    include <malloc.h> | #    include <malloc.h> | ||||||
| #  endif | #  endif | ||||||
| @@ -125,7 +123,7 @@ extern char *z_errmsg[]; /* indexed by 1-zlib_error */ | |||||||
| #  define zstrerror(errnum) "" | #  define zstrerror(errnum) "" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(__STDC__) && !defined(HAVE_MEMCPY) | #if defined(STDC) && !defined(HAVE_MEMCPY) | ||||||
| #  define HAVE_MEMCPY | #  define HAVE_MEMCPY | ||||||
| #endif | #endif | ||||||
| #ifdef HAVE_MEMCPY | #ifdef HAVE_MEMCPY | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user