1 /* deflate.c -- compress data using the deflation algorithm
3 * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
5 * This software is provided 'as-is', without any express or implied
6 * warranty. In no event will the authors be held liable for any damages
7 * arising from the use of this software.
9 * Permission is granted to anyone to use this software for any purpose,
10 * including commercial applications, and to alter it and redistribute it
11 * freely, subject to the following restrictions:
13 * 1. The origin of this software must not be misrepresented; you must not
14 * claim that you wrote the original software. If you use this software
15 * in a product, an acknowledgment in the product documentation would be
16 * appreciated but is not required.
17 * 2. Altered source versions must be plainly marked as such, and must not be
18 * misrepresented as being the original software.
19 * 3. This notice may not be removed or altered from any source distribution.
21 * Jean-loup Gailly Mark Adler
22 * jloup@gzip.org madler@alumni.caltech.edu
30 #define DEF_MEM_LEVEL 8
31 #define DEF_WBITS MAX_WBITS
32 #define zmemcpy memcpy
33 #define zmemzero(dest, len) memset(dest, 0, len)
35 #define Assert(cond,msg)
41 #define ZALLOC(strm, items, size) \
42 (*((strm)->zalloc))((strm)->opaque, (items), (size))
43 #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
44 #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
46 /* Reverse the bytes in a 32-bit value */
47 #define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
48 (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
50 static const char * const z_errmsg
[10] = {
51 (z_const
char *)"need dictionary", /* Z_NEED_DICT 2 */
52 (z_const
char *)"stream end", /* Z_STREAM_END 1 */
53 (z_const
char *)"", /* Z_OK 0 */
54 (z_const
char *)"file error", /* Z_ERRNO (-1) */
55 (z_const
char *)"stream error", /* Z_STREAM_ERROR (-2) */
56 (z_const
char *)"data error", /* Z_DATA_ERROR (-3) */
57 (z_const
char *)"insufficient memory", /* Z_MEM_ERROR (-4) */
58 (z_const
char *)"buffer error", /* Z_BUF_ERROR (-5) */
59 (z_const
char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
63 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
65 #define ERR_RETURN(strm,err) \
66 return (strm->msg = ERR_MSG(err), (err))
67 /* To be used only when the state is known to be valid */
69 #define STORED_BLOCK 0
70 #define STATIC_TREES 1
72 /* The three kinds of block type */
76 /* The minimum and maximum match lengths */
78 #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
80 #define BASE 65521U /* largest prime smaller than 65536 */
82 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
84 #define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
85 #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
86 #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
87 #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
88 #define DO16(buf) DO8(buf,0); DO8(buf,8);
90 #define MOD(a) a %= BASE
91 #define MOD28(a) a %= BASE
92 #define MOD63(a) a %= BASE
94 static uLong
adler32( uLong adler
, const Bytef
*buf
, uInt len
)
99 /* split Adler-32 into component sums */
100 sum2
= (adler
>> 16) & 0xffff;
103 /* in case user likes doing a byte at a time, keep it fast */
111 return adler
| (sum2
<< 16);
114 /* initial Adler-32 value (deferred check for len == 1 speed) */
118 /* in case short lengths are provided, keep it somewhat fast */
126 MOD28(sum2
); /* only added so many BASE's */
127 return adler
| (sum2
<< 16);
130 /* do length NMAX blocks -- requires just one modulo operation */
131 while (len
>= NMAX
) {
133 n
= NMAX
/ 16; /* NMAX is divisible by 16 */
135 DO16(buf
); /* 16 sums unrolled */
142 /* do remaining bytes (less than NMAX, still just one modulo) */
143 if (len
) { /* avoid modulos if none remaining */
157 /* return recombined sums */
158 return adler
| (sum2
<< 16);
161 /* ===========================================================================
162 * Internal compression state.
165 #define LENGTH_CODES 29
166 /* number of length codes, not counting the special END_BLOCK code */
169 /* number of literal bytes 0..255 */
171 #define L_CODES (LITERALS+1+LENGTH_CODES)
172 /* number of Literal or Length codes, including the END_BLOCK code */
175 /* number of distance codes */
178 /* number of codes used to transfer the bit lengths */
180 #define HEAP_SIZE (2*L_CODES+1)
181 /* maximum heap size */
184 /* All codes must not exceed MAX_BITS bits */
187 /* size of bit buffer in bi_buf */
189 #define INIT_STATE 42 /* zlib header -> BUSY_STATE */
191 # define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */
193 #define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */
194 #define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */
195 #define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */
196 #define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */
197 #define BUSY_STATE 113 /* deflate -> FINISH_STATE */
198 #define FINISH_STATE 666 /* stream complete */
202 /* Data structure describing a single value and its code string. */
203 typedef struct ct_data_s
{
205 ush freq
; /* frequency count */
206 ush code
; /* bit string */
209 ush dad
; /* father node in Huffman tree */
210 ush len
; /* length of bit string */
219 typedef struct static_tree_desc_s static_tree_desc
;
221 typedef struct tree_desc_s
{
222 ct_data
*dyn_tree
; /* the dynamic tree */
223 int max_code
; /* largest code with non zero frequency */
224 const static_tree_desc
*stat_desc
; /* the corresponding static tree */
228 typedef Pos FAR Posf
;
229 typedef unsigned IPos
;
231 /* A Pos is an index in the character window. We use short instead of int to
232 * save space in the various tables. IPos is used only for parameter passing.
235 typedef struct internal_state
{
236 z_streamp strm
; /* pointer back to this zlib stream */
237 int status
; /* as the name implies */
238 Bytef
*pending_buf
; /* output still pending */
239 ulg pending_buf_size
; /* size of pending_buf */
240 Bytef
*pending_out
; /* next pending byte to output to the stream */
241 ulg pending
; /* nb of bytes in the pending buffer */
242 int wrap
; /* bit 0 true for zlib, bit 1 true for gzip */
243 gz_headerp gzhead
; /* gzip header information to write */
244 ulg gzindex
; /* where in extra, name, or comment */
245 Byte method
; /* can only be DEFLATED */
246 int last_flush
; /* value of flush param for previous deflate call */
248 /* used by deflate.c: */
250 uInt w_size
; /* LZ77 window size (32K by default) */
251 uInt w_bits
; /* log2(w_size) (8..16) */
252 uInt w_mask
; /* w_size - 1 */
255 /* Sliding window. Input bytes are read into the second half of the window,
256 * and move to the first half later to keep a dictionary of at least wSize
257 * bytes. With this organization, matches are limited to a distance of
258 * wSize-MAX_MATCH bytes, but this ensures that IO is always
259 * performed with a length multiple of the block size. Also, it limits
260 * the window size to 64K, which is quite useful on MSDOS.
261 * To do: use the user input buffer as sliding window.
265 /* Actual size of window: 2*wSize, except when the user input buffer
266 * is directly used as sliding window.
270 /* Link to older string with same hash index. To limit the size of this
271 * array to 64K, this link is maintained only for the last 32K strings.
272 * An index in this array is thus a window index modulo 32K.
275 Posf
*head
; /* Heads of the hash chains or NIL. */
277 uInt ins_h
; /* hash index of string to be inserted */
278 uInt hash_size
; /* number of elements in hash table */
279 uInt hash_bits
; /* log2(hash_size) */
280 uInt hash_mask
; /* hash_size-1 */
283 /* Number of bits by which ins_h must be shifted at each input
284 * step. It must be such that after MIN_MATCH steps, the oldest
285 * byte no longer takes part in the hash key, that is:
286 * hash_shift * MIN_MATCH >= hash_bits
290 /* Window position at the beginning of the current output block. Gets
291 * negative when the window is moved backwards.
294 uInt match_length
; /* length of best match */
295 IPos prev_match
; /* previous match */
296 int match_available
; /* set if previous match exists */
297 uInt strstart
; /* start of string to insert */
298 uInt match_start
; /* start of matching string */
299 uInt lookahead
; /* number of valid bytes ahead in window */
302 /* Length of the best match at previous step. Matches not greater than this
303 * are discarded. This is used in the lazy match evaluation.
306 uInt max_chain_length
;
307 /* To speed up deflation, hash chains are never searched beyond this
308 * length. A higher limit improves compression ratio but degrades the
313 /* Attempt to find a better match only when the current match is strictly
314 * smaller than this value. This mechanism is used only for compression
317 # define max_insert_length max_lazy_match
318 /* Insert new strings in the hash table only if the match length is not
319 * greater than this length. This saves time but degrades compression.
320 * max_insert_length is used only for compression levels <= 3.
323 int level
; /* compression level (1..9) */
324 int strategy
; /* favor or force Huffman coding*/
327 /* Use a faster search when the previous match is longer than this */
329 int nice_match
; /* Stop searching when current match exceeds this */
331 /* used by trees.c: */
332 /* Didn't use ct_data typedef below to suppress compiler warning */
333 struct ct_data_s dyn_ltree
[HEAP_SIZE
]; /* literal and length tree */
334 struct ct_data_s dyn_dtree
[2*D_CODES
+1]; /* distance tree */
335 struct ct_data_s bl_tree
[2*BL_CODES
+1]; /* Huffman tree for bit lengths */
337 struct tree_desc_s l_desc
; /* desc. for literal tree */
338 struct tree_desc_s d_desc
; /* desc. for distance tree */
339 struct tree_desc_s bl_desc
; /* desc. for bit length tree */
341 ush bl_count
[MAX_BITS
+1];
342 /* number of codes at each bit length for an optimal tree */
344 int heap
[2*L_CODES
+1]; /* heap used to build the Huffman trees */
345 int heap_len
; /* number of elements in the heap */
346 int heap_max
; /* element of largest frequency */
347 /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
348 * The same heap array is used to build all trees.
351 uch depth
[2*L_CODES
+1];
352 /* Depth of each subtree used as tie breaker for trees of equal frequency
355 uchf
*l_buf
; /* buffer for literals or lengths */
358 /* Size of match buffer for literals/lengths. There are 4 reasons for
359 * limiting lit_bufsize to 64K:
360 * - frequencies can be kept in 16 bit counters
361 * - if compression is not successful for the first block, all input
362 * data is still in the window so we can still emit a stored block even
363 * when input comes from standard input. (This can also be done for
364 * all blocks if lit_bufsize is not greater than 32K.)
365 * - if compression is not successful for a file smaller than 64K, we can
366 * even emit a stored file instead of a stored block (saving 5 bytes).
367 * This is applicable only for zip (not gzip or zlib).
368 * - creating new Huffman trees less frequently may not provide fast
369 * adaptation to changes in the input data statistics. (Take for
370 * example a binary file with poorly compressible code followed by
371 * a highly compressible string table.) Smaller buffer sizes give
372 * fast adaptation but have of course the overhead of transmitting
373 * trees more frequently.
374 * - I can't count above 4
377 uInt last_lit
; /* running index in l_buf */
380 /* Buffer for distances. To simplify the code, d_buf and l_buf have
381 * the same number of elements. To use different lengths, an extra flag
382 * array would be necessary.
385 ulg opt_len
; /* bit length of current block with optimal trees */
386 ulg static_len
; /* bit length of current block with static trees */
387 uInt matches
; /* number of string matches in current block */
388 uInt insert
; /* bytes at end of window left to insert */
391 ulg compressed_len
; /* total bit length of compressed file mod 2^32 */
392 ulg bits_sent
; /* bit length of compressed data sent mod 2^32 */
396 /* Output buffer. bits are inserted starting at the bottom (least
400 /* Number of valid bits in bi_buf. All bits above the last valid bit
405 /* High water mark offset in window for initialized bytes -- bytes above
406 * this are set to zero in order to avoid memory check warnings when
407 * longest match routines access bytes past the input. This is then
408 * updated to the new high water mark.
413 /* Output a byte on the stream.
414 * IN assertion: there is enough room in pending_buf.
416 #define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
419 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
420 /* Minimum amount of lookahead, except at the end of the input file.
421 * See deflate.c for comments about the MIN_MATCH+1.
424 #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
425 /* In order to simplify the code, particularly on 16 bit machines, match
426 * distances are limited to MAX_DIST instead of WSIZE.
429 #define WIN_INIT MAX_MATCH
430 /* Number of bytes after end of data in window to initialize in order to avoid
431 memory checker errors from longest match routines */
434 #define MAX_BL_BITS 7
435 /* Bit length codes must not exceed MAX_BL_BITS bits */
437 #define END_BLOCK 256
438 /* end of block literal code */
441 /* repeat previous bit length 3-6 times (2 bits of repeat count) */
444 /* repeat a zero length 3-10 times (3 bits of repeat count) */
446 #define REPZ_11_138 18
447 /* repeat a zero length 11-138 times (7 bits of repeat count) */
449 static const int extra_lbits
[LENGTH_CODES
] /* extra bits for each length code */
450 = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
452 static const int extra_dbits
[D_CODES
] /* extra bits for each distance code */
453 = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
455 static const int extra_blbits
[BL_CODES
]/* extra bits for each bit length code */
456 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
458 static const uch bl_order
[BL_CODES
]
459 = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
460 /* The lengths of the bit length codes are sent in order of decreasing
461 * probability, to avoid transmitting the lengths for unused bit length codes.
464 /* ===========================================================================
465 * Local data. These are initialized only once.
468 #define DIST_CODE_LEN 512 /* see definition of array dist_code below */
470 static const ct_data static_ltree
[L_CODES
+2] = {
471 {{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}},
472 {{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}},
473 {{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}},
474 {{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}},
475 {{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}},
476 {{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}},
477 {{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}},
478 {{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}},
479 {{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}},
480 {{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}},
481 {{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}},
482 {{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}},
483 {{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}},
484 {{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}},
485 {{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}},
486 {{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}},
487 {{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}},
488 {{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}},
489 {{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}},
490 {{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}},
491 {{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}},
492 {{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}},
493 {{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}},
494 {{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}},
495 {{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}},
496 {{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}},
497 {{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}},
498 {{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}},
499 {{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}},
500 {{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}},
501 {{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}},
502 {{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}},
503 {{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}},
504 {{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}},
505 {{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}},
506 {{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}},
507 {{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}},
508 {{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}},
509 {{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}},
510 {{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}},
511 {{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}},
512 {{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}},
513 {{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}},
514 {{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}},
515 {{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}},
516 {{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}},
517 {{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}},
518 {{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}},
519 {{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}},
520 {{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}},
521 {{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}},
522 {{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}},
523 {{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}},
524 {{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}},
525 {{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}},
526 {{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}},
527 {{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}},
528 {{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}}
531 static const ct_data static_dtree
[D_CODES
] = {
532 {{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
533 {{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
534 {{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
535 {{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
536 {{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
537 {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
540 static const uch _dist_code
[DIST_CODE_LEN
] = {
541 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
542 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
543 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
544 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
545 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
546 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
547 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
548 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
549 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
550 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
551 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
552 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
553 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
554 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
555 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
556 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
557 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
558 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
559 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
560 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
561 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
562 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
563 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
564 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
565 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
566 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
569 static const uch _length_code
[MAX_MATCH
-MIN_MATCH
+1]= {
570 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
571 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
572 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
573 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
574 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
575 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
576 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
577 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
578 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
579 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
580 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
581 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
582 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
585 static const int base_length
[LENGTH_CODES
] = {
586 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
587 64, 80, 96, 112, 128, 160, 192, 224, 0
590 static const int base_dist
[D_CODES
] = {
591 0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
592 32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
593 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
597 struct static_tree_desc_s
{
598 const ct_data
*static_tree
; /* static tree or NULL */
599 const intf
*extra_bits
; /* extra bits for each code or NULL */
600 int extra_base
; /* base index for extra_bits */
601 int elems
; /* max number of elements in the tree */
602 int max_length
; /* max bit length for the codes */
605 static const static_tree_desc static_l_desc
=
606 {static_ltree
, extra_lbits
, LITERALS
+1, L_CODES
, MAX_BITS
};
608 static const static_tree_desc static_d_desc
=
609 {static_dtree
, extra_dbits
, 0, D_CODES
, MAX_BITS
};
611 static const static_tree_desc static_bl_desc
=
612 {(const ct_data
*)0, extra_blbits
, 0, BL_CODES
, MAX_BL_BITS
};
614 #define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
615 /* Send a code of the given tree. c and tree must not have side effects */
617 #define d_code(dist) \
618 ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
619 /* Mapping from a distance to a distance code. dist is the distance - 1 and
620 * must not have side effects. _dist_code[256] and _dist_code[257] are never
624 # define _tr_tally_lit(s, c, flush) \
626 s->d_buf[s->last_lit] = 0; \
627 s->l_buf[s->last_lit++] = cc; \
628 s->dyn_ltree[cc].Freq++; \
629 flush = (s->last_lit == s->lit_bufsize-1); \
631 # define _tr_tally_dist(s, distance, length, flush) \
632 { uch len = (uch)(length); \
633 ush dist = (ush)(distance); \
634 s->d_buf[s->last_lit] = dist; \
635 s->l_buf[s->last_lit++] = len; \
637 s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
638 s->dyn_dtree[d_code(dist)].Freq++; \
639 flush = (s->last_lit == s->lit_bufsize-1); \
643 /* ===========================================================================
644 * Output a short LSB first on the stream.
645 * IN assertion: there is enough room in pendingBuf.
647 #define put_short(s, w) { \
648 put_byte(s, (uch)((w) & 0xff)); \
649 put_byte(s, (uch)((ush)(w) >> 8)); \
652 #define send_bits(s, value, length) \
654 if (s->bi_valid > (int)Buf_size - len) {\
655 int val = (int)value;\
656 s->bi_buf |= (ush)val << s->bi_valid;\
657 put_short(s, s->bi_buf);\
658 s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
659 s->bi_valid += len - Buf_size;\
661 s->bi_buf |= (ush)(value) << s->bi_valid;\
667 /* ===========================================================================
668 * Send the block data compressed using the given Huffman trees
670 static void compress_block( deflate_state
*s
, const ct_data
*ltree
, const ct_data
*dtree
)
672 unsigned dist
; /* distance of matched string */
673 int lc
; /* match length or unmatched char (if dist == 0) */
674 unsigned lx
= 0; /* running index in l_buf */
675 unsigned code
; /* the code to send */
676 int extra
; /* number of extra bits to send */
678 if (s
->last_lit
!= 0) do {
682 send_code(s
, lc
, ltree
); /* send a literal byte */
683 Tracecv(isgraph(lc
), (stderr
," '%c' ", lc
));
685 /* Here, lc is the match length - MIN_MATCH */
686 code
= _length_code
[lc
];
687 send_code(s
, code
+LITERALS
+1, ltree
); /* send the length code */
688 extra
= extra_lbits
[code
];
690 lc
-= base_length
[code
];
691 send_bits(s
, lc
, extra
); /* send the extra length bits */
693 dist
--; /* dist is now the match distance - 1 */
695 Assert (code
< D_CODES
, "bad d_code");
697 send_code(s
, code
, dtree
); /* send the distance code */
698 extra
= extra_dbits
[code
];
700 dist
-= (unsigned)base_dist
[code
];
701 send_bits(s
, dist
, extra
); /* send the extra distance bits */
703 } /* literal or match pair ? */
705 /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
706 Assert((uInt
)(s
->pending
) < s
->lit_bufsize
+ 2*lx
,
707 "pendingBuf overflow");
709 } while (lx
< s
->last_lit
);
711 send_code(s
, END_BLOCK
, ltree
);
714 /* ===========================================================================
715 * Check if the data type is TEXT or BINARY, using the following algorithm:
716 * - TEXT if the two conditions below are satisfied:
717 * a) There are no non-portable control characters belonging to the
718 * "black list" (0..6, 14..25, 28..31).
719 * b) There is at least one printable character belonging to the
720 * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
721 * - BINARY otherwise.
722 * - The following partially-portable control characters form a
723 * "gray list" that is ignored in this detection algorithm:
724 * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
725 * IN assertion: the fields Freq of dyn_ltree are set.
727 static int detect_data_type( deflate_state
*s
)
729 /* black_mask is the bit mask of black-listed bytes
730 * set bits 0..6, 14..25, and 28..31
731 * 0xf3ffc07f = binary 11110011111111111100000001111111
733 unsigned long black_mask
= 0xf3ffc07fUL
;
736 /* Check for non-textual ("black-listed") bytes. */
737 for (n
= 0; n
<= 31; n
++, black_mask
>>= 1)
738 if ((black_mask
& 1) && (s
->dyn_ltree
[n
].Freq
!= 0))
741 /* Check for textual ("white-listed") bytes. */
742 if (s
->dyn_ltree
[9].Freq
!= 0 || s
->dyn_ltree
[10].Freq
!= 0
743 || s
->dyn_ltree
[13].Freq
!= 0)
745 for (n
= 32; n
< LITERALS
; n
++)
746 if (s
->dyn_ltree
[n
].Freq
!= 0)
749 /* There are no "black-listed" or "white-listed" bytes:
750 * this stream either is empty or has tolerated ("gray-listed") bytes only.
755 /* ===========================================================================
756 * Reverse the first len bits of a code, using straightforward code (a faster
757 * method would use a table)
758 * IN assertion: 1 <= len <= 15
760 static unsigned bi_reverse( unsigned code
, int len
)
762 register unsigned res
= 0;
765 code
>>= 1, res
<<= 1;
770 /* ===========================================================================
771 * Flush the bit buffer, keeping at most 7 bits in it.
773 static void bi_flush( deflate_state
*s
)
775 if (s
->bi_valid
== 16) {
776 put_short(s
, s
->bi_buf
);
779 } else if (s
->bi_valid
>= 8) {
780 put_byte(s
, (Byte
)s
->bi_buf
);
786 /* ===========================================================================
787 * Flush the bit buffer and align the output on a byte boundary
789 static void bi_windup( deflate_state
*s
)
791 if (s
->bi_valid
> 8) {
792 put_short(s
, s
->bi_buf
);
793 } else if (s
->bi_valid
> 0) {
794 put_byte(s
, (Byte
)s
->bi_buf
);
799 s
->bits_sent
= (s
->bits_sent
+7) & ~7;
803 /* ===========================================================================
804 * Initialize a new block.
806 static void init_block( deflate_state
*s
)
808 int n
; /* iterates over tree elements */
810 /* Initialize the trees. */
811 for (n
= 0; n
< L_CODES
; n
++) s
->dyn_ltree
[n
].Freq
= 0;
812 for (n
= 0; n
< D_CODES
; n
++) s
->dyn_dtree
[n
].Freq
= 0;
813 for (n
= 0; n
< BL_CODES
; n
++) s
->bl_tree
[n
].Freq
= 0;
815 s
->dyn_ltree
[END_BLOCK
].Freq
= 1;
816 s
->opt_len
= s
->static_len
= 0L;
817 s
->last_lit
= s
->matches
= 0;
820 /* ===========================================================================
821 * Initialize the tree data structures for a new zlib stream.
823 static void _tr_init( deflate_state
*s
)
825 s
->l_desc
.dyn_tree
= s
->dyn_ltree
;
826 s
->l_desc
.stat_desc
= &static_l_desc
;
828 s
->d_desc
.dyn_tree
= s
->dyn_dtree
;
829 s
->d_desc
.stat_desc
= &static_d_desc
;
831 s
->bl_desc
.dyn_tree
= s
->bl_tree
;
832 s
->bl_desc
.stat_desc
= &static_bl_desc
;
837 s
->compressed_len
= 0L;
841 /* Initialize the first block of the first file: */
846 /* Index within the heap array of least frequent node in the Huffman tree */
849 /* ===========================================================================
850 * Remove the smallest element from the heap and recreate the heap with
851 * one less element. Updates heap and heap_len.
853 #define pqremove(s, tree, top) \
855 top = s->heap[SMALLEST]; \
856 s->heap[SMALLEST] = s->heap[s->heap_len--]; \
857 pqdownheap(s, tree, SMALLEST); \
860 /* ===========================================================================
861 * Compares to subtrees, using the tree depth as tie breaker when
862 * the subtrees have equal frequency. This minimizes the worst case length.
864 #define smaller(tree, n, m, depth) \
865 (tree[n].Freq < tree[m].Freq || \
866 (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
868 /* ===========================================================================
869 * Restore the heap property by moving down the tree starting at node k,
870 * exchanging a node with the smallest of its two sons if necessary, stopping
871 * when the heap property is re-established (each father smaller than its
874 static void pqdownheap( deflate_state
*s
, ct_data
*tree
, int k
)
877 int j
= k
<< 1; /* left son of k */
878 while (j
<= s
->heap_len
) {
879 /* Set j to the smallest of the two sons: */
880 if (j
< s
->heap_len
&&
881 smaller(tree
, s
->heap
[j
+1], s
->heap
[j
], s
->depth
)) {
884 /* Exit if v is smaller than both sons */
885 if (smaller(tree
, v
, s
->heap
[j
], s
->depth
)) break;
887 /* Exchange v with the smallest son */
888 s
->heap
[k
] = s
->heap
[j
]; k
= j
;
890 /* And continue down the tree, setting j to the left son of k */
896 /* ===========================================================================
897 * Compute the optimal bit lengths for a tree and update the total bit length
898 * for the current block.
899 * IN assertion: the fields freq and dad are set, heap[heap_max] and
900 * above are the tree nodes sorted by increasing frequency.
901 * OUT assertions: the field len is set to the optimal bit length, the
902 * array bl_count contains the frequencies for each bit length.
903 * The length opt_len is updated; static_len is also updated if stree is
906 static void gen_bitlen( deflate_state
*s
, tree_desc
*desc
)
908 ct_data
*tree
= desc
->dyn_tree
;
909 int max_code
= desc
->max_code
;
910 const ct_data
*stree
= desc
->stat_desc
->static_tree
;
911 const intf
*extra
= desc
->stat_desc
->extra_bits
;
912 int base
= desc
->stat_desc
->extra_base
;
913 int max_length
= desc
->stat_desc
->max_length
;
914 int h
; /* heap index */
915 int n
, m
; /* iterate over the tree elements */
916 int bits
; /* bit length */
917 int xbits
; /* extra bits */
918 ush f
; /* frequency */
919 int overflow
= 0; /* number of elements with bit length too large */
921 for (bits
= 0; bits
<= MAX_BITS
; bits
++) s
->bl_count
[bits
] = 0;
923 /* In a first pass, compute the optimal bit lengths (which may
924 * overflow in the case of the bit length tree).
926 tree
[s
->heap
[s
->heap_max
]].Len
= 0; /* root of the heap */
928 for (h
= s
->heap_max
+1; h
< HEAP_SIZE
; h
++) {
930 bits
= tree
[tree
[n
].Dad
].Len
+ 1;
931 if (bits
> max_length
) bits
= max_length
, overflow
++;
932 tree
[n
].Len
= (ush
)bits
;
933 /* We overwrite tree[n].Dad which is no longer needed */
935 if (n
> max_code
) continue; /* not a leaf node */
939 if (n
>= base
) xbits
= extra
[n
-base
];
941 s
->opt_len
+= (ulg
)f
* (unsigned)(bits
+ xbits
);
942 if (stree
) s
->static_len
+= (ulg
)f
* (unsigned)(stree
[n
].Len
+ xbits
);
944 if (overflow
== 0) return;
946 Tracev((stderr
,"\nbit length overflow\n"));
947 /* This happens for example on obj2 and pic of the Calgary corpus */
949 /* Find the first bit length which could increase: */
952 while (s
->bl_count
[bits
] == 0) bits
--;
953 s
->bl_count
[bits
]--; /* move one leaf down the tree */
954 s
->bl_count
[bits
+1] += 2; /* move one overflow item as its brother */
955 s
->bl_count
[max_length
]--;
956 /* The brother of the overflow item also moves one step up,
957 * but this does not affect bl_count[max_length]
960 } while (overflow
> 0);
962 /* Now recompute all bit lengths, scanning in increasing frequency.
963 * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
964 * lengths instead of fixing only the wrong ones. This idea is taken
965 * from 'ar' written by Haruhiko Okumura.)
967 for (bits
= max_length
; bits
!= 0; bits
--) {
968 n
= s
->bl_count
[bits
];
971 if (m
> max_code
) continue;
972 if ((unsigned) tree
[m
].Len
!= (unsigned) bits
) {
973 Tracev((stderr
,"code %d bits %d->%d\n", m
, tree
[m
].Len
, bits
));
974 s
->opt_len
+= ((ulg
)bits
- tree
[m
].Len
) * tree
[m
].Freq
;
975 tree
[m
].Len
= (ush
)bits
;
982 /* ===========================================================================
983 * Generate the codes for a given tree and bit counts (which need not be
985 * IN assertion: the array bl_count contains the bit length statistics for
986 * the given tree and the field len is set for all tree elements.
987 * OUT assertion: the field code is set for all tree elements of non
990 static void gen_codes( ct_data
*tree
, int max_code
, ushf
*bl_count
)
992 ush next_code
[MAX_BITS
+1]; /* next code value for each bit length */
993 unsigned code
= 0; /* running code value */
994 int bits
; /* bit index */
995 int n
; /* code index */
997 /* The distribution counts are first used to generate the code values
998 * without bit reversal.
1000 for (bits
= 1; bits
<= MAX_BITS
; bits
++) {
1001 code
= (code
+ bl_count
[bits
-1]) << 1;
1002 next_code
[bits
] = (ush
)code
;
1004 /* Check that the bit counts in bl_count are consistent. The last code
1007 Assert (code
+ bl_count
[MAX_BITS
]-1 == (1<<MAX_BITS
)-1,
1008 "inconsistent bit counts");
1009 Tracev((stderr
,"\ngen_codes: max_code %d ", max_code
));
1011 for (n
= 0; n
<= max_code
; n
++) {
1012 int len
= tree
[n
].Len
;
1013 if (len
== 0) continue;
1014 /* Now reverse the bits */
1015 tree
[n
].Code
= (ush
)bi_reverse(next_code
[len
]++, len
);
1017 Tracecv(tree
!= static_ltree
, (stderr
,"\nn %3d %c l %2d c %4x (%x) ",
1018 n
, (isgraph(n
) ? n
: ' '), len
, tree
[n
].Code
, next_code
[len
]-1));
1022 /* ===========================================================================
1023 * Construct one Huffman tree and assigns the code bit strings and lengths.
1024 * Update the total bit length for the current block.
1025 * IN assertion: the field freq is set for all tree elements.
1026 * OUT assertions: the fields len and code are set to the optimal bit length
1027 * and corresponding code. The length opt_len is updated; static_len is
1028 * also updated if stree is not null. The field max_code is set.
1030 static void build_tree( deflate_state
*s
, tree_desc
*desc
)
1032 ct_data
*tree
= desc
->dyn_tree
;
1033 const ct_data
*stree
= desc
->stat_desc
->static_tree
;
1034 int elems
= desc
->stat_desc
->elems
;
1035 int n
, m
; /* iterate over heap elements */
1036 int max_code
= -1; /* largest code with non zero frequency */
1037 int node
; /* new node being created */
1039 /* Construct the initial heap, with least frequent element in
1040 * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
1041 * heap[0] is not used.
1043 s
->heap_len
= 0, s
->heap_max
= HEAP_SIZE
;
1045 for (n
= 0; n
< elems
; n
++) {
1046 if (tree
[n
].Freq
!= 0) {
1047 s
->heap
[++(s
->heap_len
)] = max_code
= n
;
1054 /* The pkzip format requires that at least one distance code exists,
1055 * and that at least one bit should be sent even if there is only one
1056 * possible code. So to avoid special checks later on we force at least
1057 * two codes of non zero frequency.
1059 while (s
->heap_len
< 2) {
1060 node
= s
->heap
[++(s
->heap_len
)] = (max_code
< 2 ? ++max_code
: 0);
1061 tree
[node
].Freq
= 1;
1063 s
->opt_len
--; if (stree
) s
->static_len
-= stree
[node
].Len
;
1064 /* node is 0 or 1 so it does not have extra bits */
1066 desc
->max_code
= max_code
;
1068 /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
1069 * establish sub-heaps of increasing lengths:
1071 for (n
= s
->heap_len
/2; n
>= 1; n
--) pqdownheap(s
, tree
, n
);
1073 /* Construct the Huffman tree by repeatedly combining the least two
1076 node
= elems
; /* next internal node of the tree */
1078 pqremove(s
, tree
, n
); /* n = node of least frequency */
1079 m
= s
->heap
[SMALLEST
]; /* m = node of next least frequency */
1081 s
->heap
[--(s
->heap_max
)] = n
; /* keep the nodes sorted by frequency */
1082 s
->heap
[--(s
->heap_max
)] = m
;
1084 /* Create a new node father of n and m */
1085 tree
[node
].Freq
= tree
[n
].Freq
+ tree
[m
].Freq
;
1086 s
->depth
[node
] = (uch
)((s
->depth
[n
] >= s
->depth
[m
] ?
1087 s
->depth
[n
] : s
->depth
[m
]) + 1);
1088 tree
[n
].Dad
= tree
[m
].Dad
= (ush
)node
;
1090 if (tree
== s
->bl_tree
) {
1091 fprintf(stderr
,"\nnode %d(%d), sons %d(%d) %d(%d)",
1092 node
, tree
[node
].Freq
, n
, tree
[n
].Freq
, m
, tree
[m
].Freq
);
1095 /* and insert the new node in the heap */
1096 s
->heap
[SMALLEST
] = node
++;
1097 pqdownheap(s
, tree
, SMALLEST
);
1099 } while (s
->heap_len
>= 2);
1101 s
->heap
[--(s
->heap_max
)] = s
->heap
[SMALLEST
];
1103 /* At this point, the fields freq and dad are set. We can now
1104 * generate the bit lengths.
1106 gen_bitlen(s
, (tree_desc
*)desc
);
1108 /* The field len is now set, we can generate the bit codes */
1109 gen_codes ((ct_data
*)tree
, max_code
, s
->bl_count
);
1112 /* ===========================================================================
1113 * Scan a literal or distance tree to determine the frequencies of the codes
1114 * in the bit length tree.
1116 static void scan_tree( deflate_state
*s
, ct_data
*tree
, int max_code
)
1118 int n
; /* iterates over all tree elements */
1119 int prevlen
= -1; /* last emitted length */
1120 int curlen
; /* length of current code */
1121 int nextlen
= tree
[0].Len
; /* length of next code */
1122 int count
= 0; /* repeat count of the current code */
1123 int max_count
= 7; /* max repeat count */
1124 int min_count
= 4; /* min repeat count */
1126 if (nextlen
== 0) max_count
= 138, min_count
= 3;
1127 tree
[max_code
+1].Len
= (ush
)0xffff; /* guard */
1129 for (n
= 0; n
<= max_code
; n
++) {
1130 curlen
= nextlen
; nextlen
= tree
[n
+1].Len
;
1131 if (++count
< max_count
&& curlen
== nextlen
) {
1133 } else if (count
< min_count
) {
1134 s
->bl_tree
[curlen
].Freq
+= count
;
1135 } else if (curlen
!= 0) {
1136 if (curlen
!= prevlen
) s
->bl_tree
[curlen
].Freq
++;
1137 s
->bl_tree
[REP_3_6
].Freq
++;
1138 } else if (count
<= 10) {
1139 s
->bl_tree
[REPZ_3_10
].Freq
++;
1141 s
->bl_tree
[REPZ_11_138
].Freq
++;
1143 count
= 0; prevlen
= curlen
;
1145 max_count
= 138, min_count
= 3;
1146 } else if (curlen
== nextlen
) {
1147 max_count
= 6, min_count
= 3;
1149 max_count
= 7, min_count
= 4;
1154 /* ===========================================================================
1155 * Send a literal or distance tree in compressed form, using the codes in
1158 static void send_tree( deflate_state
*s
, ct_data
*tree
, int max_code
)
1160 int n
; /* iterates over all tree elements */
1161 int prevlen
= -1; /* last emitted length */
1162 int curlen
; /* length of current code */
1163 int nextlen
= tree
[0].Len
; /* length of next code */
1164 int count
= 0; /* repeat count of the current code */
1165 int max_count
= 7; /* max repeat count */
1166 int min_count
= 4; /* min repeat count */
1168 /* tree[max_code+1].Len = -1; */ /* guard already set */
1169 if (nextlen
== 0) max_count
= 138, min_count
= 3;
1171 for (n
= 0; n
<= max_code
; n
++) {
1172 curlen
= nextlen
; nextlen
= tree
[n
+1].Len
;
1173 if (++count
< max_count
&& curlen
== nextlen
) {
1175 } else if (count
< min_count
) {
1176 do { send_code(s
, curlen
, s
->bl_tree
); } while (--count
!= 0);
1178 } else if (curlen
!= 0) {
1179 if (curlen
!= prevlen
) {
1180 send_code(s
, curlen
, s
->bl_tree
); count
--;
1182 Assert(count
>= 3 && count
<= 6, " 3_6?");
1183 send_code(s
, REP_3_6
, s
->bl_tree
); send_bits(s
, count
-3, 2);
1185 } else if (count
<= 10) {
1186 send_code(s
, REPZ_3_10
, s
->bl_tree
); send_bits(s
, count
-3, 3);
1189 send_code(s
, REPZ_11_138
, s
->bl_tree
); send_bits(s
, count
-11, 7);
1191 count
= 0; prevlen
= curlen
;
1193 max_count
= 138, min_count
= 3;
1194 } else if (curlen
== nextlen
) {
1195 max_count
= 6, min_count
= 3;
1197 max_count
= 7, min_count
= 4;
1202 /* ===========================================================================
1203 * Construct the Huffman tree for the bit lengths and return the index in
1204 * bl_order of the last bit length code to send.
1206 static int build_bl_tree( deflate_state
*s
)
1208 int max_blindex
; /* index of last bit length code of non zero freq */
1210 /* Determine the bit length frequencies for literal and distance trees */
1211 scan_tree(s
, (ct_data
*)s
->dyn_ltree
, s
->l_desc
.max_code
);
1212 scan_tree(s
, (ct_data
*)s
->dyn_dtree
, s
->d_desc
.max_code
);
1214 /* Build the bit length tree: */
1215 build_tree(s
, (tree_desc
*)(&(s
->bl_desc
)));
1216 /* opt_len now includes the length of the tree representations, except
1217 * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
1220 /* Determine the number of bit length codes to send. The pkzip format
1221 * requires that at least 4 bit length codes be sent. (appnote.txt says
1222 * 3 but the actual value used is 4.)
1224 for (max_blindex
= BL_CODES
-1; max_blindex
>= 3; max_blindex
--) {
1225 if (s
->bl_tree
[bl_order
[max_blindex
]].Len
!= 0) break;
1227 /* Update opt_len to include the bit length tree and counts */
1228 s
->opt_len
+= 3*((ulg
)max_blindex
+1) + 5+5+4;
1229 Tracev((stderr
, "\ndyn trees: dyn %ld, stat %ld",
1230 s
->opt_len
, s
->static_len
));
1235 /* ===========================================================================
1236 * Send the header for a block using dynamic Huffman trees: the counts, the
1237 * lengths of the bit length codes, the literal tree and the distance tree.
1238 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
1240 static void send_all_trees( deflate_state
*s
, int lcodes
, int dcodes
, int blcodes
)
1242 int rank
; /* index in bl_order */
1244 Assert (lcodes
>= 257 && dcodes
>= 1 && blcodes
>= 4, "not enough codes");
1245 Assert (lcodes
<= L_CODES
&& dcodes
<= D_CODES
&& blcodes
<= BL_CODES
,
1247 Tracev((stderr
, "\nbl counts: "));
1248 send_bits(s
, lcodes
-257, 5); /* not +255 as stated in appnote.txt */
1249 send_bits(s
, dcodes
-1, 5);
1250 send_bits(s
, blcodes
-4, 4); /* not -3 as stated in appnote.txt */
1251 for (rank
= 0; rank
< blcodes
; rank
++) {
1252 Tracev((stderr
, "\nbl code %2d ", bl_order
[rank
]));
1253 send_bits(s
, s
->bl_tree
[bl_order
[rank
]].Len
, 3);
1255 Tracev((stderr
, "\nbl tree: sent %ld", s
->bits_sent
));
1257 send_tree(s
, (ct_data
*)s
->dyn_ltree
, lcodes
-1); /* literal tree */
1258 Tracev((stderr
, "\nlit tree: sent %ld", s
->bits_sent
));
1260 send_tree(s
, (ct_data
*)s
->dyn_dtree
, dcodes
-1); /* distance tree */
1261 Tracev((stderr
, "\ndist tree: sent %ld", s
->bits_sent
));
1264 /* ===========================================================================
1265 * Send a stored block
1267 static void _tr_stored_block( deflate_state
*s
, charf
*buf
, ulg stored_len
, int last
)
1269 send_bits(s
, (STORED_BLOCK
<<1)+last
, 3); /* send block type */
1270 bi_windup(s
); /* align on byte boundary */
1271 put_short(s
, (ush
)stored_len
);
1272 put_short(s
, (ush
)~stored_len
);
1273 zmemcpy(s
->pending_buf
+ s
->pending
, (Bytef
*)buf
, stored_len
);
1274 s
->pending
+= stored_len
;
1276 s
->compressed_len
= (s
->compressed_len
+ 3 + 7) & (ulg
)~7L;
1277 s
->compressed_len
+= (stored_len
+ 4) << 3;
1278 s
->bits_sent
+= 2*16;
1279 s
->bits_sent
+= stored_len
<<3;
1283 /* ===========================================================================
1284 * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
1286 static void _tr_flush_bits( deflate_state
*s
)
1291 /* ===========================================================================
1292 * Send one empty static block to give enough lookahead for inflate.
1293 * This takes 10 bits, of which 7 may remain in the bit buffer.
1295 static void _tr_align( deflate_state
*s
)
1297 send_bits(s
, STATIC_TREES
<<1, 3);
1298 send_code(s
, END_BLOCK
, static_ltree
);
1300 s
->compressed_len
+= 10L; /* 3 for block type, 7 for EOB */
1305 /* ===========================================================================
1306 * Determine the best encoding for the current block: dynamic trees, static
1307 * trees or store, and write out the encoded block.
1309 static void _tr_flush_block( deflate_state
*s
, charf
*buf
, ulg stored_len
, int last
)
1311 ulg opt_lenb
, static_lenb
; /* opt_len and static_len in bytes */
1312 int max_blindex
= 0; /* index of last bit length code of non zero freq */
1314 /* Build the Huffman trees unless a stored block is forced */
1317 /* Check if the file is binary or text */
1318 if (s
->strm
->data_type
== Z_UNKNOWN
)
1319 s
->strm
->data_type
= detect_data_type(s
);
1321 /* Construct the literal and distance trees */
1322 build_tree(s
, (tree_desc
*)(&(s
->l_desc
)));
1323 Tracev((stderr
, "\nlit data: dyn %ld, stat %ld", s
->opt_len
,
1326 build_tree(s
, (tree_desc
*)(&(s
->d_desc
)));
1327 Tracev((stderr
, "\ndist data: dyn %ld, stat %ld", s
->opt_len
,
1329 /* At this point, opt_len and static_len are the total bit lengths of
1330 * the compressed block data, excluding the tree representations.
1333 /* Build the bit length tree for the above two trees, and get the index
1334 * in bl_order of the last bit length code to send.
1336 max_blindex
= build_bl_tree(s
);
1338 /* Determine the best encoding. Compute the block lengths in bytes. */
1339 opt_lenb
= (s
->opt_len
+3+7)>>3;
1340 static_lenb
= (s
->static_len
+3+7)>>3;
1342 Tracev((stderr
, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
1343 opt_lenb
, s
->opt_len
, static_lenb
, s
->static_len
, stored_len
,
1346 if (static_lenb
<= opt_lenb
) opt_lenb
= static_lenb
;
1349 Assert(buf
!= (char*)0, "lost buf");
1350 opt_lenb
= static_lenb
= stored_len
+ 5; /* force a stored block */
1354 if (buf
!= (char*)0) { /* force stored block */
1356 if (stored_len
+4 <= opt_lenb
&& buf
!= (char*)0) {
1357 /* 4: two words for the lengths */
1359 /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
1360 * Otherwise we can't have processed more than WSIZE input bytes since
1361 * the last block flush, because compression would have been
1362 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
1363 * transform a block into a stored block.
1365 _tr_stored_block(s
, buf
, stored_len
, last
);
1368 } else if (static_lenb
>= 0) { /* force static trees */
1370 } else if (s
->strategy
== Z_FIXED
|| static_lenb
== opt_lenb
) {
1372 send_bits(s
, (STATIC_TREES
<<1)+last
, 3);
1373 compress_block(s
, (const ct_data
*)static_ltree
,
1374 (const ct_data
*)static_dtree
);
1376 s
->compressed_len
+= 3 + s
->static_len
;
1379 send_bits(s
, (DYN_TREES
<<1)+last
, 3);
1380 send_all_trees(s
, s
->l_desc
.max_code
+1, s
->d_desc
.max_code
+1,
1382 compress_block(s
, (const ct_data
*)s
->dyn_ltree
,
1383 (const ct_data
*)s
->dyn_dtree
);
1385 s
->compressed_len
+= 3 + s
->opt_len
;
1388 Assert (s
->compressed_len
== s
->bits_sent
, "bad compressed size");
1389 /* The above check is made mod 2^32, for files larger than 512 MB
1390 * and uLong implemented on 32 bits.
1397 s
->compressed_len
+= 7; /* align on byte boundary */
1400 Tracev((stderr
,"\ncomprlen %lu(%lu) ", s
->compressed_len
>>3,
1401 s
->compressed_len
-7*last
));
1404 const char deflate_copyright
[] =
1405 " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
1407 If you use the zlib library in a product, an acknowledgment is welcome
1408 in the documentation of your product. If for some reason you cannot
1409 include such an acknowledgment, I would appreciate that you keep this
1410 copyright string in the executable of your product.
1413 /* ===========================================================================
1414 * Function prototypes.
1417 need_more
, /* block not completed, need more input or more output */
1418 block_done
, /* block flush performed */
1419 finish_started
, /* finish started, need only more output at next deflate */
1420 finish_done
/* finish done, accept no more input or output */
1423 typedef block_state (*compress_func
)(deflate_state
*s
, int flush
);
1424 /* Compression function. Returns the block state after the call. */
1426 static int deflateReset(z_streamp strm
);
1427 static block_state
deflate_stored(deflate_state
*s
, int flush
);
1428 static block_state
deflate_fast(deflate_state
*s
, int flush
);
1429 static block_state
deflate_slow(deflate_state
*s
, int flush
);
1430 static block_state
deflate_rle(deflate_state
*s
, int flush
);
1431 static block_state
deflate_huff(deflate_state
*s
, int flush
);
1432 static void lm_init(deflate_state
*s
);
1434 /* ===========================================================================
1439 /* Tail of hash chains */
1442 # define TOO_FAR 4096
1444 /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
1446 /* Values for max_lazy_match, good_match and max_chain_length, depending on
1447 * the desired pack level (0..9). The values given below have been tuned to
1448 * exclude worst case performance for pathological files. Better values may be
1449 * found for specific files.
1451 typedef struct config_s
{
1452 ush good_length
; /* reduce lazy search above this match length */
1453 ush max_lazy
; /* do not perform lazy search above this match length */
1454 ush nice_length
; /* quit search above this match length */
1459 static const config configuration_table
[10] = {
1460 /* good lazy nice chain */
1461 /* 0 */ {0, 0, 0, 0, deflate_stored
}, /* store only */
1462 /* 1 */ {4, 4, 8, 4, deflate_fast
}, /* max speed, no lazy matches */
1463 /* 2 */ {4, 5, 16, 8, deflate_fast
},
1464 /* 3 */ {4, 6, 32, 32, deflate_fast
},
1466 /* 4 */ {4, 4, 16, 16, deflate_slow
}, /* lazy matches */
1467 /* 5 */ {8, 16, 32, 32, deflate_slow
},
1468 /* 6 */ {8, 16, 128, 128, deflate_slow
},
1469 /* 7 */ {8, 32, 128, 256, deflate_slow
},
1470 /* 8 */ {32, 128, 258, 1024, deflate_slow
},
1471 /* 9 */ {32, 258, 258, 4096, deflate_slow
}}; /* max compression */
1473 /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
1474 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
1478 /* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
1479 #define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0))
1481 /* ===========================================================================
1482 * Update a hash value with the given input byte
1483 * IN assertion: all calls to UPDATE_HASH are made with consecutive input
1484 * characters, so that a running hash key can be computed from the previous
1485 * key instead of complete recalculation each time.
1487 #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
1490 /* ===========================================================================
1491 * Insert string str in the dictionary and set match_head to the previous head
1492 * of the hash chain (the most recent string with same hash key). Return
1493 * the previous length of the hash chain.
1494 * If this file is compiled with -DFASTEST, the compression level is forced
1495 * to 1, and no hash chains are maintained.
1496 * IN assertion: all calls to INSERT_STRING are made with consecutive input
1497 * characters and the first MIN_MATCH bytes of str are valid (except for
1498 * the last MIN_MATCH-1 bytes of the input file).
1501 #define INSERT_STRING(s, str, match_head) \
1502 (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
1503 match_head = s->head[s->ins_h], \
1504 s->head[s->ins_h] = (Pos)(str))
1506 #define INSERT_STRING(s, str, match_head) \
1507 (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
1508 match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
1509 s->head[s->ins_h] = (Pos)(str))
1512 /* ===========================================================================
1513 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
1514 * prev[] will be initialized on the fly.
1516 #define CLEAR_HASH(s) \
1517 s->head[s->hash_size-1] = NIL; \
1518 zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
1520 /* ===========================================================================
1521 * Slide the hash table when sliding the window down (could be avoided with 32
1522 * bit values at the expense of memory usage). We slide even when level == 0 to
1523 * keep the hash table consistent if we switch back to level > 0 later.
1525 static void slide_hash( deflate_state
*s
)
1529 uInt wsize
= s
->w_size
;
1535 *p
= (Pos
)(m
>= wsize
? m
- wsize
: NIL
);
1542 *p
= (Pos
)(m
>= wsize
? m
- wsize
: NIL
);
1543 /* If n is not on any hash chain, prev[n] is garbage but
1544 * its value will never be used.
1550 /* ========================================================================= */
1551 int deflateInit( z_streamp strm
, int level
)
1553 return deflateInit2(strm
, level
, Z_DEFLATED
, MAX_WBITS
, DEF_MEM_LEVEL
, Z_DEFAULT_STRATEGY
);
1554 /* To do: ignore strm->next_in if we use it as window */
1557 /* ========================================================================= */
1558 int deflateInit2( z_streamp strm
, int level
, int method
, int windowBits
, int memLevel
, int strategy
)
1563 /* We overlay pending_buf and d_buf+l_buf. This works since the average
1564 * output size for (length,distance) codes is <= 24 bits.
1569 if (level
!= 0) level
= 1;
1571 if (level
== Z_DEFAULT_COMPRESSION
) level
= 6;
1574 if (windowBits
< 0) { /* suppress zlib wrapper */
1576 windowBits
= -windowBits
;
1579 else if (windowBits
> 15) {
1580 wrap
= 2; /* write gzip wrapper instead */
1584 if (memLevel
< 1 || memLevel
> MAX_MEM_LEVEL
|| method
!= Z_DEFLATED
||
1585 windowBits
< 8 || windowBits
> 15 || level
< 0 || level
> 9 ||
1586 strategy
< 0 || strategy
> Z_FIXED
|| (windowBits
== 8 && wrap
!= 1)) {
1587 return Z_STREAM_ERROR
;
1589 if (windowBits
== 8) windowBits
= 9; /* until 256-byte window bug fixed */
1590 s
= (deflate_state
*) ZALLOC(strm
, 1, sizeof(deflate_state
));
1591 if (s
== Z_NULL
) return Z_MEM_ERROR
;
1592 strm
->state
= (struct internal_state FAR
*)s
;
1594 s
->status
= INIT_STATE
; /* to pass state test in deflateReset() */
1598 s
->w_bits
= (uInt
)windowBits
;
1599 s
->w_size
= 1 << s
->w_bits
;
1600 s
->w_mask
= s
->w_size
- 1;
1602 s
->hash_bits
= (uInt
)memLevel
+ 7;
1603 s
->hash_size
= 1 << s
->hash_bits
;
1604 s
->hash_mask
= s
->hash_size
- 1;
1605 s
->hash_shift
= ((s
->hash_bits
+MIN_MATCH
-1)/MIN_MATCH
);
1607 s
->window
= (Bytef
*) ZALLOC(strm
, s
->w_size
, 2*sizeof(Byte
));
1608 s
->prev
= (Posf
*) ZALLOC(strm
, s
->w_size
, sizeof(Pos
));
1609 s
->head
= (Posf
*) ZALLOC(strm
, s
->hash_size
, sizeof(Pos
));
1611 s
->high_water
= 0; /* nothing written to s->window yet */
1613 s
->lit_bufsize
= 1 << (memLevel
+ 6); /* 16K elements by default */
1615 overlay
= (ushf
*) ZALLOC(strm
, s
->lit_bufsize
, sizeof(ush
)+2);
1616 s
->pending_buf
= (uchf
*) overlay
;
1617 s
->pending_buf_size
= (ulg
)s
->lit_bufsize
* (sizeof(ush
)+2L);
1619 if (s
->window
== Z_NULL
|| s
->prev
== Z_NULL
|| s
->head
== Z_NULL
||
1620 s
->pending_buf
== Z_NULL
) {
1621 s
->status
= FINISH_STATE
;
1622 strm
->msg
= ERR_MSG(Z_MEM_ERROR
);
1626 s
->d_buf
= overlay
+ s
->lit_bufsize
/sizeof(ush
);
1627 s
->l_buf
= s
->pending_buf
+ (1+sizeof(ush
))*s
->lit_bufsize
;
1630 s
->strategy
= strategy
;
1631 s
->method
= (Byte
)method
;
1633 return deflateReset(strm
);
1636 /* =========================================================================
1637 * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
1639 static int deflateStateCheck( z_streamp strm
)
1642 if (strm
== Z_NULL
||
1643 strm
->zalloc
== (alloc_func
)0 || strm
->zfree
== (free_func
)0)
1646 if (s
== Z_NULL
|| s
->strm
!= strm
|| (s
->status
!= INIT_STATE
&&
1648 s
->status
!= GZIP_STATE
&&
1650 s
->status
!= EXTRA_STATE
&&
1651 s
->status
!= NAME_STATE
&&
1652 s
->status
!= COMMENT_STATE
&&
1653 s
->status
!= HCRC_STATE
&&
1654 s
->status
!= BUSY_STATE
&&
1655 s
->status
!= FINISH_STATE
))
1660 /* ========================================================================= */
1661 static int deflateResetKeep( z_streamp strm
)
1665 if (deflateStateCheck(strm
)) {
1666 return Z_STREAM_ERROR
;
1669 strm
->total_in
= strm
->total_out
= 0;
1670 strm
->msg
= Z_NULL
; /* use zfree if we ever allocate msg dynamically */
1671 strm
->data_type
= Z_UNKNOWN
;
1673 s
= (deflate_state
*)strm
->state
;
1675 s
->pending_out
= s
->pending_buf
;
1678 s
->wrap
= -s
->wrap
; /* was made negative by deflate(..., Z_FINISH); */
1682 s
->wrap
== 2 ? GZIP_STATE
:
1684 s
->wrap
? INIT_STATE
: BUSY_STATE
;
1687 s
->wrap
== 2 ? crc32(0L, Z_NULL
, 0) :
1689 adler32(0L, Z_NULL
, 0);
1690 s
->last_flush
= Z_NO_FLUSH
;
1697 /* ========================================================================= */
1698 static int deflateReset( z_streamp strm
)
1702 ret
= deflateResetKeep(strm
);
1704 lm_init(strm
->state
);
1708 /* =========================================================================
1709 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
1710 * IN assertion: the stream state is correct and there is enough room in
1713 static void putShortMSB( deflate_state
*s
, uInt b
)
1715 put_byte(s
, (Byte
)(b
>> 8));
1716 put_byte(s
, (Byte
)(b
& 0xff));
1719 /* =========================================================================
1720 * Flush as much pending output as possible. All deflate() output, except for
1721 * some deflate_stored() output, goes through this function so some
1722 * applications may wish to modify it to avoid allocating a large
1723 * strm->next_out buffer and copying into it. (See also read_buf()).
1725 static void flush_pending( z_streamp strm
)
1728 deflate_state
*s
= strm
->state
;
1732 if (len
> strm
->avail_out
) len
= strm
->avail_out
;
1733 if (len
== 0) return;
1735 zmemcpy(strm
->next_out
, s
->pending_out
, len
);
1736 strm
->next_out
+= len
;
1737 s
->pending_out
+= len
;
1738 strm
->total_out
+= len
;
1739 strm
->avail_out
-= len
;
1741 if (s
->pending
== 0) {
1742 s
->pending_out
= s
->pending_buf
;
1746 /* ===========================================================================
1747 * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1].
1749 #define HCRC_UPDATE(beg) \
1751 if (s->gzhead->hcrc && s->pending > (beg)) \
1752 strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
1753 s->pending - (beg)); \
1756 /* ========================================================================= */
1757 int deflate( z_streamp strm
, int flush
)
1759 int old_flush
; /* value of flush param for previous deflate call */
1762 if (deflateStateCheck(strm
) || flush
> Z_BLOCK
|| flush
< 0) {
1763 return Z_STREAM_ERROR
;
1767 if (strm
->next_out
== Z_NULL
||
1768 (strm
->avail_in
!= 0 && strm
->next_in
== Z_NULL
) ||
1769 (s
->status
== FINISH_STATE
&& flush
!= Z_FINISH
)) {
1770 ERR_RETURN(strm
, Z_STREAM_ERROR
);
1772 if (strm
->avail_out
== 0) ERR_RETURN(strm
, Z_BUF_ERROR
);
1774 old_flush
= s
->last_flush
;
1775 s
->last_flush
= flush
;
1777 /* Flush as much pending output as possible */
1778 if (s
->pending
!= 0) {
1779 flush_pending(strm
);
1780 if (strm
->avail_out
== 0) {
1781 /* Since avail_out is 0, deflate will be called again with
1782 * more output space, but possibly with both pending and
1783 * avail_in equal to zero. There won't be anything to do,
1784 * but this is not an error situation so make sure we
1785 * return OK instead of BUF_ERROR at next call of deflate:
1791 /* Make sure there is something to do and avoid duplicate consecutive
1792 * flushes. For repeated and useless calls with Z_FINISH, we keep
1793 * returning Z_STREAM_END instead of Z_BUF_ERROR.
1795 } else if (strm
->avail_in
== 0 && RANK(flush
) <= RANK(old_flush
) &&
1796 flush
!= Z_FINISH
) {
1797 ERR_RETURN(strm
, Z_BUF_ERROR
);
1800 /* User must not provide more input after the first FINISH: */
1801 if (s
->status
== FINISH_STATE
&& strm
->avail_in
!= 0) {
1802 ERR_RETURN(strm
, Z_BUF_ERROR
);
1805 /* Write the header */
1806 if (s
->status
== INIT_STATE
) {
1808 uInt header
= (Z_DEFLATED
+ ((s
->w_bits
-8)<<4)) << 8;
1811 if (s
->strategy
>= Z_HUFFMAN_ONLY
|| s
->level
< 2)
1813 else if (s
->level
< 6)
1815 else if (s
->level
== 6)
1819 header
|= (level_flags
<< 6);
1820 if (s
->strstart
!= 0) header
|= PRESET_DICT
;
1821 header
+= 31 - (header
% 31);
1823 putShortMSB(s
, header
);
1825 /* Save the adler32 of the preset dictionary: */
1826 if (s
->strstart
!= 0) {
1827 putShortMSB(s
, (uInt
)(strm
->adler
>> 16));
1828 putShortMSB(s
, (uInt
)(strm
->adler
& 0xffff));
1830 strm
->adler
= adler32(0L, Z_NULL
, 0);
1831 s
->status
= BUSY_STATE
;
1833 /* Compression must start with an empty pending buffer */
1834 flush_pending(strm
);
1835 if (s
->pending
!= 0) {
1841 if (s
->status
== GZIP_STATE
) {
1843 strm
->adler
= crc32(0L, Z_NULL
, 0);
1847 if (s
->gzhead
== Z_NULL
) {
1853 put_byte(s
, s
->level
== 9 ? 2 :
1854 (s
->strategy
>= Z_HUFFMAN_ONLY
|| s
->level
< 2 ?
1856 put_byte(s
, OS_CODE
);
1857 s
->status
= BUSY_STATE
;
1859 /* Compression must start with an empty pending buffer */
1860 flush_pending(strm
);
1861 if (s
->pending
!= 0) {
1867 put_byte(s
, (s
->gzhead
->text
? 1 : 0) +
1868 (s
->gzhead
->hcrc
? 2 : 0) +
1869 (s
->gzhead
->extra
== Z_NULL
? 0 : 4) +
1870 (s
->gzhead
->name
== Z_NULL
? 0 : 8) +
1871 (s
->gzhead
->comment
== Z_NULL
? 0 : 16)
1873 put_byte(s
, (Byte
)(s
->gzhead
->time
& 0xff));
1874 put_byte(s
, (Byte
)((s
->gzhead
->time
>> 8) & 0xff));
1875 put_byte(s
, (Byte
)((s
->gzhead
->time
>> 16) & 0xff));
1876 put_byte(s
, (Byte
)((s
->gzhead
->time
>> 24) & 0xff));
1877 put_byte(s
, s
->level
== 9 ? 2 :
1878 (s
->strategy
>= Z_HUFFMAN_ONLY
|| s
->level
< 2 ?
1880 put_byte(s
, s
->gzhead
->os
& 0xff);
1881 if (s
->gzhead
->extra
!= Z_NULL
) {
1882 put_byte(s
, s
->gzhead
->extra_len
& 0xff);
1883 put_byte(s
, (s
->gzhead
->extra_len
>> 8) & 0xff);
1885 if (s
->gzhead
->hcrc
)
1886 strm
->adler
= crc32(strm
->adler
, s
->pending_buf
,
1889 s
->status
= EXTRA_STATE
;
1892 if (s
->status
== EXTRA_STATE
) {
1893 if (s
->gzhead
->extra
!= Z_NULL
) {
1894 ulg beg
= s
->pending
; /* start of bytes to update crc */
1895 uInt left
= (s
->gzhead
->extra_len
& 0xffff) - s
->gzindex
;
1896 while (s
->pending
+ left
> s
->pending_buf_size
) {
1897 uInt copy
= s
->pending_buf_size
- s
->pending
;
1898 zmemcpy(s
->pending_buf
+ s
->pending
,
1899 s
->gzhead
->extra
+ s
->gzindex
, copy
);
1900 s
->pending
= s
->pending_buf_size
;
1903 flush_pending(strm
);
1904 if (s
->pending
!= 0) {
1911 zmemcpy(s
->pending_buf
+ s
->pending
,
1912 s
->gzhead
->extra
+ s
->gzindex
, left
);
1917 s
->status
= NAME_STATE
;
1919 if (s
->status
== NAME_STATE
) {
1920 if (s
->gzhead
->name
!= Z_NULL
) {
1921 ulg beg
= s
->pending
; /* start of bytes to update crc */
1924 if (s
->pending
== s
->pending_buf_size
) {
1926 flush_pending(strm
);
1927 if (s
->pending
!= 0) {
1933 val
= s
->gzhead
->name
[s
->gzindex
++];
1939 s
->status
= COMMENT_STATE
;
1941 if (s
->status
== COMMENT_STATE
) {
1942 if (s
->gzhead
->comment
!= Z_NULL
) {
1943 ulg beg
= s
->pending
; /* start of bytes to update crc */
1946 if (s
->pending
== s
->pending_buf_size
) {
1948 flush_pending(strm
);
1949 if (s
->pending
!= 0) {
1955 val
= s
->gzhead
->comment
[s
->gzindex
++];
1960 s
->status
= HCRC_STATE
;
1962 if (s
->status
== HCRC_STATE
) {
1963 if (s
->gzhead
->hcrc
) {
1964 if (s
->pending
+ 2 > s
->pending_buf_size
) {
1965 flush_pending(strm
);
1966 if (s
->pending
!= 0) {
1971 put_byte(s
, (Byte
)(strm
->adler
& 0xff));
1972 put_byte(s
, (Byte
)((strm
->adler
>> 8) & 0xff));
1973 strm
->adler
= crc32(0L, Z_NULL
, 0);
1975 s
->status
= BUSY_STATE
;
1977 /* Compression must start with an empty pending buffer */
1978 flush_pending(strm
);
1979 if (s
->pending
!= 0) {
1986 /* Start a new block or continue the current one.
1988 if (strm
->avail_in
!= 0 || s
->lookahead
!= 0 ||
1989 (flush
!= Z_NO_FLUSH
&& s
->status
!= FINISH_STATE
)) {
1992 bstate
= s
->level
== 0 ? deflate_stored(s
, flush
) :
1993 s
->strategy
== Z_HUFFMAN_ONLY
? deflate_huff(s
, flush
) :
1994 s
->strategy
== Z_RLE
? deflate_rle(s
, flush
) :
1995 (*(configuration_table
[s
->level
].func
))(s
, flush
);
1997 if (bstate
== finish_started
|| bstate
== finish_done
) {
1998 s
->status
= FINISH_STATE
;
2000 if (bstate
== need_more
|| bstate
== finish_started
) {
2001 if (strm
->avail_out
== 0) {
2002 s
->last_flush
= -1; /* avoid BUF_ERROR next call, see above */
2005 /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
2006 * of deflate should use the same flush parameter to make sure
2007 * that the flush is complete. So we don't have to output an
2008 * empty block here, this will be done at next call. This also
2009 * ensures that for a very small output buffer, we emit at most
2013 if (bstate
== block_done
) {
2014 if (flush
== Z_PARTIAL_FLUSH
) {
2016 } else if (flush
!= Z_BLOCK
) { /* FULL_FLUSH or SYNC_FLUSH */
2017 _tr_stored_block(s
, (char*)0, 0L, 0);
2018 /* For a full flush, this empty block will be recognized
2019 * as a special marker by inflate_sync().
2021 if (flush
== Z_FULL_FLUSH
) {
2022 CLEAR_HASH(s
); /* forget history */
2023 if (s
->lookahead
== 0) {
2025 s
->block_start
= 0L;
2030 flush_pending(strm
);
2031 if (strm
->avail_out
== 0) {
2032 s
->last_flush
= -1; /* avoid BUF_ERROR at next call, see above */
2038 if (flush
!= Z_FINISH
) return Z_OK
;
2039 if (s
->wrap
<= 0) return Z_STREAM_END
;
2041 /* Write the trailer */
2044 put_byte(s
, (Byte
)(strm
->adler
& 0xff));
2045 put_byte(s
, (Byte
)((strm
->adler
>> 8) & 0xff));
2046 put_byte(s
, (Byte
)((strm
->adler
>> 16) & 0xff));
2047 put_byte(s
, (Byte
)((strm
->adler
>> 24) & 0xff));
2048 put_byte(s
, (Byte
)(strm
->total_in
& 0xff));
2049 put_byte(s
, (Byte
)((strm
->total_in
>> 8) & 0xff));
2050 put_byte(s
, (Byte
)((strm
->total_in
>> 16) & 0xff));
2051 put_byte(s
, (Byte
)((strm
->total_in
>> 24) & 0xff));
2056 putShortMSB(s
, (uInt
)(strm
->adler
>> 16));
2057 putShortMSB(s
, (uInt
)(strm
->adler
& 0xffff));
2059 flush_pending(strm
);
2060 /* If avail_out is zero, the application will call deflate again
2061 * to flush the rest.
2063 if (s
->wrap
> 0) s
->wrap
= -s
->wrap
; /* write the trailer only once! */
2064 return s
->pending
!= 0 ? Z_OK
: Z_STREAM_END
;
2067 /* ========================================================================= */
2068 int deflateEnd( z_streamp strm
)
2072 if (deflateStateCheck(strm
)) return Z_STREAM_ERROR
;
2074 status
= strm
->state
->status
;
2076 /* Deallocate in reverse order of allocations: */
2077 TRY_FREE(strm
, strm
->state
->pending_buf
);
2078 TRY_FREE(strm
, strm
->state
->head
);
2079 TRY_FREE(strm
, strm
->state
->prev
);
2080 TRY_FREE(strm
, strm
->state
->window
);
2082 ZFREE(strm
, strm
->state
);
2083 strm
->state
= Z_NULL
;
2085 return status
== BUSY_STATE
? Z_DATA_ERROR
: Z_OK
;
2088 /* ===========================================================================
2089 * Read a new buffer from the current input stream, update the adler32
2090 * and total number of bytes read. All deflate() input goes through
2091 * this function so some applications may wish to modify it to avoid
2092 * allocating a large strm->next_in buffer and copying from it.
2093 * (See also flush_pending()).
2095 static unsigned read_buf( z_streamp strm
, Bytef
*buf
, unsigned size
)
2097 unsigned len
= strm
->avail_in
;
2099 if (len
> size
) len
= size
;
2100 if (len
== 0) return 0;
2102 strm
->avail_in
-= len
;
2104 zmemcpy(buf
, strm
->next_in
, len
);
2105 if (strm
->state
->wrap
== 1) {
2106 strm
->adler
= adler32(strm
->adler
, buf
, len
);
2109 else if (strm
->state
->wrap
== 2) {
2110 strm
->adler
= crc32(strm
->adler
, buf
, len
);
2113 strm
->next_in
+= len
;
2114 strm
->total_in
+= len
;
2119 /* ===========================================================================
2120 * Initialize the "longest match" routines for a new zlib stream
2122 static void lm_init( deflate_state
*s
)
2124 s
->window_size
= (ulg
)2L*s
->w_size
;
2128 /* Set the default configuration parameters:
2130 s
->max_lazy_match
= configuration_table
[s
->level
].max_lazy
;
2131 s
->good_match
= configuration_table
[s
->level
].good_length
;
2132 s
->nice_match
= configuration_table
[s
->level
].nice_length
;
2133 s
->max_chain_length
= configuration_table
[s
->level
].max_chain
;
2136 s
->block_start
= 0L;
2139 s
->match_length
= s
->prev_length
= MIN_MATCH
-1;
2140 s
->match_available
= 0;
2144 /* ===========================================================================
2145 * Set match_start to the longest match starting at the given string and
2146 * return its length. Matches shorter or equal to prev_length are discarded,
2147 * in which case the result is equal to prev_length and match_start is
2149 * IN assertions: cur_match is the head of the hash chain for the current
2150 * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
2151 * OUT assertion: the match length is not greater than s->lookahead.
2153 static uInt
longest_match( deflate_state
*s
, IPos cur_match
)
2155 unsigned chain_length
= s
->max_chain_length
;/* max hash chain length */
2156 register Bytef
*scan
= s
->window
+ s
->strstart
; /* current string */
2157 register Bytef
*match
; /* matched string */
2158 register int len
; /* length of current match */
2159 int best_len
= (int)s
->prev_length
; /* best match length so far */
2160 int nice_match
= s
->nice_match
; /* stop if match long enough */
2161 IPos limit
= s
->strstart
> (IPos
)MAX_DIST(s
) ?
2162 s
->strstart
- (IPos
)MAX_DIST(s
) : NIL
;
2163 /* Stop when cur_match becomes <= limit. To simplify the code,
2164 * we prevent matches with the string of window index 0.
2166 Posf
*prev
= s
->prev
;
2167 uInt wmask
= s
->w_mask
;
2170 /* Compare two bytes at a time. Note: this is not always beneficial.
2171 * Try with and without -DUNALIGNED_OK to check.
2173 register Bytef
*strend
= s
->window
+ s
->strstart
+ MAX_MATCH
- 1;
2174 register ush scan_start
= *(ushf
*)scan
;
2175 register ush scan_end
= *(ushf
*)(scan
+best_len
-1);
2177 register Bytef
*strend
= s
->window
+ s
->strstart
+ MAX_MATCH
;
2178 register Byte scan_end1
= scan
[best_len
-1];
2179 register Byte scan_end
= scan
[best_len
];
2182 /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
2183 * It is easy to get rid of this optimization if necessary.
2185 Assert(s
->hash_bits
>= 8 && MAX_MATCH
== 258, "Code too clever");
2187 /* Do not waste too much time if we already have a good match: */
2188 if (s
->prev_length
>= s
->good_match
) {
2191 /* Do not look for matches beyond the end of the input. This is necessary
2192 * to make deflate deterministic.
2194 if ((uInt
)nice_match
> s
->lookahead
) nice_match
= (int)s
->lookahead
;
2196 Assert((ulg
)s
->strstart
<= s
->window_size
-MIN_LOOKAHEAD
, "need lookahead");
2199 Assert(cur_match
< s
->strstart
, "no future");
2200 match
= s
->window
+ cur_match
;
2202 /* Skip to next match if the match length cannot increase
2203 * or if the match length is less than 2. Note that the checks below
2204 * for insufficient lookahead only occur occasionally for performance
2205 * reasons. Therefore uninitialized memory will be accessed, and
2206 * conditional jumps will be made that depend on those values.
2207 * However the length of the match is limited to the lookahead, so
2208 * the output of deflate is not affected by the uninitialized values.
2210 #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
2211 /* This code assumes sizeof(unsigned short) == 2. Do not use
2212 * UNALIGNED_OK if your compiler uses a different size.
2214 if (*(ushf
*)(match
+best_len
-1) != scan_end
||
2215 *(ushf
*)match
!= scan_start
) continue;
2217 /* It is not necessary to compare scan[2] and match[2] since they are
2218 * always equal when the other bytes match, given that the hash keys
2219 * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
2220 * strstart+3, +5, ... up to strstart+257. We check for insufficient
2221 * lookahead only every 4th comparison; the 128th check will be made
2222 * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
2223 * necessary to put more guard bytes at the end of the window, or
2224 * to check more often for insufficient lookahead.
2226 Assert(scan
[2] == match
[2], "scan[2]?");
2229 } while (*(ushf
*)(scan
+=2) == *(ushf
*)(match
+=2) &&
2230 *(ushf
*)(scan
+=2) == *(ushf
*)(match
+=2) &&
2231 *(ushf
*)(scan
+=2) == *(ushf
*)(match
+=2) &&
2232 *(ushf
*)(scan
+=2) == *(ushf
*)(match
+=2) &&
2234 /* The funny "do {}" generates better code on most compilers */
2236 /* Here, scan <= window+strstart+257 */
2237 Assert(scan
<= s
->window
+(unsigned)(s
->window_size
-1), "wild scan");
2238 if (*scan
== *match
) scan
++;
2240 len
= (MAX_MATCH
- 1) - (int)(strend
-scan
);
2241 scan
= strend
- (MAX_MATCH
-1);
2243 #else /* UNALIGNED_OK */
2245 if (match
[best_len
] != scan_end
||
2246 match
[best_len
-1] != scan_end1
||
2248 *++match
!= scan
[1]) continue;
2250 /* The check at best_len-1 can be removed because it will be made
2251 * again later. (This heuristic is not always a win.)
2252 * It is not necessary to compare scan[2] and match[2] since they
2253 * are always equal when the other bytes match, given that
2254 * the hash keys are equal and that HASH_BITS >= 8.
2257 Assert(*scan
== *match
, "match[2]?");
2259 /* We check for insufficient lookahead only every 8th comparison;
2260 * the 256th check will be made at strstart+258.
2263 } while (*++scan
== *++match
&& *++scan
== *++match
&&
2264 *++scan
== *++match
&& *++scan
== *++match
&&
2265 *++scan
== *++match
&& *++scan
== *++match
&&
2266 *++scan
== *++match
&& *++scan
== *++match
&&
2269 Assert(scan
<= s
->window
+(unsigned)(s
->window_size
-1), "wild scan");
2271 len
= MAX_MATCH
- (int)(strend
- scan
);
2272 scan
= strend
- MAX_MATCH
;
2274 #endif /* UNALIGNED_OK */
2276 if (len
> best_len
) {
2277 s
->match_start
= cur_match
;
2279 if (len
>= nice_match
) break;
2281 scan_end
= *(ushf
*)(scan
+best_len
-1);
2283 scan_end1
= scan
[best_len
-1];
2284 scan_end
= scan
[best_len
];
2287 } while ((cur_match
= prev
[cur_match
& wmask
]) > limit
2288 && --chain_length
!= 0);
2290 if ((uInt
)best_len
<= s
->lookahead
) return (uInt
)best_len
;
2291 return s
->lookahead
;
2294 #define check_match(s, start, match, length)
2296 /* ===========================================================================
2297 * Fill the window when the lookahead becomes insufficient.
2298 * Updates strstart and lookahead.
2300 * IN assertion: lookahead < MIN_LOOKAHEAD
2301 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
2302 * At least one byte has been read, or avail_in == 0; reads are
2303 * performed for at least two bytes (required for the zip translate_eol
2304 * option -- not supported here).
2306 static void fill_window( deflate_state
*s
)
2309 unsigned more
; /* Amount of free space at the end of the window. */
2310 uInt wsize
= s
->w_size
;
2312 Assert(s
->lookahead
< MIN_LOOKAHEAD
, "already enough lookahead");
2315 more
= (unsigned)(s
->window_size
-(ulg
)s
->lookahead
-(ulg
)s
->strstart
);
2317 /* Deal with !@#$% 64K limit: */
2318 if (sizeof(int) <= 2) {
2319 if (more
== 0 && s
->strstart
== 0 && s
->lookahead
== 0) {
2322 } else if (more
== (unsigned)(-1)) {
2323 /* Very unlikely, but possible on 16 bit machine if
2324 * strstart == 0 && lookahead == 1 (input done a byte at time)
2330 /* If the window is almost full and there is insufficient lookahead,
2331 * move the upper half to the lower one to make room in the upper half.
2333 if (s
->strstart
>= wsize
+MAX_DIST(s
)) {
2335 zmemcpy(s
->window
, s
->window
+wsize
, (unsigned)wsize
- more
);
2336 s
->match_start
-= wsize
;
2337 s
->strstart
-= wsize
; /* we now have strstart >= MAX_DIST */
2338 s
->block_start
-= (long) wsize
;
2342 if (s
->strm
->avail_in
== 0) break;
2344 /* If there was no sliding:
2345 * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
2346 * more == window_size - lookahead - strstart
2347 * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
2348 * => more >= window_size - 2*WSIZE + 2
2349 * In the BIG_MEM or MMAP case (not yet supported),
2350 * window_size == input_size + MIN_LOOKAHEAD &&
2351 * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
2352 * Otherwise, window_size == 2*WSIZE so more >= 2.
2353 * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
2355 Assert(more
>= 2, "more < 2");
2357 n
= read_buf(s
->strm
, s
->window
+ s
->strstart
+ s
->lookahead
, more
);
2360 /* Initialize the hash value now that we have some input: */
2361 if (s
->lookahead
+ s
->insert
>= MIN_MATCH
) {
2362 uInt str
= s
->strstart
- s
->insert
;
2363 s
->ins_h
= s
->window
[str
];
2364 UPDATE_HASH(s
, s
->ins_h
, s
->window
[str
+ 1]);
2366 Call
UPDATE_HASH() MIN_MATCH
-3 more times
2369 UPDATE_HASH(s
, s
->ins_h
, s
->window
[str
+ MIN_MATCH
-1]);
2371 s
->prev
[str
& s
->w_mask
] = s
->head
[s
->ins_h
];
2373 s
->head
[s
->ins_h
] = (Pos
)str
;
2376 if (s
->lookahead
+ s
->insert
< MIN_MATCH
)
2380 /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
2381 * but this is not important since only literal bytes will be emitted.
2384 } while (s
->lookahead
< MIN_LOOKAHEAD
&& s
->strm
->avail_in
!= 0);
2386 /* If the WIN_INIT bytes after the end of the current data have never been
2387 * written, then zero those bytes in order to avoid memory check reports of
2388 * the use of uninitialized (or uninitialised as Julian writes) bytes by
2389 * the longest match routines. Update the high water mark for the next
2390 * time through here. WIN_INIT is set to MAX_MATCH since the longest match
2391 * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
2393 if (s
->high_water
< s
->window_size
) {
2394 ulg curr
= s
->strstart
+ (ulg
)(s
->lookahead
);
2397 if (s
->high_water
< curr
) {
2398 /* Previous high water mark below current data -- zero WIN_INIT
2399 * bytes or up to end of window, whichever is less.
2401 init
= s
->window_size
- curr
;
2402 if (init
> WIN_INIT
)
2404 zmemzero(s
->window
+ curr
, (unsigned)init
);
2405 s
->high_water
= curr
+ init
;
2407 else if (s
->high_water
< (ulg
)curr
+ WIN_INIT
) {
2408 /* High water mark at or above current data, but below current data
2409 * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
2410 * to end of window, whichever is less.
2412 init
= (ulg
)curr
+ WIN_INIT
- s
->high_water
;
2413 if (init
> s
->window_size
- s
->high_water
)
2414 init
= s
->window_size
- s
->high_water
;
2415 zmemzero(s
->window
+ s
->high_water
, (unsigned)init
);
2416 s
->high_water
+= init
;
2420 Assert((ulg
)s
->strstart
<= s
->window_size
- MIN_LOOKAHEAD
,
2421 "not enough room for search");
2424 /* ===========================================================================
2425 * Flush the current block, with given end-of-file flag.
2426 * IN assertion: strstart is set to the end of the current match.
2428 #define FLUSH_BLOCK_ONLY(s, last) { \
2429 _tr_flush_block(s, (s->block_start >= 0L ? \
2430 (charf *)&s->window[(unsigned)s->block_start] : \
2432 (ulg)((long)s->strstart - s->block_start), \
2434 s->block_start = s->strstart; \
2435 flush_pending(s->strm); \
2436 Tracev((stderr,"[FLUSH]")); \
2439 /* Same but force premature exit if necessary. */
2440 #define FLUSH_BLOCK(s, last) { \
2441 FLUSH_BLOCK_ONLY(s, last); \
2442 if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
2445 /* Maximum stored block length in deflate format (not including header). */
2446 #define MAX_STORED 65535
2448 /* Minimum of a and b. */
2449 #define MIN(a, b) ((a) > (b) ? (b) : (a))
2451 /* ===========================================================================
2452 * Copy without compression as much as possible from the input stream, return
2453 * the current block state.
2455 * In case deflateParams() is used to later switch to a non-zero compression
2456 * level, s->matches (otherwise unused when storing) keeps track of the number
2457 * of hash table slides to perform. If s->matches is 1, then one hash table
2458 * slide will be done when switching. If s->matches is 2, the maximum value
2459 * allowed here, then the hash table will be cleared, since two or more slides
2460 * is the same as a clear.
2462 * deflate_stored() is written to minimize the number of times an input byte is
2463 * copied. It is most efficient with large input and output buffers, which
2464 * maximizes the opportunites to have a single copy from next_in to next_out.
2466 static block_state
deflate_stored( deflate_state
*s
, int flush
)
2468 /* Smallest worthy block size when not flushing or finishing. By default
2469 * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
2470 * large input and output buffers, the stored block size will be larger.
2472 unsigned min_block
= MIN(s
->pending_buf_size
- 5, s
->w_size
);
2474 /* Copy as many min_block or larger stored blocks directly to next_out as
2475 * possible. If flushing, copy the remaining available input to next_out as
2476 * stored blocks, if there is enough space.
2478 unsigned len
, left
, have
, last
= 0;
2479 unsigned used
= s
->strm
->avail_in
;
2481 /* Set len to the maximum size block that we can copy directly with the
2482 * available input data and output space. Set left to how much of that
2483 * would be copied from what's left in the window.
2485 len
= MAX_STORED
; /* maximum deflate stored block length */
2486 have
= (s
->bi_valid
+ 42) >> 3; /* number of header bytes */
2487 if (s
->strm
->avail_out
< have
) /* need room for header */
2489 /* maximum stored block length that will fit in avail_out: */
2490 have
= s
->strm
->avail_out
- have
;
2491 left
= s
->strstart
- s
->block_start
; /* bytes left in window */
2492 if (len
> (ulg
)left
+ s
->strm
->avail_in
)
2493 len
= left
+ s
->strm
->avail_in
; /* limit len to the input */
2495 len
= have
; /* limit len to the output */
2497 /* If the stored block would be less than min_block in length, or if
2498 * unable to copy all of the available input when flushing, then try
2499 * copying to the window and the pending buffer instead. Also don't
2500 * write an empty block when flushing -- deflate() does that.
2502 if (len
< min_block
&& ((len
== 0 && flush
!= Z_FINISH
) ||
2503 flush
== Z_NO_FLUSH
||
2504 len
!= left
+ s
->strm
->avail_in
))
2507 /* Make a dummy stored block in pending to get the header bytes,
2508 * including any pending bits. This also updates the debugging counts.
2510 last
= flush
== Z_FINISH
&& len
== left
+ s
->strm
->avail_in
? 1 : 0;
2511 _tr_stored_block(s
, (char *)0, 0L, last
);
2513 /* Replace the lengths in the dummy stored block with len. */
2514 s
->pending_buf
[s
->pending
- 4] = len
;
2515 s
->pending_buf
[s
->pending
- 3] = len
>> 8;
2516 s
->pending_buf
[s
->pending
- 2] = ~len
;
2517 s
->pending_buf
[s
->pending
- 1] = ~len
>> 8;
2519 /* Write the stored block header bytes. */
2520 flush_pending(s
->strm
);
2523 /* Update debugging counts for the data about to be copied. */
2524 s
->compressed_len
+= len
<< 3;
2525 s
->bits_sent
+= len
<< 3;
2528 /* Copy uncompressed bytes from the window to next_out. */
2532 zmemcpy(s
->strm
->next_out
, s
->window
+ s
->block_start
, left
);
2533 s
->strm
->next_out
+= left
;
2534 s
->strm
->avail_out
-= left
;
2535 s
->strm
->total_out
+= left
;
2536 s
->block_start
+= left
;
2540 /* Copy uncompressed bytes directly from next_in to next_out, updating
2544 read_buf(s
->strm
, s
->strm
->next_out
, len
);
2545 s
->strm
->next_out
+= len
;
2546 s
->strm
->avail_out
-= len
;
2547 s
->strm
->total_out
+= len
;
2549 } while (last
== 0);
2551 /* Update the sliding window with the last s->w_size bytes of the copied
2552 * data, or append all of the copied data to the existing window if less
2553 * than s->w_size bytes were copied. Also update the number of bytes to
2554 * insert in the hash tables, in the event that deflateParams() switches to
2555 * a non-zero compression level.
2557 used
-= s
->strm
->avail_in
; /* number of input bytes directly copied */
2559 /* If any input was used, then no unused input remains in the window,
2560 * therefore s->block_start == s->strstart.
2562 if (used
>= s
->w_size
) { /* supplant the previous history */
2563 s
->matches
= 2; /* clear hash */
2564 zmemcpy(s
->window
, s
->strm
->next_in
- s
->w_size
, s
->w_size
);
2565 s
->strstart
= s
->w_size
;
2568 if (s
->window_size
- s
->strstart
<= used
) {
2569 /* Slide the window down. */
2570 s
->strstart
-= s
->w_size
;
2571 zmemcpy(s
->window
, s
->window
+ s
->w_size
, s
->strstart
);
2573 s
->matches
++; /* add a pending slide_hash() */
2575 zmemcpy(s
->window
+ s
->strstart
, s
->strm
->next_in
- used
, used
);
2576 s
->strstart
+= used
;
2578 s
->block_start
= s
->strstart
;
2579 s
->insert
+= MIN(used
, s
->w_size
- s
->insert
);
2581 if (s
->high_water
< s
->strstart
)
2582 s
->high_water
= s
->strstart
;
2584 /* If the last block was written to next_out, then done. */
2588 /* If flushing and all input has been consumed, then done. */
2589 if (flush
!= Z_NO_FLUSH
&& flush
!= Z_FINISH
&&
2590 s
->strm
->avail_in
== 0 && (long)s
->strstart
== s
->block_start
)
2593 /* Fill the window with any remaining input. */
2594 have
= s
->window_size
- s
->strstart
- 1;
2595 if (s
->strm
->avail_in
> have
&& s
->block_start
>= (long)s
->w_size
) {
2596 /* Slide the window down. */
2597 s
->block_start
-= s
->w_size
;
2598 s
->strstart
-= s
->w_size
;
2599 zmemcpy(s
->window
, s
->window
+ s
->w_size
, s
->strstart
);
2601 s
->matches
++; /* add a pending slide_hash() */
2602 have
+= s
->w_size
; /* more space now */
2604 if (have
> s
->strm
->avail_in
)
2605 have
= s
->strm
->avail_in
;
2607 read_buf(s
->strm
, s
->window
+ s
->strstart
, have
);
2608 s
->strstart
+= have
;
2610 if (s
->high_water
< s
->strstart
)
2611 s
->high_water
= s
->strstart
;
2613 /* There was not enough avail_out to write a complete worthy or flushed
2614 * stored block to next_out. Write a stored block to pending instead, if we
2615 * have enough input for a worthy block, or if flushing and there is enough
2616 * room for the remaining input as a stored block in the pending buffer.
2618 have
= (s
->bi_valid
+ 42) >> 3; /* number of header bytes */
2619 /* maximum stored block length that will fit in pending: */
2620 have
= MIN(s
->pending_buf_size
- have
, MAX_STORED
);
2621 min_block
= MIN(have
, s
->w_size
);
2622 left
= s
->strstart
- s
->block_start
;
2623 if (left
>= min_block
||
2624 ((left
|| flush
== Z_FINISH
) && flush
!= Z_NO_FLUSH
&&
2625 s
->strm
->avail_in
== 0 && left
<= have
)) {
2626 len
= MIN(left
, have
);
2627 last
= flush
== Z_FINISH
&& s
->strm
->avail_in
== 0 &&
2628 len
== left
? 1 : 0;
2629 _tr_stored_block(s
, (charf
*)s
->window
+ s
->block_start
, len
, last
);
2630 s
->block_start
+= len
;
2631 flush_pending(s
->strm
);
2634 /* We've done all we can with the available input and output. */
2635 return last
? finish_started
: need_more
;
2638 /* ===========================================================================
2639 * Compress as much as possible from the input stream, return the current
2641 * This function does not perform lazy evaluation of matches and inserts
2642 * new strings in the dictionary only for unmatched strings or for short
2643 * matches. It is used only for the fast compression options.
2645 static block_state
deflate_fast( deflate_state
*s
, int flush
)
2647 IPos hash_head
; /* head of the hash chain */
2648 int bflush
; /* set if current block must be flushed */
2651 /* Make sure that we always have enough lookahead, except
2652 * at the end of the input file. We need MAX_MATCH bytes
2653 * for the next match, plus MIN_MATCH bytes to insert the
2654 * string following the next match.
2656 if (s
->lookahead
< MIN_LOOKAHEAD
) {
2658 if (s
->lookahead
< MIN_LOOKAHEAD
&& flush
== Z_NO_FLUSH
) {
2661 if (s
->lookahead
== 0) break; /* flush the current block */
2664 /* Insert the string window[strstart .. strstart+2] in the
2665 * dictionary, and set hash_head to the head of the hash chain:
2668 if (s
->lookahead
>= MIN_MATCH
) {
2669 INSERT_STRING(s
, s
->strstart
, hash_head
);
2672 /* Find the longest match, discarding those <= prev_length.
2673 * At this point we have always match_length < MIN_MATCH
2675 if (hash_head
!= NIL
&& s
->strstart
- hash_head
<= MAX_DIST(s
)) {
2676 /* To simplify the code, we prevent matches with the string
2677 * of window index 0 (in particular we have to avoid a match
2678 * of the string with itself at the start of the input file).
2680 s
->match_length
= longest_match (s
, hash_head
);
2681 /* longest_match() sets match_start */
2683 if (s
->match_length
>= MIN_MATCH
) {
2684 check_match(s
, s
->strstart
, s
->match_start
, s
->match_length
);
2686 _tr_tally_dist(s
, s
->strstart
- s
->match_start
,
2687 s
->match_length
- MIN_MATCH
, bflush
);
2689 s
->lookahead
-= s
->match_length
;
2691 /* Insert new strings in the hash table only if the match length
2692 * is not too large. This saves time but degrades compression.
2695 if (s
->match_length
<= s
->max_insert_length
&&
2696 s
->lookahead
>= MIN_MATCH
) {
2697 s
->match_length
--; /* string at strstart already in table */
2700 INSERT_STRING(s
, s
->strstart
, hash_head
);
2701 /* strstart never exceeds WSIZE-MAX_MATCH, so there are
2702 * always MIN_MATCH bytes ahead.
2704 } while (--s
->match_length
!= 0);
2709 s
->strstart
+= s
->match_length
;
2710 s
->match_length
= 0;
2711 s
->ins_h
= s
->window
[s
->strstart
];
2712 UPDATE_HASH(s
, s
->ins_h
, s
->window
[s
->strstart
+1]);
2714 Call
UPDATE_HASH() MIN_MATCH
-3 more times
2716 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
2717 * matter since it will be recomputed at next deflate call.
2721 /* No match, output a literal byte */
2722 Tracevv((stderr
,"%c", s
->window
[s
->strstart
]));
2723 _tr_tally_lit (s
, s
->window
[s
->strstart
], bflush
);
2727 if (bflush
) FLUSH_BLOCK(s
, 0);
2729 s
->insert
= s
->strstart
< MIN_MATCH
-1 ? s
->strstart
: MIN_MATCH
-1;
2730 if (flush
== Z_FINISH
) {
2739 /* ===========================================================================
2740 * Same as above, but achieves better compression. We use a lazy
2741 * evaluation for matches: a match is finally adopted only if there is
2742 * no better match at the next window position.
2744 static block_state
deflate_slow( deflate_state
*s
, int flush
)
2746 IPos hash_head
; /* head of hash chain */
2747 int bflush
; /* set if current block must be flushed */
2749 /* Process the input block. */
2751 /* Make sure that we always have enough lookahead, except
2752 * at the end of the input file. We need MAX_MATCH bytes
2753 * for the next match, plus MIN_MATCH bytes to insert the
2754 * string following the next match.
2756 if (s
->lookahead
< MIN_LOOKAHEAD
) {
2758 if (s
->lookahead
< MIN_LOOKAHEAD
&& flush
== Z_NO_FLUSH
) {
2761 if (s
->lookahead
== 0) break; /* flush the current block */
2764 /* Insert the string window[strstart .. strstart+2] in the
2765 * dictionary, and set hash_head to the head of the hash chain:
2768 if (s
->lookahead
>= MIN_MATCH
) {
2769 INSERT_STRING(s
, s
->strstart
, hash_head
);
2772 /* Find the longest match, discarding those <= prev_length.
2774 s
->prev_length
= s
->match_length
, s
->prev_match
= s
->match_start
;
2775 s
->match_length
= MIN_MATCH
-1;
2777 if (hash_head
!= NIL
&& s
->prev_length
< s
->max_lazy_match
&&
2778 s
->strstart
- hash_head
<= MAX_DIST(s
)) {
2779 /* To simplify the code, we prevent matches with the string
2780 * of window index 0 (in particular we have to avoid a match
2781 * of the string with itself at the start of the input file).
2783 s
->match_length
= longest_match (s
, hash_head
);
2784 /* longest_match() sets match_start */
2786 if (s
->match_length
<= 5 && (s
->strategy
== Z_FILTERED
2787 #if TOO_FAR <= 32767
2788 || (s
->match_length
== MIN_MATCH
&&
2789 s
->strstart
- s
->match_start
> TOO_FAR
)
2793 /* If prev_match is also MIN_MATCH, match_start is garbage
2794 * but we will ignore the current match anyway.
2796 s
->match_length
= MIN_MATCH
-1;
2799 /* If there was a match at the previous step and the current
2800 * match is not better, output the previous match:
2802 if (s
->prev_length
>= MIN_MATCH
&& s
->match_length
<= s
->prev_length
) {
2803 uInt max_insert
= s
->strstart
+ s
->lookahead
- MIN_MATCH
;
2804 /* Do not insert strings in hash table beyond this. */
2806 check_match(s
, s
->strstart
-1, s
->prev_match
, s
->prev_length
);
2808 _tr_tally_dist(s
, s
->strstart
-1 - s
->prev_match
,
2809 s
->prev_length
- MIN_MATCH
, bflush
);
2811 /* Insert in hash table all strings up to the end of the match.
2812 * strstart-1 and strstart are already inserted. If there is not
2813 * enough lookahead, the last two strings are not inserted in
2816 s
->lookahead
-= s
->prev_length
-1;
2817 s
->prev_length
-= 2;
2819 if (++s
->strstart
<= max_insert
) {
2820 INSERT_STRING(s
, s
->strstart
, hash_head
);
2822 } while (--s
->prev_length
!= 0);
2823 s
->match_available
= 0;
2824 s
->match_length
= MIN_MATCH
-1;
2827 if (bflush
) FLUSH_BLOCK(s
, 0);
2829 } else if (s
->match_available
) {
2830 /* If there was no match at the previous position, output a
2831 * single literal. If there was a match but the current match
2832 * is longer, truncate the previous match to a single literal.
2834 Tracevv((stderr
,"%c", s
->window
[s
->strstart
-1]));
2835 _tr_tally_lit(s
, s
->window
[s
->strstart
-1], bflush
);
2837 FLUSH_BLOCK_ONLY(s
, 0);
2841 if (s
->strm
->avail_out
== 0) return need_more
;
2843 /* There is no previous match to compare with, wait for
2844 * the next step to decide.
2846 s
->match_available
= 1;
2851 Assert (flush
!= Z_NO_FLUSH
, "no flush?");
2852 if (s
->match_available
) {
2853 Tracevv((stderr
,"%c", s
->window
[s
->strstart
-1]));
2854 _tr_tally_lit(s
, s
->window
[s
->strstart
-1], bflush
);
2855 s
->match_available
= 0;
2857 s
->insert
= s
->strstart
< MIN_MATCH
-1 ? s
->strstart
: MIN_MATCH
-1;
2858 if (flush
== Z_FINISH
) {
2867 /* ===========================================================================
2868 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
2869 * one. Do not maintain a hash table. (It will be regenerated if this run of
2870 * deflate switches away from Z_RLE.)
2872 static block_state
deflate_rle( deflate_state
*s
, int flush
)
2874 int bflush
; /* set if current block must be flushed */
2875 uInt prev
; /* byte at distance one to match */
2876 Bytef
*scan
, *strend
; /* scan goes up to strend for length of run */
2879 /* Make sure that we always have enough lookahead, except
2880 * at the end of the input file. We need MAX_MATCH bytes
2881 * for the longest run, plus one for the unrolled loop.
2883 if (s
->lookahead
<= MAX_MATCH
) {
2885 if (s
->lookahead
<= MAX_MATCH
&& flush
== Z_NO_FLUSH
) {
2888 if (s
->lookahead
== 0) break; /* flush the current block */
2891 /* See how many times the previous byte repeats */
2892 s
->match_length
= 0;
2893 if (s
->lookahead
>= MIN_MATCH
&& s
->strstart
> 0) {
2894 scan
= s
->window
+ s
->strstart
- 1;
2896 if (prev
== *++scan
&& prev
== *++scan
&& prev
== *++scan
) {
2897 strend
= s
->window
+ s
->strstart
+ MAX_MATCH
;
2899 } while (prev
== *++scan
&& prev
== *++scan
&&
2900 prev
== *++scan
&& prev
== *++scan
&&
2901 prev
== *++scan
&& prev
== *++scan
&&
2902 prev
== *++scan
&& prev
== *++scan
&&
2904 s
->match_length
= MAX_MATCH
- (uInt
)(strend
- scan
);
2905 if (s
->match_length
> s
->lookahead
)
2906 s
->match_length
= s
->lookahead
;
2908 Assert(scan
<= s
->window
+(uInt
)(s
->window_size
-1), "wild scan");
2911 /* Emit match if have run of MIN_MATCH or longer, else emit literal */
2912 if (s
->match_length
>= MIN_MATCH
) {
2913 check_match(s
, s
->strstart
, s
->strstart
- 1, s
->match_length
);
2915 _tr_tally_dist(s
, 1, s
->match_length
- MIN_MATCH
, bflush
);
2917 s
->lookahead
-= s
->match_length
;
2918 s
->strstart
+= s
->match_length
;
2919 s
->match_length
= 0;
2921 /* No match, output a literal byte */
2922 Tracevv((stderr
,"%c", s
->window
[s
->strstart
]));
2923 _tr_tally_lit (s
, s
->window
[s
->strstart
], bflush
);
2927 if (bflush
) FLUSH_BLOCK(s
, 0);
2930 if (flush
== Z_FINISH
) {
2939 /* ===========================================================================
2940 * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
2941 * (It will be regenerated if this run of deflate switches away from Huffman.)
2943 static block_state
deflate_huff( deflate_state
*s
, int flush
)
2945 int bflush
; /* set if current block must be flushed */
2948 /* Make sure that we have a literal to write. */
2949 if (s
->lookahead
== 0) {
2951 if (s
->lookahead
== 0) {
2952 if (flush
== Z_NO_FLUSH
)
2954 break; /* flush the current block */
2958 /* Output a literal byte */
2959 s
->match_length
= 0;
2960 Tracevv((stderr
,"%c", s
->window
[s
->strstart
]));
2961 _tr_tally_lit (s
, s
->window
[s
->strstart
], bflush
);
2964 if (bflush
) FLUSH_BLOCK(s
, 0);
2967 if (flush
== Z_FINISH
) {