| Index: third_party/zlib/inftrees.c
|
| ===================================================================
|
| --- third_party/zlib/inftrees.c (revision 112951)
|
| +++ third_party/zlib/inftrees.c (working copy)
|
| @@ -1,5 +1,5 @@
|
| /* inftrees.c -- generate Huffman trees for efficient decoding
|
| - * Copyright (C) 1995-2005 Mark Adler
|
| + * Copyright (C) 1995-2010 Mark Adler
|
| * For conditions of distribution and use, see copyright notice in zlib.h
|
| */
|
|
|
| @@ -9,7 +9,7 @@
|
| #define MAXBITS 15
|
|
|
| const char inflate_copyright[] =
|
| - " inflate 1.2.3 Copyright 1995-2005 Mark Adler ";
|
| + " inflate 1.2.5 Copyright 1995-2010 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,7 +29,7 @@
|
| 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)
|
| +int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
|
| codetype type;
|
| unsigned short FAR *lens;
|
| unsigned codes;
|
| @@ -50,7 +50,7 @@
|
| unsigned fill; /* index for replicating entries */
|
| unsigned low; /* low bits for current root entry */
|
| unsigned mask; /* mask for low root bits */
|
| - code this; /* table entry for duplication */
|
| + code here; /* table entry for duplication */
|
| code FAR *next; /* next available space in table */
|
| const unsigned short FAR *base; /* base value table to use */
|
| const unsigned short FAR *extra; /* extra bits table to use */
|
| @@ -62,7 +62,7 @@
|
| 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, 201, 196};
|
| + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195};
|
| 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,
|
| @@ -115,15 +115,15 @@
|
| if (count[max] != 0) break;
|
| if (root > max) root = max;
|
| if (max == 0) { /* no symbols to code at all */
|
| - this.op = (unsigned char)64; /* invalid code marker */
|
| - this.bits = (unsigned char)1;
|
| - this.val = (unsigned short)0;
|
| - *(*table)++ = this; /* make a table to force an error */
|
| - *(*table)++ = this;
|
| + here.op = (unsigned char)64; /* invalid code marker */
|
| + here.bits = (unsigned char)1;
|
| + here.val = (unsigned short)0;
|
| + *(*table)++ = here; /* make a table to force an error */
|
| + *(*table)++ = here;
|
| *bits = 1;
|
| return 0; /* no symbols, but wait for decoding to report error */
|
| }
|
| - for (min = 1; min <= MAXBITS; min++)
|
| + for (min = 1; min < max; min++)
|
| if (count[min] != 0) break;
|
| if (root < min) root = min;
|
|
|
| @@ -166,11 +166,10 @@
|
| entered in the tables.
|
|
|
| used keeps track of how many table entries have been allocated from the
|
| - provided *table space. It is checked when a LENS table is being made
|
| - against the space in *table, ENOUGH, minus the maximum space needed by
|
| - the worst case distance code, MAXD. This should never happen, but the
|
| - sufficiency of ENOUGH has not been proven exhaustively, hence the check.
|
| - This assumes that when type == LENS, bits == 9.
|
| + provided *table space. It is checked for LENS and DIST tables against
|
| + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
|
| + the initial root table size constants. See the comments in inftrees.h
|
| + for more information.
|
|
|
| sym increments through all symbols, and the loop terminates when
|
| all codes of length max, i.e. all codes, have been processed. This
|
| @@ -209,24 +208,25 @@
|
| mask = used - 1; /* mask for comparing low */
|
|
|
| /* check available table space */
|
| - if (type == LENS && used >= ENOUGH - MAXD)
|
| + if ((type == LENS && used >= ENOUGH_LENS) ||
|
| + (type == DISTS && used >= ENOUGH_DISTS))
|
| return 1;
|
|
|
| /* process all codes and make table entries */
|
| for (;;) {
|
| /* create table entry */
|
| - this.bits = (unsigned char)(len - drop);
|
| + here.bits = (unsigned char)(len - drop);
|
| if ((int)(work[sym]) < end) {
|
| - this.op = (unsigned char)0;
|
| - this.val = work[sym];
|
| + here.op = (unsigned char)0;
|
| + here.val = work[sym];
|
| }
|
| else if ((int)(work[sym]) > end) {
|
| - this.op = (unsigned char)(extra[work[sym]]);
|
| - this.val = base[work[sym]];
|
| + here.op = (unsigned char)(extra[work[sym]]);
|
| + here.val = base[work[sym]];
|
| }
|
| else {
|
| - this.op = (unsigned char)(32 + 64); /* end of block */
|
| - this.val = 0;
|
| + here.op = (unsigned char)(32 + 64); /* end of block */
|
| + here.val = 0;
|
| }
|
|
|
| /* replicate for those indices with low len bits equal to huff */
|
| @@ -235,7 +235,7 @@
|
| min = fill; /* save offset to next table */
|
| do {
|
| fill -= incr;
|
| - next[(huff >> drop) + fill] = this;
|
| + next[(huff >> drop) + fill] = here;
|
| } while (fill != 0);
|
|
|
| /* backwards increment the len-bit code huff */
|
| @@ -277,7 +277,8 @@
|
|
|
| /* check for enough space */
|
| used += 1U << curr;
|
| - if (type == LENS && used >= ENOUGH - MAXD)
|
| + if ((type == LENS && used >= ENOUGH_LENS) ||
|
| + (type == DISTS && used >= ENOUGH_DISTS))
|
| return 1;
|
|
|
| /* point entry in root table to sub-table */
|
| @@ -295,20 +296,20 @@
|
| through high index bits. When the current sub-table is filled, the loop
|
| drops back to the root table to fill in any remaining entries there.
|
| */
|
| - this.op = (unsigned char)64; /* invalid code marker */
|
| - this.bits = (unsigned char)(len - drop);
|
| - this.val = (unsigned short)0;
|
| + here.op = (unsigned char)64; /* invalid code marker */
|
| + here.bits = (unsigned char)(len - drop);
|
| + here.val = (unsigned short)0;
|
| while (huff != 0) {
|
| /* when done with sub-table, drop back to root table */
|
| if (drop != 0 && (huff & mask) != low) {
|
| drop = 0;
|
| len = root;
|
| next = *table;
|
| - this.bits = (unsigned char)len;
|
| + here.bits = (unsigned char)len;
|
| }
|
|
|
| /* put invalid code marker in table */
|
| - next[huff >> drop] = this;
|
| + next[huff >> drop] = here;
|
|
|
| /* backwards increment the len-bit code huff */
|
| incr = 1U << (len - 1);
|
|
|