Home | History | Annotate | Line # | Download | only in zlib
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