| Line 1... |
Line 1... |
| 1 |
/* inftrees.c -- generate Huffman trees for efficient decoding
|
1 |
/* inftrees.c -- generate Huffman trees for efficient decoding
|
| 2 |
* Copyright (C) 1995-2012 Mark Adler
|
2 |
* Copyright (C) 1995-2013 Mark Adler
|
| 3 |
* For conditions of distribution and use, see copyright notice in zlib.h
|
3 |
* For conditions of distribution and use, see copyright notice in zlib.h
|
| 4 |
*/
|
4 |
*/
|
| 5 |
|
5 |
|
| 6 |
#include "zutil.h"
|
6 |
#include "zutil.h"
|
| 7 |
#include "inftrees.h"
|
7 |
#include "inftrees.h"
|
| 8 |
|
8 |
|
| 9 |
#define MAXBITS 15
|
9 |
#define MAXBITS 15
|
| 10 |
|
10 |
|
| 11 |
const char inflate_copyright[] =
|
11 |
const char inflate_copyright[] =
|
| 12 |
" inflate 1.2.7 Copyright 1995-2012 Mark Adler ";
|
12 |
" inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
|
| 13 |
/*
|
13 |
/*
|
| 14 |
If you use the zlib library in a product, an acknowledgment is welcome
|
14 |
If you use the zlib library in a product, an acknowledgment is welcome
|
| 15 |
in the documentation of your product. If for some reason you cannot
|
15 |
in the documentation of your product. If for some reason you cannot
|
| 16 |
include such an acknowledgment, I would appreciate that you keep this
|
16 |
include such an acknowledgment, I would appreciate that you keep this
|
| 17 |
copyright string in the executable of your product.
|
17 |
copyright string in the executable of your product.
|
| Line 60... |
Line 60... |
| 60 |
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
|
60 |
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
|
| 61 |
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
|
61 |
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
|
| 62 |
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
62 |
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
| 63 |
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
63 |
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
| 64 |
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
64 |
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
| 65 |
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 78, 68};
|
65 |
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
|
| 66 |
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
66 |
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
| 67 |
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
67 |
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
| 68 |
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
68 |
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
| 69 |
8193, 12289, 16385, 24577, 0, 0};
|
69 |
8193, 12289, 16385, 24577, 0, 0};
|
| 70 |
static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
|
70 |
static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
|
| Line 206... |
Line 206... |
| 206 |
low = (unsigned)(-1); /* trigger new sub-table when len > root */
|
206 |
low = (unsigned)(-1); /* trigger new sub-table when len > root */
|
| 207 |
used = 1U << root; /* use root table entries */
|
207 |
used = 1U << root; /* use root table entries */
|
| 208 |
mask = used - 1; /* mask for comparing low */
|
208 |
mask = used - 1; /* mask for comparing low */
|
| 209 |
|
209 |
|
| 210 |
/* check available table space */
|
210 |
/* check available table space */
|
| 211 |
if ((type == LENS && used >= ENOUGH_LENS) ||
|
211 |
if ((type == LENS && used > ENOUGH_LENS) ||
|
| 212 |
(type == DISTS && used >= ENOUGH_DISTS))
|
212 |
(type == DISTS && used > ENOUGH_DISTS))
|
| 213 |
return 1;
|
213 |
return 1;
|
| 214 |
|
214 |
|
| 215 |
/* process all codes and make table entries */
|
215 |
/* process all codes and make table entries */
|
| 216 |
for (;;) {
|
216 |
for (;;) {
|
| 217 |
/* create table entry */
|
217 |
/* create table entry */
|
| Line 275... |
Line 275... |
| 275 |
left <<= 1;
|
275 |
left <<= 1;
|
| 276 |
}
|
276 |
}
|
| 277 |
|
277 |
|
| 278 |
/* check for enough space */
|
278 |
/* check for enough space */
|
| 279 |
used += 1U << curr;
|
279 |
used += 1U << curr;
|
| 280 |
if ((type == LENS && used >= ENOUGH_LENS) ||
|
280 |
if ((type == LENS && used > ENOUGH_LENS) ||
|
| 281 |
(type == DISTS && used >= ENOUGH_DISTS))
|
281 |
(type == DISTS && used > ENOUGH_DISTS))
|
| 282 |
return 1;
|
282 |
return 1;
|
| 283 |
|
283 |
|
| 284 |
/* point entry in root table to sub-table */
|
284 |
/* point entry in root table to sub-table */
|
| 285 |
low = huff & mask;
|
285 |
low = huff & mask;
|
| 286 |
(*table)[low].op = (unsigned char)curr;
|
286 |
(*table)[low].op = (unsigned char)curr;
|