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