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