| OLD | NEW | 
|    1 /* inftrees.c -- generate Huffman trees for efficient decoding |    1 /* inftrees.c -- generate Huffman trees for efficient decoding | 
|    2  * Copyright (C) 1995-2013 Mark Adler |    2  * Copyright (C) 1995-2010 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.8 Copyright 1995-2013 Mark Adler "; |   12    " inflate 1.2.5 Copyright 1995-2010 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. | 
|   18  */ |   18  */ | 
|   19  |   19  | 
|   20 /* |   20 /* | 
|   21    Build a set of tables to decode the provided canonical Huffman code. |   21    Build a set of tables to decode the provided canonical Huffman code. | 
|   22    The code lengths are lens[0..codes-1].  The result starts at *table, |   22    The code lengths are lens[0..codes-1].  The result starts at *table, | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   55     const unsigned short FAR *base;     /* base value table to use */ |   55     const unsigned short FAR *base;     /* base value table to use */ | 
|   56     const unsigned short FAR *extra;    /* extra bits table to use */ |   56     const unsigned short FAR *extra;    /* extra bits table to use */ | 
|   57     int end;                    /* use base and extra for symbol > end */ |   57     int end;                    /* use base and extra for symbol > end */ | 
|   58     unsigned short count[MAXBITS+1];    /* number of codes of each length */ |   58     unsigned short count[MAXBITS+1];    /* number of codes of each length */ | 
|   59     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */ |   59     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */ | 
|   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, 72, 78}; |   65         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195}; | 
|   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 */ | 
|   71         16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, |   71         16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, | 
|   72         23, 23, 24, 24, 25, 25, 26, 26, 27, 27, |   72         23, 23, 24, 24, 25, 25, 26, 26, 27, 27, | 
|   73         28, 28, 29, 29, 64, 64}; |   73         28, 28, 29, 29, 64, 64}; | 
|   74  |   74  | 
|   75     /* |   75     /* | 
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  201     sym = 0;                    /* starting code symbol */ |  201     sym = 0;                    /* starting code symbol */ | 
|  202     len = min;                  /* starting code length */ |  202     len = min;                  /* starting code length */ | 
|  203     next = *table;              /* current table to fill in */ |  203     next = *table;              /* current table to fill in */ | 
|  204     curr = root;                /* current table index bits */ |  204     curr = root;                /* current table index bits */ | 
|  205     drop = 0;                   /* current bits to drop from code for index */ |  205     drop = 0;                   /* current bits to drop from code for index */ | 
|  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 */ | 
|  218         here.bits = (unsigned char)(len - drop); |  218         here.bits = (unsigned char)(len - drop); | 
|  219         if ((int)(work[sym]) < end) { |  219         if ((int)(work[sym]) < end) { | 
|  220             here.op = (unsigned char)0; |  220             here.op = (unsigned char)0; | 
|  221             here.val = work[sym]; |  221             here.val = work[sym]; | 
|  222         } |  222         } | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  270             left = (int)(1 << curr); |  270             left = (int)(1 << curr); | 
|  271             while (curr + drop < max) { |  271             while (curr + drop < max) { | 
|  272                 left -= count[curr + drop]; |  272                 left -= count[curr + drop]; | 
|  273                 if (left <= 0) break; |  273                 if (left <= 0) break; | 
|  274                 curr++; |  274                 curr++; | 
|  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; | 
|  287             (*table)[low].bits = (unsigned char)root; |  287             (*table)[low].bits = (unsigned char)root; | 
|  288             (*table)[low].val = (unsigned short)(next - *table); |  288             (*table)[low].val = (unsigned short)(next - *table); | 
|  289         } |  289         } | 
|  290     } |  290     } | 
|  291  |  291  | 
|  292     /* fill in remaining table entry if code is incomplete (guaranteed to have |  292     /* | 
|  293        at most one remaining entry, since if the code is incomplete, the |  293        Fill in rest of table for incomplete codes.  This loop is similar to the | 
|  294        maximum code length that was allowed to get this far is one bit) */ |  294        loop above in incrementing huff for table indices.  It is assumed that | 
|  295     if (huff != 0) { |  295        len is equal to curr + drop, so there is no loop needed to increment | 
|  296         here.op = (unsigned char)64;            /* invalid code marker */ |  296        through high index bits.  When the current sub-table is filled, the loop | 
|  297         here.bits = (unsigned char)(len - drop); |  297        drops back to the root table to fill in any remaining entries there. | 
|  298         here.val = (unsigned short)0; |  298      */ | 
|  299         next[huff] = here; |  299     here.op = (unsigned char)64;                /* invalid code marker */ | 
 |  300     here.bits = (unsigned char)(len - drop); | 
 |  301     here.val = (unsigned short)0; | 
 |  302     while (huff != 0) { | 
 |  303         /* when done with sub-table, drop back to root table */ | 
 |  304         if (drop != 0 && (huff & mask) != low) { | 
 |  305             drop = 0; | 
 |  306             len = root; | 
 |  307             next = *table; | 
 |  308             here.bits = (unsigned char)len; | 
 |  309         } | 
 |  310  | 
 |  311         /* put invalid code marker in table */ | 
 |  312         next[huff >> drop] = here; | 
 |  313  | 
 |  314         /* backwards increment the len-bit code huff */ | 
 |  315         incr = 1U << (len - 1); | 
 |  316         while (huff & incr) | 
 |  317             incr >>= 1; | 
 |  318         if (incr != 0) { | 
 |  319             huff &= incr - 1; | 
 |  320             huff += incr; | 
 |  321         } | 
 |  322         else | 
 |  323             huff = 0; | 
|  300     } |  324     } | 
|  301  |  325  | 
|  302     /* set return parameters */ |  326     /* set return parameters */ | 
|  303     *table += used; |  327     *table += used; | 
|  304     *bits = root; |  328     *bits = root; | 
|  305     return 0; |  329     return 0; | 
|  306 } |  330 } | 
| OLD | NEW |