*** infback.c Mon Aug 11 16:48:06 2003 --- infback9.c Mon Sep 8 21:22:46 2003 *************** *** 1,19 **** ! /* infback.c -- inflate using a call-back interface * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ - /* - This code is largely copied from inflate.c. Normally either infback.o or - inflate.o would be linked into an application--not both. The interface - with inffast.c is retained so that optimized assembler-coded versions of - inflate_fast() can be used with either inflate.c or infback.c. - */ - #include "zutil.h" ! #include "inftrees.h" #include "inflate.h" - #include "inffast.h" /* function prototypes */ local void fixedtables OF((struct inflate_state FAR *state)); --- 1,12 ---- ! /* infback9.c -- inflate deflate64 data using a call-back interface * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" ! #include "infback9.h" ! #include "inftree9.h" #include "inflate.h" /* function prototypes */ local void fixedtables OF((struct inflate_state FAR *state)); *************** *** 22,33 **** strm provides memory allocation functions in zalloc and zfree, or Z_NULL to use the library memory allocation functions. ! windowBits is in the range 8..15, and window is a user-supplied ! window and output buffer that is 2**windowBits bytes. */ ! int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) z_stream FAR *strm; - int windowBits; unsigned char FAR *window; const char *version; int stream_size; --- 15,24 ---- strm provides memory allocation functions in zalloc and zfree, or Z_NULL to use the library memory allocation functions. ! window is a user-supplied window and output buffer that is 64K bytes. */ ! int ZEXPORT inflateBack9Init_(strm, window, version, stream_size) z_stream FAR *strm; unsigned char FAR *window; const char *version; int stream_size; *************** *** 37,44 **** if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || stream_size != (int)(sizeof(z_stream))) return Z_VERSION_ERROR; ! if (strm == Z_NULL || window == Z_NULL || ! windowBits < 8 || windowBits > 15) return Z_STREAM_ERROR; strm->msg = Z_NULL; /* in case we return an error */ if (strm->zalloc == (alloc_func)0) { --- 28,34 ---- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || stream_size != (int)(sizeof(z_stream))) return Z_VERSION_ERROR; ! if (strm == Z_NULL || window == Z_NULL) return Z_STREAM_ERROR; strm->msg = Z_NULL; /* in case we return an error */ if (strm->zalloc == (alloc_func)0) { *************** *** 51,58 **** if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (voidpf)state; ! state->wbits = windowBits; ! state->wsize = 1U << windowBits; state->window = window; state->write = 0; state->whave = 0; --- 41,48 ---- if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (voidpf)state; ! state->wbits = 16; ! state->wsize = 1U << 16; state->window = window; state->write = 0; state->whave = 0; *************** *** 91,110 **** next = fixed; lenfix = next; bits = 9; ! inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); /* distance table */ sym = 0; while (sym < 32) state->lens[sym++] = 5; distfix = next; bits = 5; ! inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); /* do this just once */ virgin = 0; } #else /* !BUILDFIXED */ ! # include "inffixed.h" #endif /* BUILDFIXED */ state->lencode = lenfix; state->lenbits = 9; --- 81,100 ---- next = fixed; lenfix = next; bits = 9; ! inflate_table9(LENS, state->lens, 288, &(next), &(bits), state->work); /* distance table */ sym = 0; while (sym < 32) state->lens[sym++] = 5; distfix = next; bits = 5; ! inflate_table9(DISTS, state->lens, 32, &(next), &(bits), state->work); /* do this just once */ virgin = 0; } #else /* !BUILDFIXED */ ! # include "inffix9.h" #endif /* BUILDFIXED */ state->lencode = lenfix; state->lenbits = 9; *************** *** 114,141 **** /* Macros for inflateBack(): */ - /* Load returned state from inflate_fast() */ - #define LOAD() \ - do { \ - put = strm->next_out; \ - left = strm->avail_out; \ - next = strm->next_in; \ - have = strm->avail_in; \ - hold = state->hold; \ - bits = state->bits; \ - } while (0) - - /* Set state from registers for inflate_fast() */ - #define RESTORE() \ - do { \ - strm->next_out = put; \ - strm->avail_out = left; \ - strm->next_in = next; \ - strm->avail_in = have; \ - state->hold = hold; \ - state->bits = bits; \ - } while (0) - /* Clear the input bit accumulator */ #define INITBITS() \ do { \ --- 104,109 ---- *************** *** 237,243 **** inflateBack() can also return Z_STREAM_ERROR if the input parameters are not correct, i.e. strm is Z_NULL or the state was not initialized. */ ! int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) z_stream FAR *strm; in_func in; void FAR *in_desc; --- 205,211 ---- inflateBack() can also return Z_STREAM_ERROR if the input parameters are not correct, i.e. strm is Z_NULL or the state was not initialized. */ ! int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc) z_stream FAR *strm; in_func in; void FAR *in_desc; *************** *** 354,366 **** DROPBITS(5); state->ncode = BITS(4) + 4; DROPBITS(4); ! #ifndef PKZIP_BUG_WORKAROUND ! if (state->nlen > 286 || state->ndist > 30) { ! strm->msg = (char *)"too many length or distance symbols"; state->mode = BAD; break; } - #endif Tracev((stderr, "inflate: table sizes ok\n")); /* get code length code lengths (not a typo) */ --- 322,332 ---- DROPBITS(5); state->ncode = BITS(4) + 4; DROPBITS(4); ! if (state->nlen > 286) { ! strm->msg = (char *)"too many length symbols"; state->mode = BAD; break; } Tracev((stderr, "inflate: table sizes ok\n")); /* get code length code lengths (not a typo) */ *************** *** 375,381 **** state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 7; ! ret = inflate_table(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work); if (ret) { strm->msg = (char *)"invalid code lengths set"; --- 341,347 ---- state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 7; ! ret = inflate_table9(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work); if (ret) { strm->msg = (char *)"invalid code lengths set"; *************** *** 438,445 **** state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 9; ! ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), ! &(state->lenbits), state->work); if (ret) { strm->msg = (char *)"invalid literal/lengths set"; state->mode = BAD; --- 404,411 ---- state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 9; ! ret = inflate_table9(LENS, state->lens, state->nlen, ! &(state->next), &(state->lenbits), state->work); if (ret) { strm->msg = (char *)"invalid literal/lengths set"; state->mode = BAD; *************** *** 447,454 **** } state->distcode = (code const FAR *)(state->next); state->distbits = 6; ! ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, ! &(state->next), &(state->distbits), state->work); if (ret) { strm->msg = (char *)"invalid distances set"; state->mode = BAD; --- 413,421 ---- } state->distcode = (code const FAR *)(state->next); state->distbits = 6; ! ret = inflate_table9(DISTS, state->lens + state->nlen, ! state->ndist, &(state->next), &(state->distbits), ! state->work); if (ret) { strm->msg = (char *)"invalid distances set"; state->mode = BAD; *************** *** 458,473 **** state->mode = LEN; case LEN: - /* use inflate_fast() if we have enough input and output */ - if (have >= 6 && left >= 258) { - RESTORE(); - if (state->whave < state->wsize) - state->whave = state->wsize - left; - inflate_fast(strm, state->wsize); - LOAD(); - break; - } - /* get a literal, length, or end-of-block code */ for (;;) { this = state->lencode[BITS(state->lenbits)]; --- 425,430 ---- *************** *** 607,613 **** return ret; } ! int ZEXPORT inflateBackEnd(strm) z_stream FAR *strm; { if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) --- 564,570 ---- return ret; } ! int ZEXPORT inflateBack9End(strm) z_stream FAR *strm; { if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) *** inftrees.c Sun Sep 7 10:59:10 2003 --- inftree9.c Mon Sep 8 20:54:36 2003 *************** *** 1,15 **** ! /* inftrees.c -- generate Huffman trees for efficient decoding * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" ! #include "inftrees.h" #define MAXBITS 15 ! const char inflate_copyright[] = ! " inflate 1.2.0.5 Copyright 1995-2003 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot --- 1,15 ---- ! /* inftree9.c -- generate Huffman trees for efficient decoding * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" ! #include "inftree9.h" #define MAXBITS 15 ! const char inflate9_copyright[] = ! " inflate9 1.2.0.5 Copyright 1995-2003 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot *************** *** 29,35 **** table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ ! int inflate_table(type, lens, codes, table, bits, work) codetype type; unsigned short FAR *lens; unsigned codes; --- 29,35 ---- table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ ! int inflate_table9(type, lens, codes, table, bits, work) codetype type; unsigned short FAR *lens; unsigned codes; *************** *** 59,76 **** unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, ! 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, ! 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 192, 78}; ! static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, ! 8193, 12289, 16385, 24577, 0, 0}; ! static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, ! 28, 28, 29, 29, 64, 64}; /* Process a set of code lengths to create a canonical Huffman code. The --- 59,76 ---- unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, ! 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, ! 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 32, 192, 78}; ! static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, ! 8193, 12289, 16385, 24577, 32769, 49153}; ! static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, ! 28, 28, 29, 29, 30, 30}; /* Process a set of code lengths to create a canonical Huffman code. The *** inftrees.h Sun Aug 10 15:15:50 2003 --- inftree9.h Mon Sep 8 20:54:51 2003 *************** *** 1,4 **** ! /* inftrees.h -- header to use inftrees.c * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ --- 1,4 ---- ! /* inftree9.h -- header to use inftree9.c * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ *************** *** 50,55 **** DISTS } codetype; ! extern int inflate_table OF((codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work)); --- 50,55 ---- DISTS } codetype; ! extern int inflate_table9 OF((codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work));