inftrees.c (237691) | inftrees.c (254069) |
---|---|
1/* inftrees.c -- generate Huffman trees for efficient decoding | 1/* inftrees.c -- generate Huffman trees for efficient decoding |
2 * Copyright (C) 1995-2012 Mark Adler | 2 * Copyright (C) 1995-2013 Mark Adler |
3 * For conditions of distribution and use, see copyright notice in zlib.h 4 */ 5 6#include "zutil.h" 7#include "inftrees.h" 8 9#define MAXBITS 15 10 11const char inflate_copyright[] = | 3 * For conditions of distribution and use, see copyright notice in zlib.h 4 */ 5 6#include "zutil.h" 7#include "inftrees.h" 8 9#define MAXBITS 15 10 11const char inflate_copyright[] = |
12 " inflate 1.2.7 Copyright 1995-2012 Mark Adler "; | 12 " inflate 1.2.8 Copyright 1995-2013 Mark Adler "; |
13/* 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 16 include such an acknowledgment, I would appreciate that you keep this 17 copyright string in the executable of your product. 18 */ 19 20/* --- 36 unchanged lines hidden (view full) --- 57 int end; /* use base and extra for symbol > end */ 58 unsigned short count[MAXBITS+1]; /* number of codes of 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 */ 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}; 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, | 13/* 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 16 include such an acknowledgment, I would appreciate that you keep this 17 copyright string in the executable of your product. 18 */ 19 20/* --- 36 unchanged lines hidden (view full) --- 57 int end; /* use base and extra for symbol > end */ 58 unsigned short count[MAXBITS+1]; /* number of codes of 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 */ 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}; 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, |
65 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 78, 68}; | 65 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78}; |
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, 68 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 69 8193, 12289, 16385, 24577, 0, 0}; 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, 72 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 73 28, 28, 29, 29, 64, 64}; --- 129 unchanged lines hidden (view full) --- 203 next = *table; /* current table to fill in */ 204 curr = root; /* current table index bits */ 205 drop = 0; /* current bits to drop from code for index */ 206 low = (unsigned)(-1); /* trigger new sub-table when len > root */ 207 used = 1U << root; /* use root table entries */ 208 mask = used - 1; /* mask for comparing low */ 209 210 /* check available table space */ | 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, 68 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 69 8193, 12289, 16385, 24577, 0, 0}; 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, 72 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 73 28, 28, 29, 29, 64, 64}; --- 129 unchanged lines hidden (view full) --- 203 next = *table; /* current table to fill in */ 204 curr = root; /* current table index bits */ 205 drop = 0; /* current bits to drop from code for index */ 206 low = (unsigned)(-1); /* trigger new sub-table when len > root */ 207 used = 1U << root; /* use root table entries */ 208 mask = used - 1; /* mask for comparing low */ 209 210 /* check available table space */ |
211 if ((type == LENS && used >= ENOUGH_LENS) || 212 (type == DISTS && used >= ENOUGH_DISTS)) | 211 if ((type == LENS && used > ENOUGH_LENS) || 212 (type == DISTS && used > ENOUGH_DISTS)) |
213 return 1; 214 215 /* process all codes and make table entries */ 216 for (;;) { 217 /* create table entry */ 218 here.bits = (unsigned char)(len - drop); 219 if ((int)(work[sym]) < end) { 220 here.op = (unsigned char)0; --- 51 unchanged lines hidden (view full) --- 272 left -= count[curr + drop]; 273 if (left <= 0) break; 274 curr++; 275 left <<= 1; 276 } 277 278 /* check for enough space */ 279 used += 1U << curr; | 213 return 1; 214 215 /* process all codes and make table entries */ 216 for (;;) { 217 /* create table entry */ 218 here.bits = (unsigned char)(len - drop); 219 if ((int)(work[sym]) < end) { 220 here.op = (unsigned char)0; --- 51 unchanged lines hidden (view full) --- 272 left -= count[curr + drop]; 273 if (left <= 0) break; 274 curr++; 275 left <<= 1; 276 } 277 278 /* check for enough space */ 279 used += 1U << curr; |
280 if ((type == LENS && used >= ENOUGH_LENS) || 281 (type == DISTS && used >= ENOUGH_DISTS)) | 280 if ((type == LENS && used > ENOUGH_LENS) || 281 (type == DISTS && used > ENOUGH_DISTS)) |
282 return 1; 283 284 /* point entry in root table to sub-table */ 285 low = huff & mask; 286 (*table)[low].op = (unsigned char)curr; 287 (*table)[low].bits = (unsigned char)root; 288 (*table)[low].val = (unsigned short)(next - *table); 289 } --- 17 unchanged lines hidden --- | 282 return 1; 283 284 /* point entry in root table to sub-table */ 285 low = huff & mask; 286 (*table)[low].op = (unsigned char)curr; 287 (*table)[low].bits = (unsigned char)root; 288 (*table)[low].val = (unsigned short)(next - *table); 289 } --- 17 unchanged lines hidden --- |