inftrees.c revision 1.1.1.1.2.2 1 1.1.1.1.2.2 pgoyette /* inftrees.c -- generate Huffman trees for efficient decoding
2 1.1.1.1.2.2 pgoyette * Copyright (C) 1995-2012 Mark Adler
3 1.1.1.1.2.2 pgoyette * For conditions of distribution and use, see copyright notice in zlib.h
4 1.1.1.1.2.2 pgoyette */
5 1.1.1.1.2.2 pgoyette
6 1.1.1.1.2.2 pgoyette #include "zutil.h"
7 1.1.1.1.2.2 pgoyette #include "inftrees.h"
8 1.1.1.1.2.2 pgoyette
9 1.1.1.1.2.2 pgoyette #define MAXBITS 15
10 1.1.1.1.2.2 pgoyette
11 1.1.1.1.2.2 pgoyette const char inflate_copyright[] =
12 1.1.1.1.2.2 pgoyette " inflate 1.2.7 Copyright 1995-2012 Mark Adler ";
13 1.1.1.1.2.2 pgoyette /*
14 1.1.1.1.2.2 pgoyette If you use the zlib library in a product, an acknowledgment is welcome
15 1.1.1.1.2.2 pgoyette in the documentation of your product. If for some reason you cannot
16 1.1.1.1.2.2 pgoyette include such an acknowledgment, I would appreciate that you keep this
17 1.1.1.1.2.2 pgoyette copyright string in the executable of your product.
18 1.1.1.1.2.2 pgoyette */
19 1.1.1.1.2.2 pgoyette
20 1.1.1.1.2.2 pgoyette /*
21 1.1.1.1.2.2 pgoyette Build a set of tables to decode the provided canonical Huffman code.
22 1.1.1.1.2.2 pgoyette The code lengths are lens[0..codes-1]. The result starts at *table,
23 1.1.1.1.2.2 pgoyette whose indices are 0..2^bits-1. work is a writable array of at least
24 1.1.1.1.2.2 pgoyette lens shorts, which is used as a work area. type is the type of code
25 1.1.1.1.2.2 pgoyette to be generated, CODES, LENS, or DISTS. On return, zero is success,
26 1.1.1.1.2.2 pgoyette -1 is an invalid code, and +1 means that ENOUGH isn't enough. table
27 1.1.1.1.2.2 pgoyette on return points to the next available entry's address. bits is the
28 1.1.1.1.2.2 pgoyette requested root table index bits, and on return it is the actual root
29 1.1.1.1.2.2 pgoyette table index bits. It will differ if the request is greater than the
30 1.1.1.1.2.2 pgoyette longest code or if it is less than the shortest code.
31 1.1.1.1.2.2 pgoyette */
32 1.1.1.1.2.2 pgoyette int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
33 1.1.1.1.2.2 pgoyette codetype type;
34 1.1.1.1.2.2 pgoyette unsigned short FAR *lens;
35 1.1.1.1.2.2 pgoyette unsigned codes;
36 1.1.1.1.2.2 pgoyette code FAR * FAR *table;
37 1.1.1.1.2.2 pgoyette unsigned FAR *bits;
38 1.1.1.1.2.2 pgoyette unsigned short FAR *work;
39 1.1.1.1.2.2 pgoyette {
40 1.1.1.1.2.2 pgoyette unsigned len; /* a code's length in bits */
41 1.1.1.1.2.2 pgoyette unsigned sym; /* index of code symbols */
42 1.1.1.1.2.2 pgoyette unsigned min, max; /* minimum and maximum code lengths */
43 1.1.1.1.2.2 pgoyette unsigned root; /* number of index bits for root table */
44 1.1.1.1.2.2 pgoyette unsigned curr; /* number of index bits for current table */
45 1.1.1.1.2.2 pgoyette unsigned drop; /* code bits to drop for sub-table */
46 1.1.1.1.2.2 pgoyette int left; /* number of prefix codes available */
47 1.1.1.1.2.2 pgoyette unsigned used; /* code entries in table used */
48 1.1.1.1.2.2 pgoyette unsigned huff; /* Huffman code */
49 1.1.1.1.2.2 pgoyette unsigned incr; /* for incrementing code, index */
50 1.1.1.1.2.2 pgoyette unsigned fill; /* index for replicating entries */
51 1.1.1.1.2.2 pgoyette unsigned low; /* low bits for current root entry */
52 1.1.1.1.2.2 pgoyette unsigned mask; /* mask for low root bits */
53 1.1.1.1.2.2 pgoyette code here; /* table entry for duplication */
54 1.1.1.1.2.2 pgoyette code FAR *next; /* next available space in table */
55 1.1.1.1.2.2 pgoyette const unsigned short FAR *base; /* base value table to use */
56 1.1.1.1.2.2 pgoyette const unsigned short FAR *extra; /* extra bits table to use */
57 1.1.1.1.2.2 pgoyette int end; /* use base and extra for symbol > end */
58 1.1.1.1.2.2 pgoyette unsigned short count[MAXBITS+1]; /* number of codes of each length */
59 1.1.1.1.2.2 pgoyette unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
60 1.1.1.1.2.2 pgoyette static const unsigned short lbase[31] = { /* Length codes 257..285 base */
61 1.1.1.1.2.2 pgoyette 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
62 1.1.1.1.2.2 pgoyette 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
63 1.1.1.1.2.2 pgoyette static const unsigned short lext[31] = { /* Length codes 257..285 extra */
64 1.1.1.1.2.2 pgoyette 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
65 1.1.1.1.2.2 pgoyette 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 78, 68};
66 1.1.1.1.2.2 pgoyette static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
67 1.1.1.1.2.2 pgoyette 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
68 1.1.1.1.2.2 pgoyette 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
69 1.1.1.1.2.2 pgoyette 8193, 12289, 16385, 24577, 0, 0};
70 1.1.1.1.2.2 pgoyette static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
71 1.1.1.1.2.2 pgoyette 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
72 1.1.1.1.2.2 pgoyette 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
73 1.1.1.1.2.2 pgoyette 28, 28, 29, 29, 64, 64};
74 1.1.1.1.2.2 pgoyette
75 1.1.1.1.2.2 pgoyette /*
76 1.1.1.1.2.2 pgoyette Process a set of code lengths to create a canonical Huffman code. The
77 1.1.1.1.2.2 pgoyette code lengths are lens[0..codes-1]. Each length corresponds to the
78 1.1.1.1.2.2 pgoyette symbols 0..codes-1. The Huffman code is generated by first sorting the
79 1.1.1.1.2.2 pgoyette symbols by length from short to long, and retaining the symbol order
80 1.1.1.1.2.2 pgoyette for codes with equal lengths. Then the code starts with all zero bits
81 1.1.1.1.2.2 pgoyette for the first code of the shortest length, and the codes are integer
82 1.1.1.1.2.2 pgoyette increments for the same length, and zeros are appended as the length
83 1.1.1.1.2.2 pgoyette increases. For the deflate format, these bits are stored backwards
84 1.1.1.1.2.2 pgoyette from their more natural integer increment ordering, and so when the
85 1.1.1.1.2.2 pgoyette decoding tables are built in the large loop below, the integer codes
86 1.1.1.1.2.2 pgoyette are incremented backwards.
87 1.1.1.1.2.2 pgoyette
88 1.1.1.1.2.2 pgoyette This routine assumes, but does not check, that all of the entries in
89 1.1.1.1.2.2 pgoyette lens[] are in the range 0..MAXBITS. The caller must assure this.
90 1.1.1.1.2.2 pgoyette 1..MAXBITS is interpreted as that code length. zero means that that
91 1.1.1.1.2.2 pgoyette symbol does not occur in this code.
92 1.1.1.1.2.2 pgoyette
93 1.1.1.1.2.2 pgoyette The codes are sorted by computing a count of codes for each length,
94 1.1.1.1.2.2 pgoyette creating from that a table of starting indices for each length in the
95 1.1.1.1.2.2 pgoyette sorted table, and then entering the symbols in order in the sorted
96 1.1.1.1.2.2 pgoyette table. The sorted table is work[], with that space being provided by
97 1.1.1.1.2.2 pgoyette the caller.
98 1.1.1.1.2.2 pgoyette
99 1.1.1.1.2.2 pgoyette The length counts are used for other purposes as well, i.e. finding
100 1.1.1.1.2.2 pgoyette the minimum and maximum length codes, determining if there are any
101 1.1.1.1.2.2 pgoyette codes at all, checking for a valid set of lengths, and looking ahead
102 1.1.1.1.2.2 pgoyette at length counts to determine sub-table sizes when building the
103 1.1.1.1.2.2 pgoyette decoding tables.
104 1.1.1.1.2.2 pgoyette */
105 1.1.1.1.2.2 pgoyette
106 1.1.1.1.2.2 pgoyette /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
107 1.1.1.1.2.2 pgoyette for (len = 0; len <= MAXBITS; len++)
108 1.1.1.1.2.2 pgoyette count[len] = 0;
109 1.1.1.1.2.2 pgoyette for (sym = 0; sym < codes; sym++)
110 1.1.1.1.2.2 pgoyette count[lens[sym]]++;
111 1.1.1.1.2.2 pgoyette
112 1.1.1.1.2.2 pgoyette /* bound code lengths, force root to be within code lengths */
113 1.1.1.1.2.2 pgoyette root = *bits;
114 1.1.1.1.2.2 pgoyette for (max = MAXBITS; max >= 1; max--)
115 1.1.1.1.2.2 pgoyette if (count[max] != 0) break;
116 1.1.1.1.2.2 pgoyette if (root > max) root = max;
117 1.1.1.1.2.2 pgoyette if (max == 0) { /* no symbols to code at all */
118 1.1.1.1.2.2 pgoyette here.op = (unsigned char)64; /* invalid code marker */
119 1.1.1.1.2.2 pgoyette here.bits = (unsigned char)1;
120 1.1.1.1.2.2 pgoyette here.val = (unsigned short)0;
121 1.1.1.1.2.2 pgoyette *(*table)++ = here; /* make a table to force an error */
122 1.1.1.1.2.2 pgoyette *(*table)++ = here;
123 1.1.1.1.2.2 pgoyette *bits = 1;
124 1.1.1.1.2.2 pgoyette return 0; /* no symbols, but wait for decoding to report error */
125 1.1.1.1.2.2 pgoyette }
126 1.1.1.1.2.2 pgoyette for (min = 1; min < max; min++)
127 1.1.1.1.2.2 pgoyette if (count[min] != 0) break;
128 1.1.1.1.2.2 pgoyette if (root < min) root = min;
129 1.1.1.1.2.2 pgoyette
130 1.1.1.1.2.2 pgoyette /* check for an over-subscribed or incomplete set of lengths */
131 1.1.1.1.2.2 pgoyette left = 1;
132 1.1.1.1.2.2 pgoyette for (len = 1; len <= MAXBITS; len++) {
133 1.1.1.1.2.2 pgoyette left <<= 1;
134 1.1.1.1.2.2 pgoyette left -= count[len];
135 1.1.1.1.2.2 pgoyette if (left < 0) return -1; /* over-subscribed */
136 1.1.1.1.2.2 pgoyette }
137 1.1.1.1.2.2 pgoyette if (left > 0 && (type == CODES || max != 1))
138 1.1.1.1.2.2 pgoyette return -1; /* incomplete set */
139 1.1.1.1.2.2 pgoyette
140 1.1.1.1.2.2 pgoyette /* generate offsets into symbol table for each length for sorting */
141 1.1.1.1.2.2 pgoyette offs[1] = 0;
142 1.1.1.1.2.2 pgoyette for (len = 1; len < MAXBITS; len++)
143 1.1.1.1.2.2 pgoyette offs[len + 1] = offs[len] + count[len];
144 1.1.1.1.2.2 pgoyette
145 1.1.1.1.2.2 pgoyette /* sort symbols by length, by symbol order within each length */
146 1.1.1.1.2.2 pgoyette for (sym = 0; sym < codes; sym++)
147 1.1.1.1.2.2 pgoyette if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
148 1.1.1.1.2.2 pgoyette
149 1.1.1.1.2.2 pgoyette /*
150 1.1.1.1.2.2 pgoyette Create and fill in decoding tables. In this loop, the table being
151 1.1.1.1.2.2 pgoyette filled is at next and has curr index bits. The code being used is huff
152 1.1.1.1.2.2 pgoyette with length len. That code is converted to an index by dropping drop
153 1.1.1.1.2.2 pgoyette bits off of the bottom. For codes where len is less than drop + curr,
154 1.1.1.1.2.2 pgoyette those top drop + curr - len bits are incremented through all values to
155 1.1.1.1.2.2 pgoyette fill the table with replicated entries.
156 1.1.1.1.2.2 pgoyette
157 1.1.1.1.2.2 pgoyette root is the number of index bits for the root table. When len exceeds
158 1.1.1.1.2.2 pgoyette root, sub-tables are created pointed to by the root entry with an index
159 1.1.1.1.2.2 pgoyette of the low root bits of huff. This is saved in low to check for when a
160 1.1.1.1.2.2 pgoyette new sub-table should be started. drop is zero when the root table is
161 1.1.1.1.2.2 pgoyette being filled, and drop is root when sub-tables are being filled.
162 1.1.1.1.2.2 pgoyette
163 1.1.1.1.2.2 pgoyette When a new sub-table is needed, it is necessary to look ahead in the
164 1.1.1.1.2.2 pgoyette code lengths to determine what size sub-table is needed. The length
165 1.1.1.1.2.2 pgoyette counts are used for this, and so count[] is decremented as codes are
166 1.1.1.1.2.2 pgoyette entered in the tables.
167 1.1.1.1.2.2 pgoyette
168 1.1.1.1.2.2 pgoyette used keeps track of how many table entries have been allocated from the
169 1.1.1.1.2.2 pgoyette provided *table space. It is checked for LENS and DIST tables against
170 1.1.1.1.2.2 pgoyette the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
171 1.1.1.1.2.2 pgoyette the initial root table size constants. See the comments in inftrees.h
172 1.1.1.1.2.2 pgoyette for more information.
173 1.1.1.1.2.2 pgoyette
174 1.1.1.1.2.2 pgoyette sym increments through all symbols, and the loop terminates when
175 1.1.1.1.2.2 pgoyette all codes of length max, i.e. all codes, have been processed. This
176 1.1.1.1.2.2 pgoyette routine permits incomplete codes, so another loop after this one fills
177 1.1.1.1.2.2 pgoyette in the rest of the decoding tables with invalid code markers.
178 1.1.1.1.2.2 pgoyette */
179 1.1.1.1.2.2 pgoyette
180 1.1.1.1.2.2 pgoyette /* set up for code type */
181 1.1.1.1.2.2 pgoyette switch (type) {
182 1.1.1.1.2.2 pgoyette case CODES:
183 1.1.1.1.2.2 pgoyette base = extra = work; /* dummy value--not used */
184 1.1.1.1.2.2 pgoyette end = 19;
185 1.1.1.1.2.2 pgoyette break;
186 1.1.1.1.2.2 pgoyette case LENS:
187 1.1.1.1.2.2 pgoyette base = lbase;
188 1.1.1.1.2.2 pgoyette base -= 257;
189 1.1.1.1.2.2 pgoyette extra = lext;
190 1.1.1.1.2.2 pgoyette extra -= 257;
191 1.1.1.1.2.2 pgoyette end = 256;
192 1.1.1.1.2.2 pgoyette break;
193 1.1.1.1.2.2 pgoyette default: /* DISTS */
194 1.1.1.1.2.2 pgoyette base = dbase;
195 1.1.1.1.2.2 pgoyette extra = dext;
196 1.1.1.1.2.2 pgoyette end = -1;
197 1.1.1.1.2.2 pgoyette }
198 1.1.1.1.2.2 pgoyette
199 1.1.1.1.2.2 pgoyette /* initialize state for loop */
200 1.1.1.1.2.2 pgoyette huff = 0; /* starting code */
201 1.1.1.1.2.2 pgoyette sym = 0; /* starting code symbol */
202 1.1.1.1.2.2 pgoyette len = min; /* starting code length */
203 1.1.1.1.2.2 pgoyette next = *table; /* current table to fill in */
204 1.1.1.1.2.2 pgoyette curr = root; /* current table index bits */
205 1.1.1.1.2.2 pgoyette drop = 0; /* current bits to drop from code for index */
206 1.1.1.1.2.2 pgoyette low = (unsigned)(-1); /* trigger new sub-table when len > root */
207 1.1.1.1.2.2 pgoyette used = 1U << root; /* use root table entries */
208 1.1.1.1.2.2 pgoyette mask = used - 1; /* mask for comparing low */
209 1.1.1.1.2.2 pgoyette
210 1.1.1.1.2.2 pgoyette /* check available table space */
211 1.1.1.1.2.2 pgoyette if ((type == LENS && used >= ENOUGH_LENS) ||
212 1.1.1.1.2.2 pgoyette (type == DISTS && used >= ENOUGH_DISTS))
213 1.1.1.1.2.2 pgoyette return 1;
214 1.1.1.1.2.2 pgoyette
215 1.1.1.1.2.2 pgoyette /* process all codes and make table entries */
216 1.1.1.1.2.2 pgoyette for (;;) {
217 1.1.1.1.2.2 pgoyette /* create table entry */
218 1.1.1.1.2.2 pgoyette here.bits = (unsigned char)(len - drop);
219 1.1.1.1.2.2 pgoyette if ((int)(work[sym]) < end) {
220 1.1.1.1.2.2 pgoyette here.op = (unsigned char)0;
221 1.1.1.1.2.2 pgoyette here.val = work[sym];
222 1.1.1.1.2.2 pgoyette }
223 1.1.1.1.2.2 pgoyette else if ((int)(work[sym]) > end) {
224 1.1.1.1.2.2 pgoyette here.op = (unsigned char)(extra[work[sym]]);
225 1.1.1.1.2.2 pgoyette here.val = base[work[sym]];
226 1.1.1.1.2.2 pgoyette }
227 1.1.1.1.2.2 pgoyette else {
228 1.1.1.1.2.2 pgoyette here.op = (unsigned char)(32 + 64); /* end of block */
229 1.1.1.1.2.2 pgoyette here.val = 0;
230 1.1.1.1.2.2 pgoyette }
231 1.1.1.1.2.2 pgoyette
232 1.1.1.1.2.2 pgoyette /* replicate for those indices with low len bits equal to huff */
233 1.1.1.1.2.2 pgoyette incr = 1U << (len - drop);
234 1.1.1.1.2.2 pgoyette fill = 1U << curr;
235 1.1.1.1.2.2 pgoyette min = fill; /* save offset to next table */
236 1.1.1.1.2.2 pgoyette do {
237 1.1.1.1.2.2 pgoyette fill -= incr;
238 1.1.1.1.2.2 pgoyette next[(huff >> drop) + fill] = here;
239 1.1.1.1.2.2 pgoyette } while (fill != 0);
240 1.1.1.1.2.2 pgoyette
241 1.1.1.1.2.2 pgoyette /* backwards increment the len-bit code huff */
242 1.1.1.1.2.2 pgoyette incr = 1U << (len - 1);
243 1.1.1.1.2.2 pgoyette while (huff & incr)
244 1.1.1.1.2.2 pgoyette incr >>= 1;
245 1.1.1.1.2.2 pgoyette if (incr != 0) {
246 1.1.1.1.2.2 pgoyette huff &= incr - 1;
247 1.1.1.1.2.2 pgoyette huff += incr;
248 1.1.1.1.2.2 pgoyette }
249 1.1.1.1.2.2 pgoyette else
250 1.1.1.1.2.2 pgoyette huff = 0;
251 1.1.1.1.2.2 pgoyette
252 1.1.1.1.2.2 pgoyette /* go to next symbol, update count, len */
253 1.1.1.1.2.2 pgoyette sym++;
254 1.1.1.1.2.2 pgoyette if (--(count[len]) == 0) {
255 1.1.1.1.2.2 pgoyette if (len == max) break;
256 1.1.1.1.2.2 pgoyette len = lens[work[sym]];
257 1.1.1.1.2.2 pgoyette }
258 1.1.1.1.2.2 pgoyette
259 1.1.1.1.2.2 pgoyette /* create new sub-table if needed */
260 1.1.1.1.2.2 pgoyette if (len > root && (huff & mask) != low) {
261 1.1.1.1.2.2 pgoyette /* if first time, transition to sub-tables */
262 1.1.1.1.2.2 pgoyette if (drop == 0)
263 1.1.1.1.2.2 pgoyette drop = root;
264 1.1.1.1.2.2 pgoyette
265 1.1.1.1.2.2 pgoyette /* increment past last table */
266 1.1.1.1.2.2 pgoyette next += min; /* here min is 1 << curr */
267 1.1.1.1.2.2 pgoyette
268 1.1.1.1.2.2 pgoyette /* determine length of next table */
269 1.1.1.1.2.2 pgoyette curr = len - drop;
270 1.1.1.1.2.2 pgoyette left = (int)(1 << curr);
271 1.1.1.1.2.2 pgoyette while (curr + drop < max) {
272 1.1.1.1.2.2 pgoyette left -= count[curr + drop];
273 1.1.1.1.2.2 pgoyette if (left <= 0) break;
274 1.1.1.1.2.2 pgoyette curr++;
275 1.1.1.1.2.2 pgoyette left <<= 1;
276 1.1.1.1.2.2 pgoyette }
277 1.1.1.1.2.2 pgoyette
278 1.1.1.1.2.2 pgoyette /* check for enough space */
279 1.1.1.1.2.2 pgoyette used += 1U << curr;
280 1.1.1.1.2.2 pgoyette if ((type == LENS && used >= ENOUGH_LENS) ||
281 1.1.1.1.2.2 pgoyette (type == DISTS && used >= ENOUGH_DISTS))
282 1.1.1.1.2.2 pgoyette return 1;
283 1.1.1.1.2.2 pgoyette
284 1.1.1.1.2.2 pgoyette /* point entry in root table to sub-table */
285 1.1.1.1.2.2 pgoyette low = huff & mask;
286 1.1.1.1.2.2 pgoyette (*table)[low].op = (unsigned char)curr;
287 1.1.1.1.2.2 pgoyette (*table)[low].bits = (unsigned char)root;
288 1.1.1.1.2.2 pgoyette (*table)[low].val = (unsigned short)(next - *table);
289 1.1.1.1.2.2 pgoyette }
290 1.1.1.1.2.2 pgoyette }
291 1.1.1.1.2.2 pgoyette
292 1.1.1.1.2.2 pgoyette /* fill in remaining table entry if code is incomplete (guaranteed to have
293 1.1.1.1.2.2 pgoyette at most one remaining entry, since if the code is incomplete, the
294 1.1.1.1.2.2 pgoyette maximum code length that was allowed to get this far is one bit) */
295 1.1.1.1.2.2 pgoyette if (huff != 0) {
296 1.1.1.1.2.2 pgoyette here.op = (unsigned char)64; /* invalid code marker */
297 1.1.1.1.2.2 pgoyette here.bits = (unsigned char)(len - drop);
298 1.1.1.1.2.2 pgoyette here.val = (unsigned short)0;
299 1.1.1.1.2.2 pgoyette next[huff] = here;
300 1.1.1.1.2.2 pgoyette }
301 1.1.1.1.2.2 pgoyette
302 1.1.1.1.2.2 pgoyette /* set return parameters */
303 1.1.1.1.2.2 pgoyette *table += used;
304 1.1.1.1.2.2 pgoyette *bits = root;
305 1.1.1.1.2.2 pgoyette return 0;
306 1.1.1.1.2.2 pgoyette }
307