1/* deflate.c -- compress data using the deflation algorithm
2 * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/*
7 *  ALGORITHM
8 *
9 *      The "deflation" process depends on being able to identify portions
10 *      of the input text which are identical to earlier input (within a
11 *      sliding window trailing behind the input currently being processed).
12 *
13 *      The most straightforward technique turns out to be the fastest for
14 *      most input files: try all possible matches and select the longest.
15 *      The key feature of this algorithm is that insertions into the string
16 *      dictionary are very simple and thus fast, and deletions are avoided
17 *      completely. Insertions are performed at each input character, whereas
18 *      string matches are performed only when the previous match ends. So it
19 *      is preferable to spend more time in matches to allow very fast string
20 *      insertions and avoid deletions. The matching algorithm for small
21 *      strings is inspired from that of Rabin & Karp. A brute force approach
22 *      is used to find longer strings when a small match has been found.
23 *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
24 *      (by Leonid Broukhis).
25 *         A previous version of this file used a more sophisticated algorithm
26 *      (by Fiala and Greene) which is guaranteed to run in linear amortized
27 *      time, but has a larger average cost, uses more memory and is patented.
28 *      However the F&G algorithm may be faster for some highly redundant
29 *      files if the parameter max_chain_length (described below) is too large.
30 *
31 *  ACKNOWLEDGEMENTS
32 *
33 *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
34 *      I found it in 'freeze' written by Leonid Broukhis.
35 *      Thanks to many people for bug reports and testing.
36 *
37 *  REFERENCES
38 *
39 *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
40 *      Available in http://tools.ietf.org/html/rfc1951
41 *
42 *      A description of the Rabin and Karp algorithm is given in the book
43 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
44 *
45 *      Fiala,E.R., and Greene,D.H.
46 *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
47 *
48 */
49
50#include "deflate.h"
51
52/*
53  If you use the zlib library in a product, an acknowledgment is welcome
54  in the documentation of your product. If for some reason you cannot
55  include such an acknowledgment, I would appreciate that you keep this
56  copyright string in the executable of your product.
57 */
58
59typedef enum {
60    need_more,      /* block not completed, need more input or more output */
61    block_done,     /* block flush performed */
62    finish_started, /* finish started, need only more output at next deflate */
63    finish_done     /* finish done, accept no more input or output */
64} block_state;
65
66typedef block_state (*compress_func)(deflate_state *s, int flush);
67/* Compression function. Returns the block state after the call. */
68
69local block_state deflate_stored(deflate_state *s, int flush);
70local block_state deflate_fast(deflate_state *s, int flush);
71#ifndef FASTEST
72local block_state deflate_slow(deflate_state *s, int flush);
73#endif
74local block_state deflate_rle(deflate_state *s, int flush);
75local block_state deflate_huff(deflate_state *s, int flush);
76
77/* ===========================================================================
78 * Local data
79 */
80
81#define NIL 0
82/* Tail of hash chains */
83
84#ifndef TOO_FAR
85#  define TOO_FAR 4096
86#endif
87/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
88
89/* Values for max_lazy_match, good_match and max_chain_length, depending on
90 * the desired pack level (0..9). The values given below have been tuned to
91 * exclude worst case performance for pathological files. Better values may be
92 * found for specific files.
93 */
94typedef struct config_s {
95   ush good_length; /* reduce lazy search above this match length */
96   ush max_lazy;    /* do not perform lazy search above this match length */
97   ush nice_length; /* quit search above this match length */
98   ush max_chain;
99   compress_func func;
100} config;
101
102#ifdef FASTEST
103local const config configuration_table[2] = {
104/*      good lazy nice chain */
105/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
106/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
107#else
108local const config configuration_table[10] = {
109/*      good lazy nice chain */
110/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
111/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
112/* 2 */ {4,    5, 16,    8, deflate_fast},
113/* 3 */ {4,    6, 32,   32, deflate_fast},
114
115/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
116/* 5 */ {8,   16, 32,   32, deflate_slow},
117/* 6 */ {8,   16, 128, 128, deflate_slow},
118/* 7 */ {8,   32, 128, 256, deflate_slow},
119/* 8 */ {32, 128, 258, 1024, deflate_slow},
120/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
121#endif
122
123/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
124 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
125 * meaning.
126 */
127
128/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
129#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0))
130
131/* ===========================================================================
132 * Update a hash value with the given input byte
133 * IN  assertion: all calls to UPDATE_HASH are made with consecutive input
134 *    characters, so that a running hash key can be computed from the previous
135 *    key instead of complete recalculation each time.
136 */
137#define UPDATE_HASH(s,h,c) (h = (((h) << s->hash_shift) ^ (c)) & s->hash_mask)
138
139
140/* ===========================================================================
141 * Insert string str in the dictionary and set match_head to the previous head
142 * of the hash chain (the most recent string with same hash key). Return
143 * the previous length of the hash chain.
144 * If this file is compiled with -DFASTEST, the compression level is forced
145 * to 1, and no hash chains are maintained.
146 * IN  assertion: all calls to INSERT_STRING are made with consecutive input
147 *    characters and the first MIN_MATCH bytes of str are valid (except for
148 *    the last MIN_MATCH-1 bytes of the input file).
149 */
150#ifdef FASTEST
151#define INSERT_STRING(s, str, match_head) \
152   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
153    match_head = s->head[s->ins_h], \
154    s->head[s->ins_h] = (Pos)(str))
155#else
156#define INSERT_STRING(s, str, match_head) \
157   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
158    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
159    s->head[s->ins_h] = (Pos)(str))
160#endif
161
162/* ===========================================================================
163 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
164 * prev[] will be initialized on the fly.
165 */
166#define CLEAR_HASH(s) \
167    do { \
168        s->head[s->hash_size - 1] = NIL; \
169        zmemzero((Bytef *)s->head, \
170                 (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \
171    } while (0)
172
173/* ===========================================================================
174 * Slide the hash table when sliding the window down (could be avoided with 32
175 * bit values at the expense of memory usage). We slide even when level == 0 to
176 * keep the hash table consistent if we switch back to level > 0 later.
177 */
178#if defined(__has_feature)
179#  if __has_feature(memory_sanitizer)
180     __attribute__((no_sanitize("memory")))
181#  endif
182#endif
183local void slide_hash(deflate_state *s) {
184    unsigned n, m;
185    Posf *p;
186    uInt wsize = s->w_size;
187
188    n = s->hash_size;
189    p = &s->head[n];
190    do {
191        m = *--p;
192        *p = (Pos)(m >= wsize ? m - wsize : NIL);
193    } while (--n);
194    n = wsize;
195#ifndef FASTEST
196    p = &s->prev[n];
197    do {
198        m = *--p;
199        *p = (Pos)(m >= wsize ? m - wsize : NIL);
200        /* If n is not on any hash chain, prev[n] is garbage but
201         * its value will never be used.
202         */
203    } while (--n);
204#endif
205}
206
207/* ===========================================================================
208 * Read a new buffer from the current input stream, update the adler32
209 * and total number of bytes read.  All deflate() input goes through
210 * this function so some applications may wish to modify it to avoid
211 * allocating a large strm->next_in buffer and copying from it.
212 * (See also flush_pending()).
213 */
214local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) {
215    unsigned len = strm->avail_in;
216
217    if (len > size) len = size;
218    if (len == 0) return 0;
219
220    strm->avail_in  -= len;
221
222    zmemcpy(buf, strm->next_in, len);
223    if (strm->state->wrap == 1) {
224        strm->adler = adler32(strm->adler, buf, len);
225    }
226#ifdef GZIP
227    else if (strm->state->wrap == 2) {
228        strm->adler = crc32(strm->adler, buf, len);
229    }
230#endif
231    strm->next_in  += len;
232    strm->total_in += len;
233
234    return len;
235}
236
237/* ===========================================================================
238 * Fill the window when the lookahead becomes insufficient.
239 * Updates strstart and lookahead.
240 *
241 * IN assertion: lookahead < MIN_LOOKAHEAD
242 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
243 *    At least one byte has been read, or avail_in == 0; reads are
244 *    performed for at least two bytes (required for the zip translate_eol
245 *    option -- not supported here).
246 */
247local void fill_window(deflate_state *s) {
248    unsigned n;
249    unsigned more;    /* Amount of free space at the end of the window. */
250    uInt wsize = s->w_size;
251
252    Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
253
254    do {
255        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
256
257        /* Deal with !@#$% 64K limit: */
258        if (sizeof(int) <= 2) {
259            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
260                more = wsize;
261
262            } else if (more == (unsigned)(-1)) {
263                /* Very unlikely, but possible on 16 bit machine if
264                 * strstart == 0 && lookahead == 1 (input done a byte at time)
265                 */
266                more--;
267            }
268        }
269
270        /* If the window is almost full and there is insufficient lookahead,
271         * move the upper half to the lower one to make room in the upper half.
272         */
273        if (s->strstart >= wsize + MAX_DIST(s)) {
274
275            zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more);
276            s->match_start -= wsize;
277            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
278            s->block_start -= (long) wsize;
279            if (s->insert > s->strstart)
280                s->insert = s->strstart;
281            slide_hash(s);
282            more += wsize;
283        }
284        if (s->strm->avail_in == 0) break;
285
286        /* If there was no sliding:
287         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
288         *    more == window_size - lookahead - strstart
289         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
290         * => more >= window_size - 2*WSIZE + 2
291         * In the BIG_MEM or MMAP case (not yet supported),
292         *   window_size == input_size + MIN_LOOKAHEAD  &&
293         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
294         * Otherwise, window_size == 2*WSIZE so more >= 2.
295         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
296         */
297        Assert(more >= 2, "more < 2");
298
299        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
300        s->lookahead += n;
301
302        /* Initialize the hash value now that we have some input: */
303        if (s->lookahead + s->insert >= MIN_MATCH) {
304            uInt str = s->strstart - s->insert;
305            s->ins_h = s->window[str];
306            UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
307#if MIN_MATCH != 3
308            Call UPDATE_HASH() MIN_MATCH-3 more times
309#endif
310            while (s->insert) {
311                UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
312#ifndef FASTEST
313                s->prev[str & s->w_mask] = s->head[s->ins_h];
314#endif
315                s->head[s->ins_h] = (Pos)str;
316                str++;
317                s->insert--;
318                if (s->lookahead + s->insert < MIN_MATCH)
319                    break;
320            }
321        }
322        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
323         * but this is not important since only literal bytes will be emitted.
324         */
325
326    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
327
328    /* If the WIN_INIT bytes after the end of the current data have never been
329     * written, then zero those bytes in order to avoid memory check reports of
330     * the use of uninitialized (or uninitialised as Julian writes) bytes by
331     * the longest match routines.  Update the high water mark for the next
332     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
333     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
334     */
335    if (s->high_water < s->window_size) {
336        ulg curr = s->strstart + (ulg)(s->lookahead);
337        ulg init;
338
339        if (s->high_water < curr) {
340            /* Previous high water mark below current data -- zero WIN_INIT
341             * bytes or up to end of window, whichever is less.
342             */
343            init = s->window_size - curr;
344            if (init > WIN_INIT)
345                init = WIN_INIT;
346            zmemzero(s->window + curr, (unsigned)init);
347            s->high_water = curr + init;
348        }
349        else if (s->high_water < (ulg)curr + WIN_INIT) {
350            /* High water mark at or above current data, but below current data
351             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
352             * to end of window, whichever is less.
353             */
354            init = (ulg)curr + WIN_INIT - s->high_water;
355            if (init > s->window_size - s->high_water)
356                init = s->window_size - s->high_water;
357            zmemzero(s->window + s->high_water, (unsigned)init);
358            s->high_water += init;
359        }
360    }
361
362    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
363           "not enough room for search");
364}
365
366/* ========================================================================= */
367int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version,
368                         int stream_size) {
369    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
370                         Z_DEFAULT_STRATEGY, version, stream_size);
371    /* To do: ignore strm->next_in if we use it as window */
372}
373
374/* ========================================================================= */
375int ZEXPORT deflateInit2_(z_streamp strm, int level, int method,
376                          int windowBits, int memLevel, int strategy,
377                          const char *version, int stream_size) {
378    deflate_state *s;
379    int wrap = 1;
380    static const char my_version[] = ZLIB_VERSION;
381
382    if (version == Z_NULL || version[0] != my_version[0] ||
383        stream_size != sizeof(z_stream)) {
384        return Z_VERSION_ERROR;
385    }
386    if (strm == Z_NULL) return Z_STREAM_ERROR;
387
388    strm->msg = Z_NULL;
389    if (strm->zalloc == (alloc_func)0) {
390#ifdef Z_SOLO
391        return Z_STREAM_ERROR;
392#else
393        strm->zalloc = zcalloc;
394        strm->opaque = (voidpf)0;
395#endif
396    }
397    if (strm->zfree == (free_func)0)
398#ifdef Z_SOLO
399        return Z_STREAM_ERROR;
400#else
401        strm->zfree = zcfree;
402#endif
403
404#ifdef FASTEST
405    if (level != 0) level = 1;
406#else
407    if (level == Z_DEFAULT_COMPRESSION) level = 6;
408#endif
409
410    if (windowBits < 0) { /* suppress zlib wrapper */
411        wrap = 0;
412        if (windowBits < -15)
413            return Z_STREAM_ERROR;
414        windowBits = -windowBits;
415    }
416#ifdef GZIP
417    else if (windowBits > 15) {
418        wrap = 2;       /* write gzip wrapper instead */
419        windowBits -= 16;
420    }
421#endif
422    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
423        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
424        strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
425        return Z_STREAM_ERROR;
426    }
427    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
428    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
429    if (s == Z_NULL) return Z_MEM_ERROR;
430    strm->state = (struct internal_state FAR *)s;
431    s->strm = strm;
432    s->status = INIT_STATE;     /* to pass state test in deflateReset() */
433
434    s->wrap = wrap;
435    s->gzhead = Z_NULL;
436    s->w_bits = (uInt)windowBits;
437    s->w_size = 1 << s->w_bits;
438    s->w_mask = s->w_size - 1;
439
440    s->hash_bits = (uInt)memLevel + 7;
441    s->hash_size = 1 << s->hash_bits;
442    s->hash_mask = s->hash_size - 1;
443    s->hash_shift =  ((s->hash_bits + MIN_MATCH-1) / MIN_MATCH);
444
445    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
446    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
447    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
448
449    s->high_water = 0;      /* nothing written to s->window yet */
450
451    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
452
453    /* We overlay pending_buf and sym_buf. This works since the average size
454     * for length/distance pairs over any compressed block is assured to be 31
455     * bits or less.
456     *
457     * Analysis: The longest fixed codes are a length code of 8 bits plus 5
458     * extra bits, for lengths 131 to 257. The longest fixed distance codes are
459     * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest
460     * possible fixed-codes length/distance pair is then 31 bits total.
461     *
462     * sym_buf starts one-fourth of the way into pending_buf. So there are
463     * three bytes in sym_buf for every four bytes in pending_buf. Each symbol
464     * in sym_buf is three bytes -- two for the distance and one for the
465     * literal/length. As each symbol is consumed, the pointer to the next
466     * sym_buf value to read moves forward three bytes. From that symbol, up to
467     * 31 bits are written to pending_buf. The closest the written pending_buf
468     * bits gets to the next sym_buf symbol to read is just before the last
469     * code is written. At that time, 31*(n - 2) bits have been written, just
470     * after 24*(n - 2) bits have been consumed from sym_buf. sym_buf starts at
471     * 8*n bits into pending_buf. (Note that the symbol buffer fills when n - 1
472     * symbols are written.) The closest the writing gets to what is unread is
473     * then n + 14 bits. Here n is lit_bufsize, which is 16384 by default, and
474     * can range from 128 to 32768.
475     *
476     * Therefore, at a minimum, there are 142 bits of space between what is
477     * written and what is read in the overlain buffers, so the symbols cannot
478     * be overwritten by the compressed data. That space is actually 139 bits,
479     * due to the three-bit fixed-code block header.
480     *
481     * That covers the case where either Z_FIXED is specified, forcing fixed
482     * codes, or when the use of fixed codes is chosen, because that choice
483     * results in a smaller compressed block than dynamic codes. That latter
484     * condition then assures that the above analysis also covers all dynamic
485     * blocks. A dynamic-code block will only be chosen to be emitted if it has
486     * fewer bits than a fixed-code block would for the same set of symbols.
487     * Therefore its average symbol length is assured to be less than 31. So
488     * the compressed data for a dynamic block also cannot overwrite the
489     * symbols from which it is being constructed.
490     */
491
492    s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS);
493    s->pending_buf_size = (ulg)s->lit_bufsize * 4;
494
495    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
496        s->pending_buf == Z_NULL) {
497        s->status = FINISH_STATE;
498        strm->msg = ERR_MSG(Z_MEM_ERROR);
499        deflateEnd (strm);
500        return Z_MEM_ERROR;
501    }
502#ifdef LIT_MEM
503    s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1));
504    s->l_buf = s->pending_buf + (s->lit_bufsize << 2);
505    s->sym_end = s->lit_bufsize - 1;
506#else
507    s->sym_buf = s->pending_buf + s->lit_bufsize;
508    s->sym_end = (s->lit_bufsize - 1) * 3;
509#endif
510    /* We avoid equality with lit_bufsize*3 because of wraparound at 64K
511     * on 16 bit machines and because stored blocks are restricted to
512     * 64K-1 bytes.
513     */
514
515    s->level = level;
516    s->strategy = strategy;
517    s->method = (Byte)method;
518
519    return deflateReset(strm);
520}
521
522/* =========================================================================
523 * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
524 */
525local int deflateStateCheck(z_streamp strm) {
526    deflate_state *s;
527    if (strm == Z_NULL ||
528        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
529        return 1;
530    s = strm->state;
531    if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE &&
532#ifdef GZIP
533                                           s->status != GZIP_STATE &&
534#endif
535                                           s->status != EXTRA_STATE &&
536                                           s->status != NAME_STATE &&
537                                           s->status != COMMENT_STATE &&
538                                           s->status != HCRC_STATE &&
539                                           s->status != BUSY_STATE &&
540                                           s->status != FINISH_STATE))
541        return 1;
542    return 0;
543}
544
545/* ========================================================================= */
546int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary,
547                                 uInt  dictLength) {
548    deflate_state *s;
549    uInt str, n;
550    int wrap;
551    unsigned avail;
552    z_const unsigned char *next;
553
554    if (deflateStateCheck(strm) || dictionary == Z_NULL)
555        return Z_STREAM_ERROR;
556    s = strm->state;
557    wrap = s->wrap;
558    if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
559        return Z_STREAM_ERROR;
560
561    /* when using zlib wrappers, compute Adler-32 for provided dictionary */
562    if (wrap == 1)
563        strm->adler = adler32(strm->adler, dictionary, dictLength);
564    s->wrap = 0;                    /* avoid computing Adler-32 in read_buf */
565
566    /* if dictionary would fill window, just replace the history */
567    if (dictLength >= s->w_size) {
568        if (wrap == 0) {            /* already empty otherwise */
569            CLEAR_HASH(s);
570            s->strstart = 0;
571            s->block_start = 0L;
572            s->insert = 0;
573        }
574        dictionary += dictLength - s->w_size;  /* use the tail */
575        dictLength = s->w_size;
576    }
577
578    /* insert dictionary into window and hash */
579    avail = strm->avail_in;
580    next = strm->next_in;
581    strm->avail_in = dictLength;
582    strm->next_in = (z_const Bytef *)dictionary;
583    fill_window(s);
584    while (s->lookahead >= MIN_MATCH) {
585        str = s->strstart;
586        n = s->lookahead - (MIN_MATCH-1);
587        do {
588            UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
589#ifndef FASTEST
590            s->prev[str & s->w_mask] = s->head[s->ins_h];
591#endif
592            s->head[s->ins_h] = (Pos)str;
593            str++;
594        } while (--n);
595        s->strstart = str;
596        s->lookahead = MIN_MATCH-1;
597        fill_window(s);
598    }
599    s->strstart += s->lookahead;
600    s->block_start = (long)s->strstart;
601    s->insert = s->lookahead;
602    s->lookahead = 0;
603    s->match_length = s->prev_length = MIN_MATCH-1;
604    s->match_available = 0;
605    strm->next_in = next;
606    strm->avail_in = avail;
607    s->wrap = wrap;
608    return Z_OK;
609}
610
611/* ========================================================================= */
612int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary,
613                                 uInt *dictLength) {
614    deflate_state *s;
615    uInt len;
616
617    if (deflateStateCheck(strm))
618        return Z_STREAM_ERROR;
619    s = strm->state;
620    len = s->strstart + s->lookahead;
621    if (len > s->w_size)
622        len = s->w_size;
623    if (dictionary != Z_NULL && len)
624        zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len);
625    if (dictLength != Z_NULL)
626        *dictLength = len;
627    return Z_OK;
628}
629
630/* ========================================================================= */
631int ZEXPORT deflateResetKeep(z_streamp strm) {
632    deflate_state *s;
633
634    if (deflateStateCheck(strm)) {
635        return Z_STREAM_ERROR;
636    }
637
638    strm->total_in = strm->total_out = 0;
639    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
640    strm->data_type = Z_UNKNOWN;
641
642    s = (deflate_state *)strm->state;
643    s->pending = 0;
644    s->pending_out = s->pending_buf;
645
646    if (s->wrap < 0) {
647        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
648    }
649    s->status =
650#ifdef GZIP
651        s->wrap == 2 ? GZIP_STATE :
652#endif
653        INIT_STATE;
654    strm->adler =
655#ifdef GZIP
656        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
657#endif
658        adler32(0L, Z_NULL, 0);
659    s->last_flush = -2;
660
661    _tr_init(s);
662
663    return Z_OK;
664}
665
666/* ===========================================================================
667 * Initialize the "longest match" routines for a new zlib stream
668 */
669local void lm_init(deflate_state *s) {
670    s->window_size = (ulg)2L*s->w_size;
671
672    CLEAR_HASH(s);
673
674    /* Set the default configuration parameters:
675     */
676    s->max_lazy_match   = configuration_table[s->level].max_lazy;
677    s->good_match       = configuration_table[s->level].good_length;
678    s->nice_match       = configuration_table[s->level].nice_length;
679    s->max_chain_length = configuration_table[s->level].max_chain;
680
681    s->strstart = 0;
682    s->block_start = 0L;
683    s->lookahead = 0;
684    s->insert = 0;
685    s->match_length = s->prev_length = MIN_MATCH-1;
686    s->match_available = 0;
687    s->ins_h = 0;
688}
689
690/* ========================================================================= */
691int ZEXPORT deflateReset(z_streamp strm) {
692    int ret;
693
694    ret = deflateResetKeep(strm);
695    if (ret == Z_OK)
696        lm_init(strm->state);
697    return ret;
698}
699
700/* ========================================================================= */
701int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) {
702    if (deflateStateCheck(strm) || strm->state->wrap != 2)
703        return Z_STREAM_ERROR;
704    strm->state->gzhead = head;
705    return Z_OK;
706}
707
708/* ========================================================================= */
709int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) {
710    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
711    if (pending != Z_NULL)
712        *pending = strm->state->pending;
713    if (bits != Z_NULL)
714        *bits = strm->state->bi_valid;
715    return Z_OK;
716}
717
718/* ========================================================================= */
719int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) {
720    deflate_state *s;
721    int put;
722
723    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
724    s = strm->state;
725#ifdef LIT_MEM
726    if (bits < 0 || bits > 16 ||
727        (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3))
728        return Z_BUF_ERROR;
729#else
730    if (bits < 0 || bits > 16 ||
731        s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3))
732        return Z_BUF_ERROR;
733#endif
734    do {
735        put = Buf_size - s->bi_valid;
736        if (put > bits)
737            put = bits;
738        s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
739        s->bi_valid += put;
740        _tr_flush_bits(s);
741        value >>= put;
742        bits -= put;
743    } while (bits);
744    return Z_OK;
745}
746
747/* ========================================================================= */
748int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) {
749    deflate_state *s;
750    compress_func func;
751
752    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
753    s = strm->state;
754
755#ifdef FASTEST
756    if (level != 0) level = 1;
757#else
758    if (level == Z_DEFAULT_COMPRESSION) level = 6;
759#endif
760    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
761        return Z_STREAM_ERROR;
762    }
763    func = configuration_table[s->level].func;
764
765    if ((strategy != s->strategy || func != configuration_table[level].func) &&
766        s->last_flush != -2) {
767        /* Flush the last buffer: */
768        int err = deflate(strm, Z_BLOCK);
769        if (err == Z_STREAM_ERROR)
770            return err;
771        if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
772            return Z_BUF_ERROR;
773    }
774    if (s->level != level) {
775        if (s->level == 0 && s->matches != 0) {
776            if (s->matches == 1)
777                slide_hash(s);
778            else
779                CLEAR_HASH(s);
780            s->matches = 0;
781        }
782        s->level = level;
783        s->max_lazy_match   = configuration_table[level].max_lazy;
784        s->good_match       = configuration_table[level].good_length;
785        s->nice_match       = configuration_table[level].nice_length;
786        s->max_chain_length = configuration_table[level].max_chain;
787    }
788    s->strategy = strategy;
789    return Z_OK;
790}
791
792/* ========================================================================= */
793int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy,
794                        int nice_length, int max_chain) {
795    deflate_state *s;
796
797    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
798    s = strm->state;
799    s->good_match = (uInt)good_length;
800    s->max_lazy_match = (uInt)max_lazy;
801    s->nice_match = nice_length;
802    s->max_chain_length = (uInt)max_chain;
803    return Z_OK;
804}
805
806/* =========================================================================
807 * For the default windowBits of 15 and memLevel of 8, this function returns a
808 * close to exact, as well as small, upper bound on the compressed size. This
809 * is an expansion of ~0.03%, plus a small constant.
810 *
811 * For any setting other than those defaults for windowBits and memLevel, one
812 * of two worst case bounds is returned. This is at most an expansion of ~4% or
813 * ~13%, plus a small constant.
814 *
815 * Both the 0.03% and 4% derive from the overhead of stored blocks. The first
816 * one is for stored blocks of 16383 bytes (memLevel == 8), whereas the second
817 * is for stored blocks of 127 bytes (the worst case memLevel == 1). The
818 * expansion results from five bytes of header for each stored block.
819 *
820 * The larger expansion of 13% results from a window size less than or equal to
821 * the symbols buffer size (windowBits <= memLevel + 7). In that case some of
822 * the data being compressed may have slid out of the sliding window, impeding
823 * a stored block from being emitted. Then the only choice is a fixed or
824 * dynamic block, where a fixed block limits the maximum expansion to 9 bits
825 * per 8-bit byte, plus 10 bits for every block. The smallest block size for
826 * which this can occur is 255 (memLevel == 2).
827 *
828 * Shifts are used to approximate divisions, for speed.
829 */
830uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) {
831    deflate_state *s;
832    uLong fixedlen, storelen, wraplen;
833
834    /* upper bound for fixed blocks with 9-bit literals and length 255
835       (memLevel == 2, which is the lowest that may not use stored blocks) --
836       ~13% overhead plus a small constant */
837    fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) +
838               (sourceLen >> 9) + 4;
839
840    /* upper bound for stored blocks with length 127 (memLevel == 1) --
841       ~4% overhead plus a small constant */
842    storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) +
843               (sourceLen >> 11) + 7;
844
845    /* if can't get parameters, return larger bound plus a wrapper */
846    if (deflateStateCheck(strm))
847        return (fixedlen > storelen ? fixedlen : storelen) + 18;
848
849    /* compute wrapper length */
850    s = strm->state;
851    switch (s->wrap < 0 ? -s->wrap : s->wrap) {
852    case 0:                                 /* raw deflate */
853        wraplen = 0;
854        break;
855    case 1:                                 /* zlib wrapper */
856        wraplen = 6 + (s->strstart ? 4 : 0);
857        break;
858#ifdef GZIP
859    case 2:                                 /* gzip wrapper */
860        wraplen = 18;
861        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
862            Bytef *str;
863            if (s->gzhead->extra != Z_NULL)
864                wraplen += 2 + s->gzhead->extra_len;
865            str = s->gzhead->name;
866            if (str != Z_NULL)
867                do {
868                    wraplen++;
869                } while (*str++);
870            str = s->gzhead->comment;
871            if (str != Z_NULL)
872                do {
873                    wraplen++;
874                } while (*str++);
875            if (s->gzhead->hcrc)
876                wraplen += 2;
877        }
878        break;
879#endif
880    default:                                /* for compiler happiness */
881        wraplen = 18;
882    }
883
884    /* if not default parameters, return one of the conservative bounds */
885    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
886        return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) +
887               wraplen;
888
889    /* default settings: return tight bound for that case -- ~0.03% overhead
890       plus a small constant */
891    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
892           (sourceLen >> 25) + 13 - 6 + wraplen;
893}
894
895/* =========================================================================
896 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
897 * IN assertion: the stream state is correct and there is enough room in
898 * pending_buf.
899 */
900local void putShortMSB(deflate_state *s, uInt b) {
901    put_byte(s, (Byte)(b >> 8));
902    put_byte(s, (Byte)(b & 0xff));
903}
904
905/* =========================================================================
906 * Flush as much pending output as possible. All deflate() output, except for
907 * some deflate_stored() output, goes through this function so some
908 * applications may wish to modify it to avoid allocating a large
909 * strm->next_out buffer and copying into it. (See also read_buf()).
910 */
911local void flush_pending(z_streamp strm) {
912    unsigned len;
913    deflate_state *s = strm->state;
914
915    _tr_flush_bits(s);
916    len = s->pending;
917    if (len > strm->avail_out) len = strm->avail_out;
918    if (len == 0) return;
919
920    zmemcpy(strm->next_out, s->pending_out, len);
921    strm->next_out  += len;
922    s->pending_out  += len;
923    strm->total_out += len;
924    strm->avail_out -= len;
925    s->pending      -= len;
926    if (s->pending == 0) {
927        s->pending_out = s->pending_buf;
928    }
929}
930
931/* ===========================================================================
932 * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1].
933 */
934#define HCRC_UPDATE(beg) \
935    do { \
936        if (s->gzhead->hcrc && s->pending > (beg)) \
937            strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
938                                s->pending - (beg)); \
939    } while (0)
940
941/* ========================================================================= */
942int ZEXPORT deflate(z_streamp strm, int flush) {
943    int old_flush; /* value of flush param for previous deflate call */
944    deflate_state *s;
945
946    if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {
947        return Z_STREAM_ERROR;
948    }
949    s = strm->state;
950
951    if (strm->next_out == Z_NULL ||
952        (strm->avail_in != 0 && strm->next_in == Z_NULL) ||
953        (s->status == FINISH_STATE && flush != Z_FINISH)) {
954        ERR_RETURN(strm, Z_STREAM_ERROR);
955    }
956    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
957
958    old_flush = s->last_flush;
959    s->last_flush = flush;
960
961    /* Flush as much pending output as possible */
962    if (s->pending != 0) {
963        flush_pending(strm);
964        if (strm->avail_out == 0) {
965            /* Since avail_out is 0, deflate will be called again with
966             * more output space, but possibly with both pending and
967             * avail_in equal to zero. There won't be anything to do,
968             * but this is not an error situation so make sure we
969             * return OK instead of BUF_ERROR at next call of deflate:
970             */
971            s->last_flush = -1;
972            return Z_OK;
973        }
974
975    /* Make sure there is something to do and avoid duplicate consecutive
976     * flushes. For repeated and useless calls with Z_FINISH, we keep
977     * returning Z_STREAM_END instead of Z_BUF_ERROR.
978     */
979    } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
980               flush != Z_FINISH) {
981        ERR_RETURN(strm, Z_BUF_ERROR);
982    }
983
984    /* User must not provide more input after the first FINISH: */
985    if (s->status == FINISH_STATE && strm->avail_in != 0) {
986        ERR_RETURN(strm, Z_BUF_ERROR);
987    }
988
989    /* Write the header */
990    if (s->status == INIT_STATE && s->wrap == 0)
991        s->status = BUSY_STATE;
992    if (s->status == INIT_STATE) {
993        /* zlib header */
994        uInt header = (Z_DEFLATED + ((s->w_bits - 8) << 4)) << 8;
995        uInt level_flags;
996
997        if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
998            level_flags = 0;
999        else if (s->level < 6)
1000            level_flags = 1;
1001        else if (s->level == 6)
1002            level_flags = 2;
1003        else
1004            level_flags = 3;
1005        header |= (level_flags << 6);
1006        if (s->strstart != 0) header |= PRESET_DICT;
1007        header += 31 - (header % 31);
1008
1009        putShortMSB(s, header);
1010
1011        /* Save the adler32 of the preset dictionary: */
1012        if (s->strstart != 0) {
1013            putShortMSB(s, (uInt)(strm->adler >> 16));
1014            putShortMSB(s, (uInt)(strm->adler & 0xffff));
1015        }
1016        strm->adler = adler32(0L, Z_NULL, 0);
1017        s->status = BUSY_STATE;
1018
1019        /* Compression must start with an empty pending buffer */
1020        flush_pending(strm);
1021        if (s->pending != 0) {
1022            s->last_flush = -1;
1023            return Z_OK;
1024        }
1025    }
1026#ifdef GZIP
1027    if (s->status == GZIP_STATE) {
1028        /* gzip header */
1029        strm->adler = crc32(0L, Z_NULL, 0);
1030        put_byte(s, 31);
1031        put_byte(s, 139);
1032        put_byte(s, 8);
1033        if (s->gzhead == Z_NULL) {
1034            put_byte(s, 0);
1035            put_byte(s, 0);
1036            put_byte(s, 0);
1037            put_byte(s, 0);
1038            put_byte(s, 0);
1039            put_byte(s, s->level == 9 ? 2 :
1040                     (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
1041                      4 : 0));
1042            put_byte(s, OS_CODE);
1043            s->status = BUSY_STATE;
1044
1045            /* Compression must start with an empty pending buffer */
1046            flush_pending(strm);
1047            if (s->pending != 0) {
1048                s->last_flush = -1;
1049                return Z_OK;
1050            }
1051        }
1052        else {
1053            put_byte(s, (s->gzhead->text ? 1 : 0) +
1054                     (s->gzhead->hcrc ? 2 : 0) +
1055                     (s->gzhead->extra == Z_NULL ? 0 : 4) +
1056                     (s->gzhead->name == Z_NULL ? 0 : 8) +
1057                     (s->gzhead->comment == Z_NULL ? 0 : 16)
1058                     );
1059            put_byte(s, (Byte)(s->gzhead->time & 0xff));
1060            put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
1061            put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
1062            put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
1063            put_byte(s, s->level == 9 ? 2 :
1064                     (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
1065                      4 : 0));
1066            put_byte(s, s->gzhead->os & 0xff);
1067            if (s->gzhead->extra != Z_NULL) {
1068                put_byte(s, s->gzhead->extra_len & 0xff);
1069                put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
1070            }
1071            if (s->gzhead->hcrc)
1072                strm->adler = crc32(strm->adler, s->pending_buf,
1073                                    s->pending);
1074            s->gzindex = 0;
1075            s->status = EXTRA_STATE;
1076        }
1077    }
1078    if (s->status == EXTRA_STATE) {
1079        if (s->gzhead->extra != Z_NULL) {
1080            ulg beg = s->pending;   /* start of bytes to update crc */
1081            uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
1082            while (s->pending + left > s->pending_buf_size) {
1083                uInt copy = s->pending_buf_size - s->pending;
1084                zmemcpy(s->pending_buf + s->pending,
1085                        s->gzhead->extra + s->gzindex, copy);
1086                s->pending = s->pending_buf_size;
1087                HCRC_UPDATE(beg);
1088                s->gzindex += copy;
1089                flush_pending(strm);
1090                if (s->pending != 0) {
1091                    s->last_flush = -1;
1092                    return Z_OK;
1093                }
1094                beg = 0;
1095                left -= copy;
1096            }
1097            zmemcpy(s->pending_buf + s->pending,
1098                    s->gzhead->extra + s->gzindex, left);
1099            s->pending += left;
1100            HCRC_UPDATE(beg);
1101            s->gzindex = 0;
1102        }
1103        s->status = NAME_STATE;
1104    }
1105    if (s->status == NAME_STATE) {
1106        if (s->gzhead->name != Z_NULL) {
1107            ulg beg = s->pending;   /* start of bytes to update crc */
1108            int val;
1109            do {
1110                if (s->pending == s->pending_buf_size) {
1111                    HCRC_UPDATE(beg);
1112                    flush_pending(strm);
1113                    if (s->pending != 0) {
1114                        s->last_flush = -1;
1115                        return Z_OK;
1116                    }
1117                    beg = 0;
1118                }
1119                val = s->gzhead->name[s->gzindex++];
1120                put_byte(s, val);
1121            } while (val != 0);
1122            HCRC_UPDATE(beg);
1123            s->gzindex = 0;
1124        }
1125        s->status = COMMENT_STATE;
1126    }
1127    if (s->status == COMMENT_STATE) {
1128        if (s->gzhead->comment != Z_NULL) {
1129            ulg beg = s->pending;   /* start of bytes to update crc */
1130            int val;
1131            do {
1132                if (s->pending == s->pending_buf_size) {
1133                    HCRC_UPDATE(beg);
1134                    flush_pending(strm);
1135                    if (s->pending != 0) {
1136                        s->last_flush = -1;
1137                        return Z_OK;
1138                    }
1139                    beg = 0;
1140                }
1141                val = s->gzhead->comment[s->gzindex++];
1142                put_byte(s, val);
1143            } while (val != 0);
1144            HCRC_UPDATE(beg);
1145        }
1146        s->status = HCRC_STATE;
1147    }
1148    if (s->status == HCRC_STATE) {
1149        if (s->gzhead->hcrc) {
1150            if (s->pending + 2 > s->pending_buf_size) {
1151                flush_pending(strm);
1152                if (s->pending != 0) {
1153                    s->last_flush = -1;
1154                    return Z_OK;
1155                }
1156            }
1157            put_byte(s, (Byte)(strm->adler & 0xff));
1158            put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
1159            strm->adler = crc32(0L, Z_NULL, 0);
1160        }
1161        s->status = BUSY_STATE;
1162
1163        /* Compression must start with an empty pending buffer */
1164        flush_pending(strm);
1165        if (s->pending != 0) {
1166            s->last_flush = -1;
1167            return Z_OK;
1168        }
1169    }
1170#endif
1171
1172    /* Start a new block or continue the current one.
1173     */
1174    if (strm->avail_in != 0 || s->lookahead != 0 ||
1175        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
1176        block_state bstate;
1177
1178        bstate = s->level == 0 ? deflate_stored(s, flush) :
1179                 s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
1180                 s->strategy == Z_RLE ? deflate_rle(s, flush) :
1181                 (*(configuration_table[s->level].func))(s, flush);
1182
1183        if (bstate == finish_started || bstate == finish_done) {
1184            s->status = FINISH_STATE;
1185        }
1186        if (bstate == need_more || bstate == finish_started) {
1187            if (strm->avail_out == 0) {
1188                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
1189            }
1190            return Z_OK;
1191            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
1192             * of deflate should use the same flush parameter to make sure
1193             * that the flush is complete. So we don't have to output an
1194             * empty block here, this will be done at next call. This also
1195             * ensures that for a very small output buffer, we emit at most
1196             * one empty block.
1197             */
1198        }
1199        if (bstate == block_done) {
1200            if (flush == Z_PARTIAL_FLUSH) {
1201                _tr_align(s);
1202            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
1203                _tr_stored_block(s, (char*)0, 0L, 0);
1204                /* For a full flush, this empty block will be recognized
1205                 * as a special marker by inflate_sync().
1206                 */
1207                if (flush == Z_FULL_FLUSH) {
1208                    CLEAR_HASH(s);             /* forget history */
1209                    if (s->lookahead == 0) {
1210                        s->strstart = 0;
1211                        s->block_start = 0L;
1212                        s->insert = 0;
1213                    }
1214                }
1215            }
1216            flush_pending(strm);
1217            if (strm->avail_out == 0) {
1218              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
1219              return Z_OK;
1220            }
1221        }
1222    }
1223
1224    if (flush != Z_FINISH) return Z_OK;
1225    if (s->wrap <= 0) return Z_STREAM_END;
1226
1227    /* Write the trailer */
1228#ifdef GZIP
1229    if (s->wrap == 2) {
1230        put_byte(s, (Byte)(strm->adler & 0xff));
1231        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
1232        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
1233        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
1234        put_byte(s, (Byte)(strm->total_in & 0xff));
1235        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
1236        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
1237        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
1238    }
1239    else
1240#endif
1241    {
1242        putShortMSB(s, (uInt)(strm->adler >> 16));
1243        putShortMSB(s, (uInt)(strm->adler & 0xffff));
1244    }
1245    flush_pending(strm);
1246    /* If avail_out is zero, the application will call deflate again
1247     * to flush the rest.
1248     */
1249    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
1250    return s->pending != 0 ? Z_OK : Z_STREAM_END;
1251}
1252
1253/* ========================================================================= */
1254int ZEXPORT deflateEnd(z_streamp strm) {
1255    int status;
1256
1257    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
1258
1259    status = strm->state->status;
1260
1261    /* Deallocate in reverse order of allocations: */
1262    TRY_FREE(strm, strm->state->pending_buf);
1263    TRY_FREE(strm, strm->state->head);
1264    TRY_FREE(strm, strm->state->prev);
1265    TRY_FREE(strm, strm->state->window);
1266
1267    ZFREE(strm, strm->state);
1268    strm->state = Z_NULL;
1269
1270    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
1271}
1272
1273/* =========================================================================
1274 * Copy the source state to the destination state.
1275 * To simplify the source, this is not supported for 16-bit MSDOS (which
1276 * doesn't have enough memory anyway to duplicate compression states).
1277 */
1278int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) {
1279#ifdef MAXSEG_64K
1280    (void)dest;
1281    (void)source;
1282    return Z_STREAM_ERROR;
1283#else
1284    deflate_state *ds;
1285    deflate_state *ss;
1286
1287
1288    if (deflateStateCheck(source) || dest == Z_NULL) {
1289        return Z_STREAM_ERROR;
1290    }
1291
1292    ss = source->state;
1293
1294    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
1295
1296    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
1297    if (ds == Z_NULL) return Z_MEM_ERROR;
1298    dest->state = (struct internal_state FAR *) ds;
1299    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
1300    ds->strm = dest;
1301
1302    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
1303    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
1304    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
1305    ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS);
1306
1307    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
1308        ds->pending_buf == Z_NULL) {
1309        deflateEnd (dest);
1310        return Z_MEM_ERROR;
1311    }
1312    /* following zmemcpy do not work for 16-bit MSDOS */
1313    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
1314    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
1315    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
1316    zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS);
1317
1318    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
1319#ifdef LIT_MEM
1320    ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1));
1321    ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2);
1322#else
1323    ds->sym_buf = ds->pending_buf + ds->lit_bufsize;
1324#endif
1325
1326    ds->l_desc.dyn_tree = ds->dyn_ltree;
1327    ds->d_desc.dyn_tree = ds->dyn_dtree;
1328    ds->bl_desc.dyn_tree = ds->bl_tree;
1329
1330    return Z_OK;
1331#endif /* MAXSEG_64K */
1332}
1333
1334#ifndef FASTEST
1335/* ===========================================================================
1336 * Set match_start to the longest match starting at the given string and
1337 * return its length. Matches shorter or equal to prev_length are discarded,
1338 * in which case the result is equal to prev_length and match_start is
1339 * garbage.
1340 * IN assertions: cur_match is the head of the hash chain for the current
1341 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
1342 * OUT assertion: the match length is not greater than s->lookahead.
1343 */
1344local uInt longest_match(deflate_state *s, IPos cur_match) {
1345    unsigned chain_length = s->max_chain_length;/* max hash chain length */
1346    register Bytef *scan = s->window + s->strstart; /* current string */
1347    register Bytef *match;                      /* matched string */
1348    register int len;                           /* length of current match */
1349    int best_len = (int)s->prev_length;         /* best match length so far */
1350    int nice_match = s->nice_match;             /* stop if match long enough */
1351    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
1352        s->strstart - (IPos)MAX_DIST(s) : NIL;
1353    /* Stop when cur_match becomes <= limit. To simplify the code,
1354     * we prevent matches with the string of window index 0.
1355     */
1356    Posf *prev = s->prev;
1357    uInt wmask = s->w_mask;
1358
1359#ifdef UNALIGNED_OK
1360    /* Compare two bytes at a time. Note: this is not always beneficial.
1361     * Try with and without -DUNALIGNED_OK to check.
1362     */
1363    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
1364    register ush scan_start = *(ushf*)scan;
1365    register ush scan_end   = *(ushf*)(scan + best_len - 1);
1366#else
1367    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1368    register Byte scan_end1  = scan[best_len - 1];
1369    register Byte scan_end   = scan[best_len];
1370#endif
1371
1372    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1373     * It is easy to get rid of this optimization if necessary.
1374     */
1375    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1376
1377    /* Do not waste too much time if we already have a good match: */
1378    if (s->prev_length >= s->good_match) {
1379        chain_length >>= 2;
1380    }
1381    /* Do not look for matches beyond the end of the input. This is necessary
1382     * to make deflate deterministic.
1383     */
1384    if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead;
1385
1386    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
1387           "need lookahead");
1388
1389    do {
1390        Assert(cur_match < s->strstart, "no future");
1391        match = s->window + cur_match;
1392
1393        /* Skip to next match if the match length cannot increase
1394         * or if the match length is less than 2.  Note that the checks below
1395         * for insufficient lookahead only occur occasionally for performance
1396         * reasons.  Therefore uninitialized memory will be accessed, and
1397         * conditional jumps will be made that depend on those values.
1398         * However the length of the match is limited to the lookahead, so
1399         * the output of deflate is not affected by the uninitialized values.
1400         */
1401#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
1402        /* This code assumes sizeof(unsigned short) == 2. Do not use
1403         * UNALIGNED_OK if your compiler uses a different size.
1404         */
1405        if (*(ushf*)(match + best_len - 1) != scan_end ||
1406            *(ushf*)match != scan_start) continue;
1407
1408        /* It is not necessary to compare scan[2] and match[2] since they are
1409         * always equal when the other bytes match, given that the hash keys
1410         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
1411         * strstart + 3, + 5, up to strstart + 257. We check for insufficient
1412         * lookahead only every 4th comparison; the 128th check will be made
1413         * at strstart + 257. If MAX_MATCH-2 is not a multiple of 8, it is
1414         * necessary to put more guard bytes at the end of the window, or
1415         * to check more often for insufficient lookahead.
1416         */
1417        Assert(scan[2] == match[2], "scan[2]?");
1418        scan++, match++;
1419        do {
1420        } while (*(ushf*)(scan += 2) == *(ushf*)(match += 2) &&
1421                 *(ushf*)(scan += 2) == *(ushf*)(match += 2) &&
1422                 *(ushf*)(scan += 2) == *(ushf*)(match += 2) &&
1423                 *(ushf*)(scan += 2) == *(ushf*)(match += 2) &&
1424                 scan < strend);
1425        /* The funny "do {}" generates better code on most compilers */
1426
1427        /* Here, scan <= window + strstart + 257 */
1428        Assert(scan <= s->window + (unsigned)(s->window_size - 1),
1429               "wild scan");
1430        if (*scan == *match) scan++;
1431
1432        len = (MAX_MATCH - 1) - (int)(strend - scan);
1433        scan = strend - (MAX_MATCH-1);
1434
1435#else /* UNALIGNED_OK */
1436
1437        if (match[best_len]     != scan_end  ||
1438            match[best_len - 1] != scan_end1 ||
1439            *match              != *scan     ||
1440            *++match            != scan[1])      continue;
1441
1442        /* The check at best_len - 1 can be removed because it will be made
1443         * again later. (This heuristic is not always a win.)
1444         * It is not necessary to compare scan[2] and match[2] since they
1445         * are always equal when the other bytes match, given that
1446         * the hash keys are equal and that HASH_BITS >= 8.
1447         */
1448        scan += 2, match++;
1449        Assert(*scan == *match, "match[2]?");
1450
1451        /* We check for insufficient lookahead only every 8th comparison;
1452         * the 256th check will be made at strstart + 258.
1453         */
1454        do {
1455        } while (*++scan == *++match && *++scan == *++match &&
1456                 *++scan == *++match && *++scan == *++match &&
1457                 *++scan == *++match && *++scan == *++match &&
1458                 *++scan == *++match && *++scan == *++match &&
1459                 scan < strend);
1460
1461        Assert(scan <= s->window + (unsigned)(s->window_size - 1),
1462               "wild scan");
1463
1464        len = MAX_MATCH - (int)(strend - scan);
1465        scan = strend - MAX_MATCH;
1466
1467#endif /* UNALIGNED_OK */
1468
1469        if (len > best_len) {
1470            s->match_start = cur_match;
1471            best_len = len;
1472            if (len >= nice_match) break;
1473#ifdef UNALIGNED_OK
1474            scan_end = *(ushf*)(scan + best_len - 1);
1475#else
1476            scan_end1  = scan[best_len - 1];
1477            scan_end   = scan[best_len];
1478#endif
1479        }
1480    } while ((cur_match = prev[cur_match & wmask]) > limit
1481             && --chain_length != 0);
1482
1483    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
1484    return s->lookahead;
1485}
1486
1487#else /* FASTEST */
1488
1489/* ---------------------------------------------------------------------------
1490 * Optimized version for FASTEST only
1491 */
1492local uInt longest_match(deflate_state *s, IPos cur_match) {
1493    register Bytef *scan = s->window + s->strstart; /* current string */
1494    register Bytef *match;                       /* matched string */
1495    register int len;                           /* length of current match */
1496    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1497
1498    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1499     * It is easy to get rid of this optimization if necessary.
1500     */
1501    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1502
1503    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
1504           "need lookahead");
1505
1506    Assert(cur_match < s->strstart, "no future");
1507
1508    match = s->window + cur_match;
1509
1510    /* Return failure if the match length is less than 2:
1511     */
1512    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
1513
1514    /* The check at best_len - 1 can be removed because it will be made
1515     * again later. (This heuristic is not always a win.)
1516     * It is not necessary to compare scan[2] and match[2] since they
1517     * are always equal when the other bytes match, given that
1518     * the hash keys are equal and that HASH_BITS >= 8.
1519     */
1520    scan += 2, match += 2;
1521    Assert(*scan == *match, "match[2]?");
1522
1523    /* We check for insufficient lookahead only every 8th comparison;
1524     * the 256th check will be made at strstart + 258.
1525     */
1526    do {
1527    } while (*++scan == *++match && *++scan == *++match &&
1528             *++scan == *++match && *++scan == *++match &&
1529             *++scan == *++match && *++scan == *++match &&
1530             *++scan == *++match && *++scan == *++match &&
1531             scan < strend);
1532
1533    Assert(scan <= s->window + (unsigned)(s->window_size - 1), "wild scan");
1534
1535    len = MAX_MATCH - (int)(strend - scan);
1536
1537    if (len < MIN_MATCH) return MIN_MATCH - 1;
1538
1539    s->match_start = cur_match;
1540    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
1541}
1542
1543#endif /* FASTEST */
1544
1545#ifdef ZLIB_DEBUG
1546
1547#define EQUAL 0
1548/* result of memcmp for equal strings */
1549
1550/* ===========================================================================
1551 * Check that the match at match_start is indeed a match.
1552 */
1553local void check_match(deflate_state *s, IPos start, IPos match, int length) {
1554    /* check that the match is indeed a match */
1555    Bytef *back = s->window + (int)match, *here = s->window + start;
1556    IPos len = length;
1557    if (match == (IPos)-1) {
1558        /* match starts one byte before the current window -- just compare the
1559           subsequent length-1 bytes */
1560        back++;
1561        here++;
1562        len--;
1563    }
1564    if (zmemcmp(back, here, len) != EQUAL) {
1565        fprintf(stderr, " start %u, match %d, length %d\n",
1566                start, (int)match, length);
1567        do {
1568            fprintf(stderr, "(%02x %02x)", *back++, *here++);
1569        } while (--len != 0);
1570        z_error("invalid match");
1571    }
1572    if (z_verbose > 1) {
1573        fprintf(stderr,"\\[%d,%d]", start - match, length);
1574        do { putc(s->window[start++], stderr); } while (--length != 0);
1575    }
1576}
1577#else
1578#  define check_match(s, start, match, length)
1579#endif /* ZLIB_DEBUG */
1580
1581/* ===========================================================================
1582 * Flush the current block, with given end-of-file flag.
1583 * IN assertion: strstart is set to the end of the current match.
1584 */
1585#define FLUSH_BLOCK_ONLY(s, last) { \
1586   _tr_flush_block(s, (s->block_start >= 0L ? \
1587                   (charf *)&s->window[(unsigned)s->block_start] : \
1588                   (charf *)Z_NULL), \
1589                (ulg)((long)s->strstart - s->block_start), \
1590                (last)); \
1591   s->block_start = s->strstart; \
1592   flush_pending(s->strm); \
1593   Tracev((stderr,"[FLUSH]")); \
1594}
1595
1596/* Same but force premature exit if necessary. */
1597#define FLUSH_BLOCK(s, last) { \
1598   FLUSH_BLOCK_ONLY(s, last); \
1599   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
1600}
1601
1602/* Maximum stored block length in deflate format (not including header). */
1603#define MAX_STORED 65535
1604
1605/* Minimum of a and b. */
1606#define MIN(a, b) ((a) > (b) ? (b) : (a))
1607
1608/* ===========================================================================
1609 * Copy without compression as much as possible from the input stream, return
1610 * the current block state.
1611 *
1612 * In case deflateParams() is used to later switch to a non-zero compression
1613 * level, s->matches (otherwise unused when storing) keeps track of the number
1614 * of hash table slides to perform. If s->matches is 1, then one hash table
1615 * slide will be done when switching. If s->matches is 2, the maximum value
1616 * allowed here, then the hash table will be cleared, since two or more slides
1617 * is the same as a clear.
1618 *
1619 * deflate_stored() is written to minimize the number of times an input byte is
1620 * copied. It is most efficient with large input and output buffers, which
1621 * maximizes the opportunities to have a single copy from next_in to next_out.
1622 */
1623local block_state deflate_stored(deflate_state *s, int flush) {
1624    /* Smallest worthy block size when not flushing or finishing. By default
1625     * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
1626     * large input and output buffers, the stored block size will be larger.
1627     */
1628    unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size);
1629
1630    /* Copy as many min_block or larger stored blocks directly to next_out as
1631     * possible. If flushing, copy the remaining available input to next_out as
1632     * stored blocks, if there is enough space.
1633     */
1634    int last = 0;
1635    unsigned len, left, have;
1636    unsigned used = s->strm->avail_in;
1637    do {
1638        /* Set len to the maximum size block that we can copy directly with the
1639         * available input data and output space. Set left to how much of that
1640         * would be copied from what's left in the window.
1641         */
1642        len = MAX_STORED;       /* maximum deflate stored block length */
1643        have = (s->bi_valid + 42) >> 3;         /* number of header bytes */
1644        if (s->strm->avail_out < have)          /* need room for header */
1645            break;
1646            /* maximum stored block length that will fit in avail_out: */
1647        have = s->strm->avail_out - have;
1648        left = s->strstart - s->block_start;    /* bytes left in window */
1649        if (len > (ulg)left + s->strm->avail_in)
1650            len = left + s->strm->avail_in;     /* limit len to the input */
1651        if (len > have)
1652            len = have;                         /* limit len to the output */
1653
1654        /* If the stored block would be less than min_block in length, or if
1655         * unable to copy all of the available input when flushing, then try
1656         * copying to the window and the pending buffer instead. Also don't
1657         * write an empty block when flushing -- deflate() does that.
1658         */
1659        if (len < min_block && ((len == 0 && flush != Z_FINISH) ||
1660                                flush == Z_NO_FLUSH ||
1661                                len != left + s->strm->avail_in))
1662            break;
1663
1664        /* Make a dummy stored block in pending to get the header bytes,
1665         * including any pending bits. This also updates the debugging counts.
1666         */
1667        last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0;
1668        _tr_stored_block(s, (char *)0, 0L, last);
1669
1670        /* Replace the lengths in the dummy stored block with len. */
1671        s->pending_buf[s->pending - 4] = (Bytef)len;
1672        s->pending_buf[s->pending - 3] = (Bytef)(len >> 8);
1673        s->pending_buf[s->pending - 2] = (Bytef)~len;
1674        s->pending_buf[s->pending - 1] = (Bytef)(~len >> 8);
1675
1676        /* Write the stored block header bytes. */
1677        flush_pending(s->strm);
1678
1679#ifdef ZLIB_DEBUG
1680        /* Update debugging counts for the data about to be copied. */
1681        s->compressed_len += len << 3;
1682        s->bits_sent += len << 3;
1683#endif
1684
1685        /* Copy uncompressed bytes from the window to next_out. */
1686        if (left) {
1687            if (left > len)
1688                left = len;
1689            zmemcpy(s->strm->next_out, s->window + s->block_start, left);
1690            s->strm->next_out += left;
1691            s->strm->avail_out -= left;
1692            s->strm->total_out += left;
1693            s->block_start += left;
1694            len -= left;
1695        }
1696
1697        /* Copy uncompressed bytes directly from next_in to next_out, updating
1698         * the check value.
1699         */
1700        if (len) {
1701            read_buf(s->strm, s->strm->next_out, len);
1702            s->strm->next_out += len;
1703            s->strm->avail_out -= len;
1704            s->strm->total_out += len;
1705        }
1706    } while (last == 0);
1707
1708    /* Update the sliding window with the last s->w_size bytes of the copied
1709     * data, or append all of the copied data to the existing window if less
1710     * than s->w_size bytes were copied. Also update the number of bytes to
1711     * insert in the hash tables, in the event that deflateParams() switches to
1712     * a non-zero compression level.
1713     */
1714    used -= s->strm->avail_in;      /* number of input bytes directly copied */
1715    if (used) {
1716        /* If any input was used, then no unused input remains in the window,
1717         * therefore s->block_start == s->strstart.
1718         */
1719        if (used >= s->w_size) {    /* supplant the previous history */
1720            s->matches = 2;         /* clear hash */
1721            zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
1722            s->strstart = s->w_size;
1723            s->insert = s->strstart;
1724        }
1725        else {
1726            if (s->window_size - s->strstart <= used) {
1727                /* Slide the window down. */
1728                s->strstart -= s->w_size;
1729                zmemcpy(s->window, s->window + s->w_size, s->strstart);
1730                if (s->matches < 2)
1731                    s->matches++;   /* add a pending slide_hash() */
1732                if (s->insert > s->strstart)
1733                    s->insert = s->strstart;
1734            }
1735            zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
1736            s->strstart += used;
1737            s->insert += MIN(used, s->w_size - s->insert);
1738        }
1739        s->block_start = s->strstart;
1740    }
1741    if (s->high_water < s->strstart)
1742        s->high_water = s->strstart;
1743
1744    /* If the last block was written to next_out, then done. */
1745    if (last)
1746        return finish_done;
1747
1748    /* If flushing and all input has been consumed, then done. */
1749    if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
1750        s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
1751        return block_done;
1752
1753    /* Fill the window with any remaining input. */
1754    have = s->window_size - s->strstart;
1755    if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
1756        /* Slide the window down. */
1757        s->block_start -= s->w_size;
1758        s->strstart -= s->w_size;
1759        zmemcpy(s->window, s->window + s->w_size, s->strstart);
1760        if (s->matches < 2)
1761            s->matches++;           /* add a pending slide_hash() */
1762        have += s->w_size;          /* more space now */
1763        if (s->insert > s->strstart)
1764            s->insert = s->strstart;
1765    }
1766    if (have > s->strm->avail_in)
1767        have = s->strm->avail_in;
1768    if (have) {
1769        read_buf(s->strm, s->window + s->strstart, have);
1770        s->strstart += have;
1771        s->insert += MIN(have, s->w_size - s->insert);
1772    }
1773    if (s->high_water < s->strstart)
1774        s->high_water = s->strstart;
1775
1776    /* There was not enough avail_out to write a complete worthy or flushed
1777     * stored block to next_out. Write a stored block to pending instead, if we
1778     * have enough input for a worthy block, or if flushing and there is enough
1779     * room for the remaining input as a stored block in the pending buffer.
1780     */
1781    have = (s->bi_valid + 42) >> 3;         /* number of header bytes */
1782        /* maximum stored block length that will fit in pending: */
1783    have = MIN(s->pending_buf_size - have, MAX_STORED);
1784    min_block = MIN(have, s->w_size);
1785    left = s->strstart - s->block_start;
1786    if (left >= min_block ||
1787        ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH &&
1788         s->strm->avail_in == 0 && left <= have)) {
1789        len = MIN(left, have);
1790        last = flush == Z_FINISH && s->strm->avail_in == 0 &&
1791               len == left ? 1 : 0;
1792        _tr_stored_block(s, (charf *)s->window + s->block_start, len, last);
1793        s->block_start += len;
1794        flush_pending(s->strm);
1795    }
1796
1797    /* We've done all we can with the available input and output. */
1798    return last ? finish_started : need_more;
1799}
1800
1801/* ===========================================================================
1802 * Compress as much as possible from the input stream, return the current
1803 * block state.
1804 * This function does not perform lazy evaluation of matches and inserts
1805 * new strings in the dictionary only for unmatched strings or for short
1806 * matches. It is used only for the fast compression options.
1807 */
1808local block_state deflate_fast(deflate_state *s, int flush) {
1809    IPos hash_head;       /* head of the hash chain */
1810    int bflush;           /* set if current block must be flushed */
1811
1812    for (;;) {
1813        /* Make sure that we always have enough lookahead, except
1814         * at the end of the input file. We need MAX_MATCH bytes
1815         * for the next match, plus MIN_MATCH bytes to insert the
1816         * string following the next match.
1817         */
1818        if (s->lookahead < MIN_LOOKAHEAD) {
1819            fill_window(s);
1820            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1821                return need_more;
1822            }
1823            if (s->lookahead == 0) break; /* flush the current block */
1824        }
1825
1826        /* Insert the string window[strstart .. strstart + 2] in the
1827         * dictionary, and set hash_head to the head of the hash chain:
1828         */
1829        hash_head = NIL;
1830        if (s->lookahead >= MIN_MATCH) {
1831            INSERT_STRING(s, s->strstart, hash_head);
1832        }
1833
1834        /* Find the longest match, discarding those <= prev_length.
1835         * At this point we have always match_length < MIN_MATCH
1836         */
1837        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
1838            /* To simplify the code, we prevent matches with the string
1839             * of window index 0 (in particular we have to avoid a match
1840             * of the string with itself at the start of the input file).
1841             */
1842            s->match_length = longest_match (s, hash_head);
1843            /* longest_match() sets match_start */
1844        }
1845        if (s->match_length >= MIN_MATCH) {
1846            check_match(s, s->strstart, s->match_start, s->match_length);
1847
1848            _tr_tally_dist(s, s->strstart - s->match_start,
1849                           s->match_length - MIN_MATCH, bflush);
1850
1851            s->lookahead -= s->match_length;
1852
1853            /* Insert new strings in the hash table only if the match length
1854             * is not too large. This saves time but degrades compression.
1855             */
1856#ifndef FASTEST
1857            if (s->match_length <= s->max_insert_length &&
1858                s->lookahead >= MIN_MATCH) {
1859                s->match_length--; /* string at strstart already in table */
1860                do {
1861                    s->strstart++;
1862                    INSERT_STRING(s, s->strstart, hash_head);
1863                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
1864                     * always MIN_MATCH bytes ahead.
1865                     */
1866                } while (--s->match_length != 0);
1867                s->strstart++;
1868            } else
1869#endif
1870            {
1871                s->strstart += s->match_length;
1872                s->match_length = 0;
1873                s->ins_h = s->window[s->strstart];
1874                UPDATE_HASH(s, s->ins_h, s->window[s->strstart + 1]);
1875#if MIN_MATCH != 3
1876                Call UPDATE_HASH() MIN_MATCH-3 more times
1877#endif
1878                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1879                 * matter since it will be recomputed at next deflate call.
1880                 */
1881            }
1882        } else {
1883            /* No match, output a literal byte */
1884            Tracevv((stderr,"%c", s->window[s->strstart]));
1885            _tr_tally_lit(s, s->window[s->strstart], bflush);
1886            s->lookahead--;
1887            s->strstart++;
1888        }
1889        if (bflush) FLUSH_BLOCK(s, 0);
1890    }
1891    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
1892    if (flush == Z_FINISH) {
1893        FLUSH_BLOCK(s, 1);
1894        return finish_done;
1895    }
1896    if (s->sym_next)
1897        FLUSH_BLOCK(s, 0);
1898    return block_done;
1899}
1900
1901#ifndef FASTEST
1902/* ===========================================================================
1903 * Same as above, but achieves better compression. We use a lazy
1904 * evaluation for matches: a match is finally adopted only if there is
1905 * no better match at the next window position.
1906 */
1907local block_state deflate_slow(deflate_state *s, int flush) {
1908    IPos hash_head;          /* head of hash chain */
1909    int bflush;              /* set if current block must be flushed */
1910
1911    /* Process the input block. */
1912    for (;;) {
1913        /* Make sure that we always have enough lookahead, except
1914         * at the end of the input file. We need MAX_MATCH bytes
1915         * for the next match, plus MIN_MATCH bytes to insert the
1916         * string following the next match.
1917         */
1918        if (s->lookahead < MIN_LOOKAHEAD) {
1919            fill_window(s);
1920            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1921                return need_more;
1922            }
1923            if (s->lookahead == 0) break; /* flush the current block */
1924        }
1925
1926        /* Insert the string window[strstart .. strstart + 2] in the
1927         * dictionary, and set hash_head to the head of the hash chain:
1928         */
1929        hash_head = NIL;
1930        if (s->lookahead >= MIN_MATCH) {
1931            INSERT_STRING(s, s->strstart, hash_head);
1932        }
1933
1934        /* Find the longest match, discarding those <= prev_length.
1935         */
1936        s->prev_length = s->match_length, s->prev_match = s->match_start;
1937        s->match_length = MIN_MATCH-1;
1938
1939        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
1940            s->strstart - hash_head <= MAX_DIST(s)) {
1941            /* To simplify the code, we prevent matches with the string
1942             * of window index 0 (in particular we have to avoid a match
1943             * of the string with itself at the start of the input file).
1944             */
1945            s->match_length = longest_match (s, hash_head);
1946            /* longest_match() sets match_start */
1947
1948            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
1949#if TOO_FAR <= 32767
1950                || (s->match_length == MIN_MATCH &&
1951                    s->strstart - s->match_start > TOO_FAR)
1952#endif
1953                )) {
1954
1955                /* If prev_match is also MIN_MATCH, match_start is garbage
1956                 * but we will ignore the current match anyway.
1957                 */
1958                s->match_length = MIN_MATCH-1;
1959            }
1960        }
1961        /* If there was a match at the previous step and the current
1962         * match is not better, output the previous match:
1963         */
1964        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
1965            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
1966            /* Do not insert strings in hash table beyond this. */
1967
1968            check_match(s, s->strstart - 1, s->prev_match, s->prev_length);
1969
1970            _tr_tally_dist(s, s->strstart - 1 - s->prev_match,
1971                           s->prev_length - MIN_MATCH, bflush);
1972
1973            /* Insert in hash table all strings up to the end of the match.
1974             * strstart - 1 and strstart are already inserted. If there is not
1975             * enough lookahead, the last two strings are not inserted in
1976             * the hash table.
1977             */
1978            s->lookahead -= s->prev_length - 1;
1979            s->prev_length -= 2;
1980            do {
1981                if (++s->strstart <= max_insert) {
1982                    INSERT_STRING(s, s->strstart, hash_head);
1983                }
1984            } while (--s->prev_length != 0);
1985            s->match_available = 0;
1986            s->match_length = MIN_MATCH-1;
1987            s->strstart++;
1988
1989            if (bflush) FLUSH_BLOCK(s, 0);
1990
1991        } else if (s->match_available) {
1992            /* If there was no match at the previous position, output a
1993             * single literal. If there was a match but the current match
1994             * is longer, truncate the previous match to a single literal.
1995             */
1996            Tracevv((stderr,"%c", s->window[s->strstart - 1]));
1997            _tr_tally_lit(s, s->window[s->strstart - 1], bflush);
1998            if (bflush) {
1999                FLUSH_BLOCK_ONLY(s, 0);
2000            }
2001            s->strstart++;
2002            s->lookahead--;
2003            if (s->strm->avail_out == 0) return need_more;
2004        } else {
2005            /* There is no previous match to compare with, wait for
2006             * the next step to decide.
2007             */
2008            s->match_available = 1;
2009            s->strstart++;
2010            s->lookahead--;
2011        }
2012    }
2013    Assert (flush != Z_NO_FLUSH, "no flush?");
2014    if (s->match_available) {
2015        Tracevv((stderr,"%c", s->window[s->strstart - 1]));
2016        _tr_tally_lit(s, s->window[s->strstart - 1], bflush);
2017        s->match_available = 0;
2018    }
2019    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
2020    if (flush == Z_FINISH) {
2021        FLUSH_BLOCK(s, 1);
2022        return finish_done;
2023    }
2024    if (s->sym_next)
2025        FLUSH_BLOCK(s, 0);
2026    return block_done;
2027}
2028#endif /* FASTEST */
2029
2030/* ===========================================================================
2031 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
2032 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
2033 * deflate switches away from Z_RLE.)
2034 */
2035local block_state deflate_rle(deflate_state *s, int flush) {
2036    int bflush;             /* set if current block must be flushed */
2037    uInt prev;              /* byte at distance one to match */
2038    Bytef *scan, *strend;   /* scan goes up to strend for length of run */
2039
2040    for (;;) {
2041        /* Make sure that we always have enough lookahead, except
2042         * at the end of the input file. We need MAX_MATCH bytes
2043         * for the longest run, plus one for the unrolled loop.
2044         */
2045        if (s->lookahead <= MAX_MATCH) {
2046            fill_window(s);
2047            if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
2048                return need_more;
2049            }
2050            if (s->lookahead == 0) break; /* flush the current block */
2051        }
2052
2053        /* See how many times the previous byte repeats */
2054        s->match_length = 0;
2055        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
2056            scan = s->window + s->strstart - 1;
2057            prev = *scan;
2058            if (prev == *++scan && prev == *++scan && prev == *++scan) {
2059                strend = s->window + s->strstart + MAX_MATCH;
2060                do {
2061                } while (prev == *++scan && prev == *++scan &&
2062                         prev == *++scan && prev == *++scan &&
2063                         prev == *++scan && prev == *++scan &&
2064                         prev == *++scan && prev == *++scan &&
2065                         scan < strend);
2066                s->match_length = MAX_MATCH - (uInt)(strend - scan);
2067                if (s->match_length > s->lookahead)
2068                    s->match_length = s->lookahead;
2069            }
2070            Assert(scan <= s->window + (uInt)(s->window_size - 1),
2071                   "wild scan");
2072        }
2073
2074        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
2075        if (s->match_length >= MIN_MATCH) {
2076            check_match(s, s->strstart, s->strstart - 1, s->match_length);
2077
2078            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
2079
2080            s->lookahead -= s->match_length;
2081            s->strstart += s->match_length;
2082            s->match_length = 0;
2083        } else {
2084            /* No match, output a literal byte */
2085            Tracevv((stderr,"%c", s->window[s->strstart]));
2086            _tr_tally_lit(s, s->window[s->strstart], bflush);
2087            s->lookahead--;
2088            s->strstart++;
2089        }
2090        if (bflush) FLUSH_BLOCK(s, 0);
2091    }
2092    s->insert = 0;
2093    if (flush == Z_FINISH) {
2094        FLUSH_BLOCK(s, 1);
2095        return finish_done;
2096    }
2097    if (s->sym_next)
2098        FLUSH_BLOCK(s, 0);
2099    return block_done;
2100}
2101
2102/* ===========================================================================
2103 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
2104 * (It will be regenerated if this run of deflate switches away from Huffman.)
2105 */
2106local block_state deflate_huff(deflate_state *s, int flush) {
2107    int bflush;             /* set if current block must be flushed */
2108
2109    for (;;) {
2110        /* Make sure that we have a literal to write. */
2111        if (s->lookahead == 0) {
2112            fill_window(s);
2113            if (s->lookahead == 0) {
2114                if (flush == Z_NO_FLUSH)
2115                    return need_more;
2116                break;      /* flush the current block */
2117            }
2118        }
2119
2120        /* Output a literal byte */
2121        s->match_length = 0;
2122        Tracevv((stderr,"%c", s->window[s->strstart]));
2123        _tr_tally_lit(s, s->window[s->strstart], bflush);
2124        s->lookahead--;
2125        s->strstart++;
2126        if (bflush) FLUSH_BLOCK(s, 0);
2127    }
2128    s->insert = 0;
2129    if (flush == Z_FINISH) {
2130        FLUSH_BLOCK(s, 1);
2131        return finish_done;
2132    }
2133    if (s->sym_next)
2134        FLUSH_BLOCK(s, 0);
2135    return block_done;
2136}
2137