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