Big cleanup in config help and description
[oweals/busybox.git] / archival / gzip.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Gzip implementation for busybox
4  *
5  * Based on GNU gzip Copyright (C) 1992-1993 Jean-loup Gailly.
6  *
7  * Originally adjusted for busybox by Charles P. Wright <cpw@unix.asb.com>
8  * "this is a stripped down version of gzip I put into busybox, it does
9  * only standard in to standard out with -9 compression.  It also requires
10  * the zcat module for some important functions."
11  *
12  * Adjusted further by Erik Andersen <andersen@codepoet.org> to support
13  * files as well as stdin/stdout, and to generally behave itself wrt
14  * command line handling.
15  *
16  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
17  */
18 /* big objects in bss:
19  * 00000020 b bl_count
20  * 00000074 b base_length
21  * 00000078 b base_dist
22  * 00000078 b static_dtree
23  * 0000009c b bl_tree
24  * 000000f4 b dyn_dtree
25  * 00000100 b length_code
26  * 00000200 b dist_code
27  * 0000023d b depth
28  * 00000400 b flag_buf
29  * 0000047a b heap
30  * 00000480 b static_ltree
31  * 000008f4 b dyn_ltree
32  */
33 /* TODO: full support for -v for DESKTOP
34  * "/usr/bin/gzip -v a bogus aa" should say:
35 a:       85.1% -- replaced with a.gz
36 gzip: bogus: No such file or directory
37 aa:      85.1% -- replaced with aa.gz
38 */
39
40 //config:config GZIP
41 //config:       bool "gzip"
42 //config:       default y
43 //config:       help
44 //config:         gzip is used to compress files.
45 //config:         It's probably the most widely used UNIX compression program.
46 //config:
47 //config:config FEATURE_GZIP_LONG_OPTIONS
48 //config:       bool "Enable long options"
49 //config:       default y
50 //config:       depends on GZIP && LONG_OPTS
51 //config:
52 //config:config GZIP_FAST
53 //config:       int "Trade memory for speed (0:small,slow - 2:fast,big)"
54 //config:       default 0
55 //config:       range 0 2
56 //config:       depends on GZIP
57 //config:       help
58 //config:         Enable big memory options for gzip.
59 //config:         0: small buffers, small hash-tables
60 //config:         1: larger buffers, larger hash-tables
61 //config:         2: larger buffers, largest hash-tables
62 //config:         Larger models may give slightly better compression
63 //config:
64 //config:config FEATURE_GZIP_LEVELS
65 //config:       bool "Enable compression levels"
66 //config:       default n
67 //config:       depends on GZIP
68 //config:       help
69 //config:         Enable support for compression levels 4-9. The default level
70 //config:         is 6. If levels 1-3 are specified, 4 is used.
71 //config:         If this option is not selected, -N options are ignored and -9
72 //config:         is used.
73 //config:
74 //config:config FEATURE_GZIP_DECOMPRESS
75 //config:       bool "Enable decompression"
76 //config:       default y
77 //config:       depends on GZIP || GUNZIP || ZCAT
78 //config:       help
79 //config:         Enable -d (--decompress) and -t (--test) options for gzip.
80 //config:         This will be automatically selected if gunzip or zcat is
81 //config:         enabled.
82
83 //applet:IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
84 //kbuild:lib-$(CONFIG_GZIP) += gzip.o
85
86 //usage:#define gzip_trivial_usage
87 //usage:       "[-cf" IF_FEATURE_GZIP_DECOMPRESS("dt") IF_FEATURE_GZIP_LEVELS("123456789") "] [FILE]..."
88 //usage:#define gzip_full_usage "\n\n"
89 //usage:       "Compress FILEs (or stdin)\n"
90 //usage:        IF_FEATURE_GZIP_LEVELS(
91 //usage:     "\n        -1..9   Compression level"
92 //usage:        )
93 //usage:        IF_FEATURE_GZIP_DECOMPRESS(
94 //usage:     "\n        -d      Decompress"
95 //usage:     "\n        -t      Test file integrity"
96 //usage:        )
97 //usage:     "\n        -c      Write to stdout"
98 //usage:     "\n        -f      Force"
99 //usage:
100 //usage:#define gzip_example_usage
101 //usage:       "$ ls -la /tmp/busybox*\n"
102 //usage:       "-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/busybox.tar\n"
103 //usage:       "$ gzip /tmp/busybox.tar\n"
104 //usage:       "$ ls -la /tmp/busybox*\n"
105 //usage:       "-rw-rw-r--    1 andersen andersen   554058 Apr 14 17:49 /tmp/busybox.tar.gz\n"
106
107 #include "libbb.h"
108 #include "bb_archive.h"
109
110
111 /* ===========================================================================
112  */
113 //#define DEBUG 1
114 /* Diagnostic functions */
115 #ifdef DEBUG
116 #  define Assert(cond,msg) { if (!(cond)) bb_error_msg(msg); }
117 #  define Trace(x) fprintf x
118 #  define Tracev(x) {if (verbose) fprintf x; }
119 #  define Tracevv(x) {if (verbose > 1) fprintf x; }
120 #  define Tracec(c,x) {if (verbose && (c)) fprintf x; }
121 #  define Tracecv(c,x) {if (verbose > 1 && (c)) fprintf x; }
122 #else
123 #  define Assert(cond,msg)
124 #  define Trace(x)
125 #  define Tracev(x)
126 #  define Tracevv(x)
127 #  define Tracec(c,x)
128 #  define Tracecv(c,x)
129 #endif
130
131
132 /* ===========================================================================
133  */
134 #if   CONFIG_GZIP_FAST == 0
135 # define SMALL_MEM
136 #elif CONFIG_GZIP_FAST == 1
137 # define MEDIUM_MEM
138 #elif CONFIG_GZIP_FAST == 2
139 # define BIG_MEM
140 #else
141 # error "Invalid CONFIG_GZIP_FAST value"
142 #endif
143
144 #ifndef INBUFSIZ
145 #  ifdef SMALL_MEM
146 #    define INBUFSIZ  0x2000    /* input buffer size */
147 #  else
148 #    define INBUFSIZ  0x8000    /* input buffer size */
149 #  endif
150 #endif
151
152 #ifndef OUTBUFSIZ
153 #  ifdef SMALL_MEM
154 #    define OUTBUFSIZ   8192    /* output buffer size */
155 #  else
156 #    define OUTBUFSIZ  16384    /* output buffer size */
157 #  endif
158 #endif
159
160 #ifndef DIST_BUFSIZE
161 #  ifdef SMALL_MEM
162 #    define DIST_BUFSIZE 0x2000 /* buffer for distances, see trees.c */
163 #  else
164 #    define DIST_BUFSIZE 0x8000 /* buffer for distances, see trees.c */
165 #  endif
166 #endif
167
168 /* gzip flag byte */
169 #define ASCII_FLAG   0x01       /* bit 0 set: file probably ascii text */
170 #define CONTINUATION 0x02       /* bit 1 set: continuation of multi-part gzip file */
171 #define EXTRA_FIELD  0x04       /* bit 2 set: extra field present */
172 #define ORIG_NAME    0x08       /* bit 3 set: original file name present */
173 #define COMMENT      0x10       /* bit 4 set: file comment present */
174 #define RESERVED     0xC0       /* bit 6,7:   reserved */
175
176 /* internal file attribute */
177 #define UNKNOWN 0xffff
178 #define BINARY  0
179 #define ASCII   1
180
181 #ifndef WSIZE
182 #  define WSIZE 0x8000  /* window size--must be a power of two, and */
183 #endif                  /*  at least 32K for zip's deflate method */
184
185 #define MIN_MATCH  3
186 #define MAX_MATCH  258
187 /* The minimum and maximum match lengths */
188
189 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
190 /* Minimum amount of lookahead, except at the end of the input file.
191  * See deflate.c for comments about the MIN_MATCH+1.
192  */
193
194 #define MAX_DIST  (WSIZE-MIN_LOOKAHEAD)
195 /* In order to simplify the code, particularly on 16 bit machines, match
196  * distances are limited to MAX_DIST instead of WSIZE.
197  */
198
199 #ifndef MAX_PATH_LEN
200 #  define MAX_PATH_LEN   1024   /* max pathname length */
201 #endif
202
203 #define seekable()    0 /* force sequential output */
204 #define translate_eol 0 /* no option -a yet */
205
206 #ifndef BITS
207 #  define BITS 16
208 #endif
209 #define INIT_BITS 9             /* Initial number of bits per code */
210
211 #define BIT_MASK    0x1f        /* Mask for 'number of compression bits' */
212 /* Mask 0x20 is reserved to mean a fourth header byte, and 0x40 is free.
213  * It's a pity that old uncompress does not check bit 0x20. That makes
214  * extension of the format actually undesirable because old compress
215  * would just crash on the new format instead of giving a meaningful
216  * error message. It does check the number of bits, but it's more
217  * helpful to say "unsupported format, get a new version" than
218  * "can only handle 16 bits".
219  */
220
221 #ifdef MAX_EXT_CHARS
222 #  define MAX_SUFFIX  MAX_EXT_CHARS
223 #else
224 #  define MAX_SUFFIX  30
225 #endif
226
227
228 /* ===========================================================================
229  * Compile with MEDIUM_MEM to reduce the memory requirements or
230  * with SMALL_MEM to use as little memory as possible. Use BIG_MEM if the
231  * entire input file can be held in memory (not possible on 16 bit systems).
232  * Warning: defining these symbols affects HASH_BITS (see below) and thus
233  * affects the compression ratio. The compressed output
234  * is still correct, and might even be smaller in some cases.
235  */
236
237 #ifdef SMALL_MEM
238 #   define HASH_BITS  13        /* Number of bits used to hash strings */
239 #endif
240 #ifdef MEDIUM_MEM
241 #   define HASH_BITS  14
242 #endif
243 #ifndef HASH_BITS
244 #   define HASH_BITS  15
245    /* For portability to 16 bit machines, do not use values above 15. */
246 #endif
247
248 #define HASH_SIZE (unsigned)(1<<HASH_BITS)
249 #define HASH_MASK (HASH_SIZE-1)
250 #define WMASK     (WSIZE-1)
251 /* HASH_SIZE and WSIZE must be powers of two */
252 #ifndef TOO_FAR
253 #  define TOO_FAR 4096
254 #endif
255 /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
256
257
258 /* ===========================================================================
259  * These types are not really 'char', 'short' and 'long'
260  */
261 typedef uint8_t uch;
262 typedef uint16_t ush;
263 typedef uint32_t ulg;
264 typedef int32_t lng;
265
266 typedef ush Pos;
267 typedef unsigned IPos;
268 /* A Pos is an index in the character window. We use short instead of int to
269  * save space in the various tables. IPos is used only for parameter passing.
270  */
271
272 enum {
273         WINDOW_SIZE = 2 * WSIZE,
274 /* window size, 2*WSIZE except for MMAP or BIG_MEM, where it is the
275  * input file length plus MIN_LOOKAHEAD.
276  */
277
278 #ifndef ENABLE_FEATURE_GZIP_LEVELS
279
280         max_chain_length = 4096,
281 /* To speed up deflation, hash chains are never searched beyond this length.
282  * A higher limit improves compression ratio but degrades the speed.
283  */
284
285         max_lazy_match = 258,
286 /* Attempt to find a better match only when the current match is strictly
287  * smaller than this value. This mechanism is used only for compression
288  * levels >= 4.
289  */
290
291         max_insert_length = max_lazy_match,
292 /* Insert new strings in the hash table only if the match length
293  * is not greater than this length. This saves time but degrades compression.
294  * max_insert_length is used only for compression levels <= 3.
295  */
296
297         good_match = 32,
298 /* Use a faster search when the previous match is longer than this */
299
300 /* Values for max_lazy_match, good_match and max_chain_length, depending on
301  * the desired pack level (0..9). The values given below have been tuned to
302  * exclude worst case performance for pathological files. Better values may be
303  * found for specific files.
304  */
305
306         nice_match = 258,       /* Stop searching when current match exceeds this */
307 /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
308  * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
309  * meaning.
310  */
311 #endif /* ENABLE_FEATURE_GZIP_LEVELS */
312 };
313
314
315 struct globals {
316
317 #ifdef ENABLE_FEATURE_GZIP_LEVELS
318         unsigned max_chain_length;
319         unsigned max_lazy_match;
320         unsigned good_match;
321         unsigned nice_match;
322 #define max_chain_length (G1.max_chain_length)
323 #define max_lazy_match   (G1.max_lazy_match)
324 #define good_match       (G1.good_match)
325 #define nice_match       (G1.nice_match)
326 #endif
327
328         lng block_start;
329
330 /* window position at the beginning of the current output block. Gets
331  * negative when the window is moved backwards.
332  */
333         unsigned ins_h; /* hash index of string to be inserted */
334
335 #define H_SHIFT  ((HASH_BITS+MIN_MATCH-1) / MIN_MATCH)
336 /* Number of bits by which ins_h and del_h must be shifted at each
337  * input step. It must be such that after MIN_MATCH steps, the oldest
338  * byte no longer takes part in the hash key, that is:
339  * H_SHIFT * MIN_MATCH >= HASH_BITS
340  */
341
342         unsigned prev_length;
343
344 /* Length of the best match at previous step. Matches not greater than this
345  * are discarded. This is used in the lazy match evaluation.
346  */
347
348         unsigned strstart;      /* start of string to insert */
349         unsigned match_start;   /* start of matching string */
350         unsigned lookahead;     /* number of valid bytes ahead in window */
351
352 /* ===========================================================================
353  */
354 #define DECLARE(type, array, size) \
355         type * array
356 #define ALLOC(type, array, size) \
357         array = xzalloc((size_t)(((size)+1L)/2) * 2*sizeof(type))
358 #define FREE(array) \
359         do { free(array); array = NULL; } while (0)
360
361         /* global buffers */
362
363         /* buffer for literals or lengths */
364         /* DECLARE(uch, l_buf, LIT_BUFSIZE); */
365         DECLARE(uch, l_buf, INBUFSIZ);
366
367         DECLARE(ush, d_buf, DIST_BUFSIZE);
368         DECLARE(uch, outbuf, OUTBUFSIZ);
369
370 /* Sliding window. Input bytes are read into the second half of the window,
371  * and move to the first half later to keep a dictionary of at least WSIZE
372  * bytes. With this organization, matches are limited to a distance of
373  * WSIZE-MAX_MATCH bytes, but this ensures that IO is always
374  * performed with a length multiple of the block size. Also, it limits
375  * the window size to 64K, which is quite useful on MSDOS.
376  * To do: limit the window size to WSIZE+BSZ if SMALL_MEM (the code would
377  * be less efficient).
378  */
379         DECLARE(uch, window, 2L * WSIZE);
380
381 /* Link to older string with same hash index. To limit the size of this
382  * array to 64K, this link is maintained only for the last 32K strings.
383  * An index in this array is thus a window index modulo 32K.
384  */
385         /* DECLARE(Pos, prev, WSIZE); */
386         DECLARE(ush, prev, 1L << BITS);
387
388 /* Heads of the hash chains or 0. */
389         /* DECLARE(Pos, head, 1<<HASH_BITS); */
390 #define head (G1.prev + WSIZE) /* hash head (see deflate.c) */
391
392 /* number of input bytes */
393         ulg isize;              /* only 32 bits stored in .gz file */
394
395 /* bbox always use stdin/stdout */
396 #define ifd STDIN_FILENO        /* input file descriptor */
397 #define ofd STDOUT_FILENO       /* output file descriptor */
398
399 #ifdef DEBUG
400         unsigned insize;        /* valid bytes in l_buf */
401 #endif
402         unsigned outcnt;        /* bytes in output buffer */
403
404         smallint eofile;        /* flag set at end of input file */
405
406 /* ===========================================================================
407  * Local data used by the "bit string" routines.
408  */
409
410         unsigned short bi_buf;
411
412 /* Output buffer. bits are inserted starting at the bottom (least significant
413  * bits).
414  */
415
416 #undef BUF_SIZE
417 #define BUF_SIZE (8 * sizeof(G1.bi_buf))
418 /* Number of bits used within bi_buf. (bi_buf might be implemented on
419  * more than 16 bits on some systems.)
420  */
421
422         int bi_valid;
423
424 /* Current input function. Set to mem_read for in-memory compression */
425
426 #ifdef DEBUG
427         ulg bits_sent;                  /* bit length of the compressed data */
428 #endif
429
430         /*uint32_t *crc_32_tab;*/
431         uint32_t crc;   /* shift register contents */
432 };
433
434 #define G1 (*(ptr_to_globals - 1))
435
436
437 /* ===========================================================================
438  * Write the output buffer outbuf[0..outcnt-1] and update bytes_out.
439  * (used for the compressed data only)
440  */
441 static void flush_outbuf(void)
442 {
443         if (G1.outcnt == 0)
444                 return;
445
446         xwrite(ofd, (char *) G1.outbuf, G1.outcnt);
447         G1.outcnt = 0;
448 }
449
450
451 /* ===========================================================================
452  */
453 /* put_8bit is used for the compressed output */
454 #define put_8bit(c) \
455 do { \
456         G1.outbuf[G1.outcnt++] = (c); \
457         if (G1.outcnt == OUTBUFSIZ) \
458                 flush_outbuf(); \
459 } while (0)
460
461 /* Output a 16 bit value, lsb first */
462 static void put_16bit(ush w)
463 {
464         /* GCC 4.2.1 won't optimize out redundant loads of G1.outcnt
465          * (probably because of fear of aliasing with G1.outbuf[]
466          * stores), do it explicitly:
467          */
468         unsigned outcnt = G1.outcnt;
469         uch *dst = &G1.outbuf[outcnt];
470
471 #if BB_UNALIGNED_MEMACCESS_OK && BB_LITTLE_ENDIAN
472         if (outcnt < OUTBUFSIZ-2) {
473                 /* Common case */
474                 ush *dst16 = (void*) dst;
475                 *dst16 = w; /* unalinged LSB 16-bit store */
476                 G1.outcnt = outcnt + 2;
477                 return;
478         }
479         *dst = (uch)w;
480         w >>= 8;
481 #else
482         *dst = (uch)w;
483         w >>= 8;
484         if (outcnt < OUTBUFSIZ-2) {
485                 /* Common case */
486                 dst[1] = w;
487                 G1.outcnt = outcnt + 2;
488                 return;
489         }
490 #endif
491
492         /* Slowpath: we will need to do flush_outbuf() */
493         G1.outcnt = ++outcnt;
494         if (outcnt == OUTBUFSIZ)
495                 flush_outbuf();
496         put_8bit(w);
497 }
498
499 static void put_32bit(ulg n)
500 {
501         put_16bit(n);
502         put_16bit(n >> 16);
503 }
504
505 /* ===========================================================================
506  * Run a set of bytes through the crc shift register.  If s is a NULL
507  * pointer, then initialize the crc shift register contents instead.
508  * Return the current crc in either case.
509  */
510 static void updcrc(uch * s, unsigned n)
511 {
512         G1.crc = crc32_block_endian0(G1.crc, s, n, global_crc32_table /*G1.crc_32_tab*/);
513 }
514
515
516 /* ===========================================================================
517  * Read a new buffer from the current input file, perform end-of-line
518  * translation, and update the crc and input file size.
519  * IN assertion: size >= 2 (for end-of-line translation)
520  */
521 static unsigned file_read(void *buf, unsigned size)
522 {
523         unsigned len;
524
525         Assert(G1.insize == 0, "l_buf not empty");
526
527         len = safe_read(ifd, buf, size);
528         if (len == (unsigned)(-1) || len == 0)
529                 return len;
530
531         updcrc(buf, len);
532         G1.isize += len;
533         return len;
534 }
535
536
537 /* ===========================================================================
538  * Send a value on a given number of bits.
539  * IN assertion: length <= 16 and value fits in length bits.
540  */
541 static void send_bits(int value, int length)
542 {
543 #ifdef DEBUG
544         Tracev((stderr, " l %2d v %4x ", length, value));
545         Assert(length > 0 && length <= 15, "invalid length");
546         G1.bits_sent += length;
547 #endif
548         /* If not enough room in bi_buf, use (valid) bits from bi_buf and
549          * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
550          * unused bits in value.
551          */
552         if (G1.bi_valid > (int) BUF_SIZE - length) {
553                 G1.bi_buf |= (value << G1.bi_valid);
554                 put_16bit(G1.bi_buf);
555                 G1.bi_buf = (ush) value >> (BUF_SIZE - G1.bi_valid);
556                 G1.bi_valid += length - BUF_SIZE;
557         } else {
558                 G1.bi_buf |= value << G1.bi_valid;
559                 G1.bi_valid += length;
560         }
561 }
562
563
564 /* ===========================================================================
565  * Reverse the first len bits of a code, using straightforward code (a faster
566  * method would use a table)
567  * IN assertion: 1 <= len <= 15
568  */
569 static unsigned bi_reverse(unsigned code, int len)
570 {
571         unsigned res = 0;
572
573         while (1) {
574                 res |= code & 1;
575                 if (--len <= 0) return res;
576                 code >>= 1;
577                 res <<= 1;
578         }
579 }
580
581
582 /* ===========================================================================
583  * Write out any remaining bits in an incomplete byte.
584  */
585 static void bi_windup(void)
586 {
587         if (G1.bi_valid > 8) {
588                 put_16bit(G1.bi_buf);
589         } else if (G1.bi_valid > 0) {
590                 put_8bit(G1.bi_buf);
591         }
592         G1.bi_buf = 0;
593         G1.bi_valid = 0;
594 #ifdef DEBUG
595         G1.bits_sent = (G1.bits_sent + 7) & ~7;
596 #endif
597 }
598
599
600 /* ===========================================================================
601  * Copy a stored block to the zip file, storing first the length and its
602  * one's complement if requested.
603  */
604 static void copy_block(char *buf, unsigned len, int header)
605 {
606         bi_windup();            /* align on byte boundary */
607
608         if (header) {
609                 put_16bit(len);
610                 put_16bit(~len);
611 #ifdef DEBUG
612                 G1.bits_sent += 2 * 16;
613 #endif
614         }
615 #ifdef DEBUG
616         G1.bits_sent += (ulg) len << 3;
617 #endif
618         while (len--) {
619                 put_8bit(*buf++);
620         }
621 }
622
623
624 /* ===========================================================================
625  * Fill the window when the lookahead becomes insufficient.
626  * Updates strstart and lookahead, and sets eofile if end of input file.
627  * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0
628  * OUT assertions: at least one byte has been read, or eofile is set;
629  *    file reads are performed for at least two bytes (required for the
630  *    translate_eol option).
631  */
632 static void fill_window(void)
633 {
634         unsigned n, m;
635         unsigned more = WINDOW_SIZE - G1.lookahead - G1.strstart;
636         /* Amount of free space at the end of the window. */
637
638         /* If the window is almost full and there is insufficient lookahead,
639          * move the upper half to the lower one to make room in the upper half.
640          */
641         if (more == (unsigned) -1) {
642                 /* Very unlikely, but possible on 16 bit machine if strstart == 0
643                  * and lookahead == 1 (input done one byte at time)
644                  */
645                 more--;
646         } else if (G1.strstart >= WSIZE + MAX_DIST) {
647                 /* By the IN assertion, the window is not empty so we can't confuse
648                  * more == 0 with more == 64K on a 16 bit machine.
649                  */
650                 Assert(WINDOW_SIZE == 2 * WSIZE, "no sliding with BIG_MEM");
651
652                 memcpy(G1.window, G1.window + WSIZE, WSIZE);
653                 G1.match_start -= WSIZE;
654                 G1.strstart -= WSIZE;   /* we now have strstart >= MAX_DIST: */
655
656                 G1.block_start -= WSIZE;
657
658                 for (n = 0; n < HASH_SIZE; n++) {
659                         m = head[n];
660                         head[n] = (Pos) (m >= WSIZE ? m - WSIZE : 0);
661                 }
662                 for (n = 0; n < WSIZE; n++) {
663                         m = G1.prev[n];
664                         G1.prev[n] = (Pos) (m >= WSIZE ? m - WSIZE : 0);
665                         /* If n is not on any hash chain, prev[n] is garbage but
666                          * its value will never be used.
667                          */
668                 }
669                 more += WSIZE;
670         }
671         /* At this point, more >= 2 */
672         if (!G1.eofile) {
673                 n = file_read(G1.window + G1.strstart + G1.lookahead, more);
674                 if (n == 0 || n == (unsigned) -1) {
675                         G1.eofile = 1;
676                 } else {
677                         G1.lookahead += n;
678                 }
679         }
680 }
681
682
683 /* ===========================================================================
684  * Set match_start to the longest match starting at the given string and
685  * return its length. Matches shorter or equal to prev_length are discarded,
686  * in which case the result is equal to prev_length and match_start is
687  * garbage.
688  * IN assertions: cur_match is the head of the hash chain for the current
689  *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
690  */
691
692 /* For MSDOS, OS/2 and 386 Unix, an optimized version is in match.asm or
693  * match.s. The code is functionally equivalent, so you can use the C version
694  * if desired.
695  */
696 static int longest_match(IPos cur_match)
697 {
698         unsigned chain_length = max_chain_length;       /* max hash chain length */
699         uch *scan = G1.window + G1.strstart;    /* current string */
700         uch *match;     /* matched string */
701         int len;        /* length of current match */
702         int best_len = G1.prev_length;  /* best match length so far */
703         IPos limit = G1.strstart > (IPos) MAX_DIST ? G1.strstart - (IPos) MAX_DIST : 0;
704         /* Stop when cur_match becomes <= limit. To simplify the code,
705          * we prevent matches with the string of window index 0.
706          */
707
708 /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
709  * It is easy to get rid of this optimization if necessary.
710  */
711 #if HASH_BITS < 8 || MAX_MATCH != 258
712 #  error Code too clever
713 #endif
714         uch *strend = G1.window + G1.strstart + MAX_MATCH;
715         uch scan_end1 = scan[best_len - 1];
716         uch scan_end = scan[best_len];
717
718         /* Do not waste too much time if we already have a good match: */
719         if (G1.prev_length >= good_match) {
720                 chain_length >>= 2;
721         }
722         Assert(G1.strstart <= WINDOW_SIZE - MIN_LOOKAHEAD, "insufficient lookahead");
723
724         do {
725                 Assert(cur_match < G1.strstart, "no future");
726                 match = G1.window + cur_match;
727
728                 /* Skip to next match if the match length cannot increase
729                  * or if the match length is less than 2:
730                  */
731                 if (match[best_len] != scan_end
732                  || match[best_len - 1] != scan_end1
733                  || *match != *scan || *++match != scan[1]
734                 ) {
735                         continue;
736                 }
737
738                 /* The check at best_len-1 can be removed because it will be made
739                  * again later. (This heuristic is not always a win.)
740                  * It is not necessary to compare scan[2] and match[2] since they
741                  * are always equal when the other bytes match, given that
742                  * the hash keys are equal and that HASH_BITS >= 8.
743                  */
744                 scan += 2, match++;
745
746                 /* We check for insufficient lookahead only every 8th comparison;
747                  * the 256th check will be made at strstart+258.
748                  */
749                 do {
750                 } while (*++scan == *++match && *++scan == *++match &&
751                                  *++scan == *++match && *++scan == *++match &&
752                                  *++scan == *++match && *++scan == *++match &&
753                                  *++scan == *++match && *++scan == *++match && scan < strend);
754
755                 len = MAX_MATCH - (int) (strend - scan);
756                 scan = strend - MAX_MATCH;
757
758                 if (len > best_len) {
759                         G1.match_start = cur_match;
760                         best_len = len;
761                         if (len >= nice_match)
762                                 break;
763                         scan_end1 = scan[best_len - 1];
764                         scan_end = scan[best_len];
765                 }
766         } while ((cur_match = G1.prev[cur_match & WMASK]) > limit
767                          && --chain_length != 0);
768
769         return best_len;
770 }
771
772
773 #ifdef DEBUG
774 /* ===========================================================================
775  * Check that the match at match_start is indeed a match.
776  */
777 static void check_match(IPos start, IPos match, int length)
778 {
779         /* check that the match is indeed a match */
780         if (memcmp(G1.window + match, G1.window + start, length) != 0) {
781                 bb_error_msg(" start %d, match %d, length %d", start, match, length);
782                 bb_error_msg("invalid match");
783         }
784         if (verbose > 1) {
785                 bb_error_msg("\\[%d,%d]", start - match, length);
786                 do {
787                         bb_putchar_stderr(G1.window[start++]);
788                 } while (--length != 0);
789         }
790 }
791 #else
792 #  define check_match(start, match, length) ((void)0)
793 #endif
794
795
796 /* trees.c -- output deflated data using Huffman coding
797  * Copyright (C) 1992-1993 Jean-loup Gailly
798  * This is free software; you can redistribute it and/or modify it under the
799  * terms of the GNU General Public License, see the file COPYING.
800  */
801
802 /*  PURPOSE
803  *      Encode various sets of source values using variable-length
804  *      binary code trees.
805  *
806  *  DISCUSSION
807  *      The PKZIP "deflation" process uses several Huffman trees. The more
808  *      common source values are represented by shorter bit sequences.
809  *
810  *      Each code tree is stored in the ZIP file in a compressed form
811  *      which is itself a Huffman encoding of the lengths of
812  *      all the code strings (in ascending order by source values).
813  *      The actual code strings are reconstructed from the lengths in
814  *      the UNZIP process, as described in the "application note"
815  *      (APPNOTE.TXT) distributed as part of PKWARE's PKZIP program.
816  *
817  *  REFERENCES
818  *      Lynch, Thomas J.
819  *          Data Compression:  Techniques and Applications, pp. 53-55.
820  *          Lifetime Learning Publications, 1985.  ISBN 0-534-03418-7.
821  *
822  *      Storer, James A.
823  *          Data Compression:  Methods and Theory, pp. 49-50.
824  *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
825  *
826  *      Sedgewick, R.
827  *          Algorithms, p290.
828  *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
829  *
830  *  INTERFACE
831  *      void ct_init()
832  *          Allocate the match buffer, initialize the various tables [and save
833  *          the location of the internal file attribute (ascii/binary) and
834  *          method (DEFLATE/STORE) -- deleted in bbox]
835  *
836  *      void ct_tally(int dist, int lc);
837  *          Save the match info and tally the frequency counts.
838  *
839  *      ulg flush_block(char *buf, ulg stored_len, int eof)
840  *          Determine the best encoding for the current block: dynamic trees,
841  *          static trees or store, and output the encoded block to the zip
842  *          file. Returns the total compressed length for the file so far.
843  */
844
845 #define MAX_BITS 15
846 /* All codes must not exceed MAX_BITS bits */
847
848 #define MAX_BL_BITS 7
849 /* Bit length codes must not exceed MAX_BL_BITS bits */
850
851 #define LENGTH_CODES 29
852 /* number of length codes, not counting the special END_BLOCK code */
853
854 #define LITERALS  256
855 /* number of literal bytes 0..255 */
856
857 #define END_BLOCK 256
858 /* end of block literal code */
859
860 #define L_CODES (LITERALS+1+LENGTH_CODES)
861 /* number of Literal or Length codes, including the END_BLOCK code */
862
863 #define D_CODES   30
864 /* number of distance codes */
865
866 #define BL_CODES  19
867 /* number of codes used to transfer the bit lengths */
868
869 /* extra bits for each length code */
870 static const uint8_t extra_lbits[LENGTH_CODES] ALIGN1 = {
871         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4,
872         4, 4, 5, 5, 5, 5, 0
873 };
874
875 /* extra bits for each distance code */
876 static const uint8_t extra_dbits[D_CODES] ALIGN1 = {
877         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
878         10, 10, 11, 11, 12, 12, 13, 13
879 };
880
881 /* extra bits for each bit length code */
882 static const uint8_t extra_blbits[BL_CODES] ALIGN1 = {
883         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 };
884
885 /* number of codes at each bit length for an optimal tree */
886 static const uint8_t bl_order[BL_CODES] ALIGN1 = {
887         16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
888
889 #define STORED_BLOCK 0
890 #define STATIC_TREES 1
891 #define DYN_TREES    2
892 /* The three kinds of block type */
893
894 #ifndef LIT_BUFSIZE
895 #  ifdef SMALL_MEM
896 #    define LIT_BUFSIZE  0x2000
897 #  else
898 #  ifdef MEDIUM_MEM
899 #    define LIT_BUFSIZE  0x4000
900 #  else
901 #    define LIT_BUFSIZE  0x8000
902 #  endif
903 #  endif
904 #endif
905 #ifndef DIST_BUFSIZE
906 #  define DIST_BUFSIZE  LIT_BUFSIZE
907 #endif
908 /* Sizes of match buffers for literals/lengths and distances.  There are
909  * 4 reasons for limiting LIT_BUFSIZE to 64K:
910  *   - frequencies can be kept in 16 bit counters
911  *   - if compression is not successful for the first block, all input data is
912  *     still in the window so we can still emit a stored block even when input
913  *     comes from standard input.  (This can also be done for all blocks if
914  *     LIT_BUFSIZE is not greater than 32K.)
915  *   - if compression is not successful for a file smaller than 64K, we can
916  *     even emit a stored file instead of a stored block (saving 5 bytes).
917  *   - creating new Huffman trees less frequently may not provide fast
918  *     adaptation to changes in the input data statistics. (Take for
919  *     example a binary file with poorly compressible code followed by
920  *     a highly compressible string table.) Smaller buffer sizes give
921  *     fast adaptation but have of course the overhead of transmitting trees
922  *     more frequently.
923  *   - I can't count above 4
924  * The current code is general and allows DIST_BUFSIZE < LIT_BUFSIZE (to save
925  * memory at the expense of compression). Some optimizations would be possible
926  * if we rely on DIST_BUFSIZE == LIT_BUFSIZE.
927  */
928 #define REP_3_6      16
929 /* repeat previous bit length 3-6 times (2 bits of repeat count) */
930 #define REPZ_3_10    17
931 /* repeat a zero length 3-10 times  (3 bits of repeat count) */
932 #define REPZ_11_138  18
933 /* repeat a zero length 11-138 times  (7 bits of repeat count) */
934
935 /* ===========================================================================
936 */
937 /* Data structure describing a single value and its code string. */
938 typedef struct ct_data {
939         union {
940                 ush freq;               /* frequency count */
941                 ush code;               /* bit string */
942         } fc;
943         union {
944                 ush dad;                /* father node in Huffman tree */
945                 ush len;                /* length of bit string */
946         } dl;
947 } ct_data;
948
949 #define Freq fc.freq
950 #define Code fc.code
951 #define Dad  dl.dad
952 #define Len  dl.len
953
954 #define HEAP_SIZE (2*L_CODES + 1)
955 /* maximum heap size */
956
957 typedef struct tree_desc {
958         ct_data *dyn_tree;      /* the dynamic tree */
959         ct_data *static_tree;   /* corresponding static tree or NULL */
960         const uint8_t *extra_bits;      /* extra bits for each code or NULL */
961         int extra_base;         /* base index for extra_bits */
962         int elems;                      /* max number of elements in the tree */
963         int max_length;         /* max bit length for the codes */
964         int max_code;           /* largest code with non zero frequency */
965 } tree_desc;
966
967 struct globals2 {
968
969         ush heap[HEAP_SIZE];     /* heap used to build the Huffman trees */
970         int heap_len;            /* number of elements in the heap */
971         int heap_max;            /* element of largest frequency */
972
973 /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
974  * The same heap array is used to build all trees.
975  */
976
977         ct_data dyn_ltree[HEAP_SIZE];   /* literal and length tree */
978         ct_data dyn_dtree[2 * D_CODES + 1];     /* distance tree */
979
980         ct_data static_ltree[L_CODES + 2];
981
982 /* The static literal tree. Since the bit lengths are imposed, there is no
983  * need for the L_CODES extra codes used during heap construction. However
984  * The codes 286 and 287 are needed to build a canonical tree (see ct_init
985  * below).
986  */
987
988         ct_data static_dtree[D_CODES];
989
990 /* The static distance tree. (Actually a trivial tree since all codes use
991  * 5 bits.)
992  */
993
994         ct_data bl_tree[2 * BL_CODES + 1];
995
996 /* Huffman tree for the bit lengths */
997
998         tree_desc l_desc;
999         tree_desc d_desc;
1000         tree_desc bl_desc;
1001
1002         ush bl_count[MAX_BITS + 1];
1003
1004 /* The lengths of the bit length codes are sent in order of decreasing
1005  * probability, to avoid transmitting the lengths for unused bit length codes.
1006  */
1007
1008         uch depth[2 * L_CODES + 1];
1009
1010 /* Depth of each subtree used as tie breaker for trees of equal frequency */
1011
1012         uch length_code[MAX_MATCH - MIN_MATCH + 1];
1013
1014 /* length code for each normalized match length (0 == MIN_MATCH) */
1015
1016         uch dist_code[512];
1017
1018 /* distance codes. The first 256 values correspond to the distances
1019  * 3 .. 258, the last 256 values correspond to the top 8 bits of
1020  * the 15 bit distances.
1021  */
1022
1023         int base_length[LENGTH_CODES];
1024
1025 /* First normalized length for each code (0 = MIN_MATCH) */
1026
1027         int base_dist[D_CODES];
1028
1029 /* First normalized distance for each code (0 = distance of 1) */
1030
1031         uch flag_buf[LIT_BUFSIZE / 8];
1032
1033 /* flag_buf is a bit array distinguishing literals from lengths in
1034  * l_buf, thus indicating the presence or absence of a distance.
1035  */
1036
1037         unsigned last_lit;       /* running index in l_buf */
1038         unsigned last_dist;      /* running index in d_buf */
1039         unsigned last_flags;     /* running index in flag_buf */
1040         uch flags;               /* current flags not yet saved in flag_buf */
1041         uch flag_bit;            /* current bit used in flags */
1042
1043 /* bits are filled in flags starting at bit 0 (least significant).
1044  * Note: these flags are overkill in the current code since we don't
1045  * take advantage of DIST_BUFSIZE == LIT_BUFSIZE.
1046  */
1047
1048         ulg opt_len;             /* bit length of current block with optimal trees */
1049         ulg static_len;          /* bit length of current block with static trees */
1050
1051         ulg compressed_len;      /* total bit length of compressed file */
1052 };
1053
1054 #define G2ptr ((struct globals2*)(ptr_to_globals))
1055 #define G2 (*G2ptr)
1056
1057
1058 /* ===========================================================================
1059  */
1060 static void gen_codes(ct_data * tree, int max_code);
1061 static void build_tree(tree_desc * desc);
1062 static void scan_tree(ct_data * tree, int max_code);
1063 static void send_tree(ct_data * tree, int max_code);
1064 static int build_bl_tree(void);
1065 static void send_all_trees(int lcodes, int dcodes, int blcodes);
1066 static void compress_block(ct_data * ltree, ct_data * dtree);
1067
1068
1069 #ifndef DEBUG
1070 /* Send a code of the given tree. c and tree must not have side effects */
1071 #  define SEND_CODE(c, tree) send_bits(tree[c].Code, tree[c].Len)
1072 #else
1073 #  define SEND_CODE(c, tree) \
1074 { \
1075         if (verbose > 1) bb_error_msg("\ncd %3d ", (c)); \
1076         send_bits(tree[c].Code, tree[c].Len); \
1077 }
1078 #endif
1079
1080 #define D_CODE(dist) \
1081         ((dist) < 256 ? G2.dist_code[dist] : G2.dist_code[256 + ((dist)>>7)])
1082 /* Mapping from a distance to a distance code. dist is the distance - 1 and
1083  * must not have side effects. dist_code[256] and dist_code[257] are never
1084  * used.
1085  * The arguments must not have side effects.
1086  */
1087
1088
1089 /* ===========================================================================
1090  * Initialize a new block.
1091  */
1092 static void init_block(void)
1093 {
1094         int n; /* iterates over tree elements */
1095
1096         /* Initialize the trees. */
1097         for (n = 0; n < L_CODES; n++)
1098                 G2.dyn_ltree[n].Freq = 0;
1099         for (n = 0; n < D_CODES; n++)
1100                 G2.dyn_dtree[n].Freq = 0;
1101         for (n = 0; n < BL_CODES; n++)
1102                 G2.bl_tree[n].Freq = 0;
1103
1104         G2.dyn_ltree[END_BLOCK].Freq = 1;
1105         G2.opt_len = G2.static_len = 0;
1106         G2.last_lit = G2.last_dist = G2.last_flags = 0;
1107         G2.flags = 0;
1108         G2.flag_bit = 1;
1109 }
1110
1111
1112 /* ===========================================================================
1113  * Restore the heap property by moving down the tree starting at node k,
1114  * exchanging a node with the smallest of its two sons if necessary, stopping
1115  * when the heap property is re-established (each father smaller than its
1116  * two sons).
1117  */
1118
1119 /* Compares to subtrees, using the tree depth as tie breaker when
1120  * the subtrees have equal frequency. This minimizes the worst case length. */
1121 #define SMALLER(tree, n, m) \
1122         (tree[n].Freq < tree[m].Freq \
1123         || (tree[n].Freq == tree[m].Freq && G2.depth[n] <= G2.depth[m]))
1124
1125 static void pqdownheap(ct_data * tree, int k)
1126 {
1127         int v = G2.heap[k];
1128         int j = k << 1;         /* left son of k */
1129
1130         while (j <= G2.heap_len) {
1131                 /* Set j to the smallest of the two sons: */
1132                 if (j < G2.heap_len && SMALLER(tree, G2.heap[j + 1], G2.heap[j]))
1133                         j++;
1134
1135                 /* Exit if v is smaller than both sons */
1136                 if (SMALLER(tree, v, G2.heap[j]))
1137                         break;
1138
1139                 /* Exchange v with the smallest son */
1140                 G2.heap[k] = G2.heap[j];
1141                 k = j;
1142
1143                 /* And continue down the tree, setting j to the left son of k */
1144                 j <<= 1;
1145         }
1146         G2.heap[k] = v;
1147 }
1148
1149
1150 /* ===========================================================================
1151  * Compute the optimal bit lengths for a tree and update the total bit length
1152  * for the current block.
1153  * IN assertion: the fields freq and dad are set, heap[heap_max] and
1154  *    above are the tree nodes sorted by increasing frequency.
1155  * OUT assertions: the field len is set to the optimal bit length, the
1156  *     array bl_count contains the frequencies for each bit length.
1157  *     The length opt_len is updated; static_len is also updated if stree is
1158  *     not null.
1159  */
1160 static void gen_bitlen(tree_desc * desc)
1161 {
1162         ct_data *tree = desc->dyn_tree;
1163         const uint8_t *extra = desc->extra_bits;
1164         int base = desc->extra_base;
1165         int max_code = desc->max_code;
1166         int max_length = desc->max_length;
1167         ct_data *stree = desc->static_tree;
1168         int h;                          /* heap index */
1169         int n, m;                       /* iterate over the tree elements */
1170         int bits;                       /* bit length */
1171         int xbits;                      /* extra bits */
1172         ush f;                          /* frequency */
1173         int overflow = 0;       /* number of elements with bit length too large */
1174
1175         for (bits = 0; bits <= MAX_BITS; bits++)
1176                 G2.bl_count[bits] = 0;
1177
1178         /* In a first pass, compute the optimal bit lengths (which may
1179          * overflow in the case of the bit length tree).
1180          */
1181         tree[G2.heap[G2.heap_max]].Len = 0;     /* root of the heap */
1182
1183         for (h = G2.heap_max + 1; h < HEAP_SIZE; h++) {
1184                 n = G2.heap[h];
1185                 bits = tree[tree[n].Dad].Len + 1;
1186                 if (bits > max_length) {
1187                         bits = max_length;
1188                         overflow++;
1189                 }
1190                 tree[n].Len = (ush) bits;
1191                 /* We overwrite tree[n].Dad which is no longer needed */
1192
1193                 if (n > max_code)
1194                         continue;       /* not a leaf node */
1195
1196                 G2.bl_count[bits]++;
1197                 xbits = 0;
1198                 if (n >= base)
1199                         xbits = extra[n - base];
1200                 f = tree[n].Freq;
1201                 G2.opt_len += (ulg) f *(bits + xbits);
1202
1203                 if (stree)
1204                         G2.static_len += (ulg) f * (stree[n].Len + xbits);
1205         }
1206         if (overflow == 0)
1207                 return;
1208
1209         Trace((stderr, "\nbit length overflow\n"));
1210         /* This happens for example on obj2 and pic of the Calgary corpus */
1211
1212         /* Find the first bit length which could increase: */
1213         do {
1214                 bits = max_length - 1;
1215                 while (G2.bl_count[bits] == 0)
1216                         bits--;
1217                 G2.bl_count[bits]--;    /* move one leaf down the tree */
1218                 G2.bl_count[bits + 1] += 2;     /* move one overflow item as its brother */
1219                 G2.bl_count[max_length]--;
1220                 /* The brother of the overflow item also moves one step up,
1221                  * but this does not affect bl_count[max_length]
1222                  */
1223                 overflow -= 2;
1224         } while (overflow > 0);
1225
1226         /* Now recompute all bit lengths, scanning in increasing frequency.
1227          * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
1228          * lengths instead of fixing only the wrong ones. This idea is taken
1229          * from 'ar' written by Haruhiko Okumura.)
1230          */
1231         for (bits = max_length; bits != 0; bits--) {
1232                 n = G2.bl_count[bits];
1233                 while (n != 0) {
1234                         m = G2.heap[--h];
1235                         if (m > max_code)
1236                                 continue;
1237                         if (tree[m].Len != (unsigned) bits) {
1238                                 Trace((stderr, "code %d bits %d->%d\n", m, tree[m].Len, bits));
1239                                 G2.opt_len += ((int32_t) bits - tree[m].Len) * tree[m].Freq;
1240                                 tree[m].Len = bits;
1241                         }
1242                         n--;
1243                 }
1244         }
1245 }
1246
1247
1248 /* ===========================================================================
1249  * Generate the codes for a given tree and bit counts (which need not be
1250  * optimal).
1251  * IN assertion: the array bl_count contains the bit length statistics for
1252  * the given tree and the field len is set for all tree elements.
1253  * OUT assertion: the field code is set for all tree elements of non
1254  *     zero code length.
1255  */
1256 static void gen_codes(ct_data * tree, int max_code)
1257 {
1258         ush next_code[MAX_BITS + 1];    /* next code value for each bit length */
1259         ush code = 0;           /* running code value */
1260         int bits;                       /* bit index */
1261         int n;                          /* code index */
1262
1263         /* The distribution counts are first used to generate the code values
1264          * without bit reversal.
1265          */
1266         for (bits = 1; bits <= MAX_BITS; bits++) {
1267                 next_code[bits] = code = (code + G2.bl_count[bits - 1]) << 1;
1268         }
1269         /* Check that the bit counts in bl_count are consistent. The last code
1270          * must be all ones.
1271          */
1272         Assert(code + G2.bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1,
1273                         "inconsistent bit counts");
1274         Tracev((stderr, "\ngen_codes: max_code %d ", max_code));
1275
1276         for (n = 0; n <= max_code; n++) {
1277                 int len = tree[n].Len;
1278
1279                 if (len == 0)
1280                         continue;
1281                 /* Now reverse the bits */
1282                 tree[n].Code = bi_reverse(next_code[len]++, len);
1283
1284                 Tracec(tree != G2.static_ltree,
1285                            (stderr, "\nn %3d %c l %2d c %4x (%x) ", n,
1286                                 (n > ' ' ? n : ' '), len, tree[n].Code,
1287                                 next_code[len] - 1));
1288         }
1289 }
1290
1291
1292 /* ===========================================================================
1293  * Construct one Huffman tree and assigns the code bit strings and lengths.
1294  * Update the total bit length for the current block.
1295  * IN assertion: the field freq is set for all tree elements.
1296  * OUT assertions: the fields len and code are set to the optimal bit length
1297  *     and corresponding code. The length opt_len is updated; static_len is
1298  *     also updated if stree is not null. The field max_code is set.
1299  */
1300
1301 /* Remove the smallest element from the heap and recreate the heap with
1302  * one less element. Updates heap and heap_len. */
1303
1304 #define SMALLEST 1
1305 /* Index within the heap array of least frequent node in the Huffman tree */
1306
1307 #define PQREMOVE(tree, top) \
1308 do { \
1309         top = G2.heap[SMALLEST]; \
1310         G2.heap[SMALLEST] = G2.heap[G2.heap_len--]; \
1311         pqdownheap(tree, SMALLEST); \
1312 } while (0)
1313
1314 static void build_tree(tree_desc * desc)
1315 {
1316         ct_data *tree = desc->dyn_tree;
1317         ct_data *stree = desc->static_tree;
1318         int elems = desc->elems;
1319         int n, m;                       /* iterate over heap elements */
1320         int max_code = -1;      /* largest code with non zero frequency */
1321         int node = elems;       /* next internal node of the tree */
1322
1323         /* Construct the initial heap, with least frequent element in
1324          * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
1325          * heap[0] is not used.
1326          */
1327         G2.heap_len = 0;
1328         G2.heap_max = HEAP_SIZE;
1329
1330         for (n = 0; n < elems; n++) {
1331                 if (tree[n].Freq != 0) {
1332                         G2.heap[++G2.heap_len] = max_code = n;
1333                         G2.depth[n] = 0;
1334                 } else {
1335                         tree[n].Len = 0;
1336                 }
1337         }
1338
1339         /* The pkzip format requires that at least one distance code exists,
1340          * and that at least one bit should be sent even if there is only one
1341          * possible code. So to avoid special checks later on we force at least
1342          * two codes of non zero frequency.
1343          */
1344         while (G2.heap_len < 2) {
1345                 int new = G2.heap[++G2.heap_len] = (max_code < 2 ? ++max_code : 0);
1346
1347                 tree[new].Freq = 1;
1348                 G2.depth[new] = 0;
1349                 G2.opt_len--;
1350                 if (stree)
1351                         G2.static_len -= stree[new].Len;
1352                 /* new is 0 or 1 so it does not have extra bits */
1353         }
1354         desc->max_code = max_code;
1355
1356         /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
1357          * establish sub-heaps of increasing lengths:
1358          */
1359         for (n = G2.heap_len / 2; n >= 1; n--)
1360                 pqdownheap(tree, n);
1361
1362         /* Construct the Huffman tree by repeatedly combining the least two
1363          * frequent nodes.
1364          */
1365         do {
1366                 PQREMOVE(tree, n);      /* n = node of least frequency */
1367                 m = G2.heap[SMALLEST];  /* m = node of next least frequency */
1368
1369                 G2.heap[--G2.heap_max] = n;     /* keep the nodes sorted by frequency */
1370                 G2.heap[--G2.heap_max] = m;
1371
1372                 /* Create a new node father of n and m */
1373                 tree[node].Freq = tree[n].Freq + tree[m].Freq;
1374                 G2.depth[node] = MAX(G2.depth[n], G2.depth[m]) + 1;
1375                 tree[n].Dad = tree[m].Dad = (ush) node;
1376 #ifdef DUMP_BL_TREE
1377                 if (tree == G2.bl_tree) {
1378                         bb_error_msg("\nnode %d(%d), sons %d(%d) %d(%d)",
1379                                         node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
1380                 }
1381 #endif
1382                 /* and insert the new node in the heap */
1383                 G2.heap[SMALLEST] = node++;
1384                 pqdownheap(tree, SMALLEST);
1385         } while (G2.heap_len >= 2);
1386
1387         G2.heap[--G2.heap_max] = G2.heap[SMALLEST];
1388
1389         /* At this point, the fields freq and dad are set. We can now
1390          * generate the bit lengths.
1391          */
1392         gen_bitlen((tree_desc *) desc);
1393
1394         /* The field len is now set, we can generate the bit codes */
1395         gen_codes((ct_data *) tree, max_code);
1396 }
1397
1398
1399 /* ===========================================================================
1400  * Scan a literal or distance tree to determine the frequencies of the codes
1401  * in the bit length tree. Updates opt_len to take into account the repeat
1402  * counts. (The contribution of the bit length codes will be added later
1403  * during the construction of bl_tree.)
1404  */
1405 static void scan_tree(ct_data * tree, int max_code)
1406 {
1407         int n;                          /* iterates over all tree elements */
1408         int prevlen = -1;       /* last emitted length */
1409         int curlen;                     /* length of current code */
1410         int nextlen = tree[0].Len;      /* length of next code */
1411         int count = 0;          /* repeat count of the current code */
1412         int max_count = 7;      /* max repeat count */
1413         int min_count = 4;      /* min repeat count */
1414
1415         if (nextlen == 0) {
1416                 max_count = 138;
1417                 min_count = 3;
1418         }
1419         tree[max_code + 1].Len = 0xffff; /* guard */
1420
1421         for (n = 0; n <= max_code; n++) {
1422                 curlen = nextlen;
1423                 nextlen = tree[n + 1].Len;
1424                 if (++count < max_count && curlen == nextlen)
1425                         continue;
1426
1427                 if (count < min_count) {
1428                         G2.bl_tree[curlen].Freq += count;
1429                 } else if (curlen != 0) {
1430                         if (curlen != prevlen)
1431                                 G2.bl_tree[curlen].Freq++;
1432                         G2.bl_tree[REP_3_6].Freq++;
1433                 } else if (count <= 10) {
1434                         G2.bl_tree[REPZ_3_10].Freq++;
1435                 } else {
1436                         G2.bl_tree[REPZ_11_138].Freq++;
1437                 }
1438                 count = 0;
1439                 prevlen = curlen;
1440
1441                 max_count = 7;
1442                 min_count = 4;
1443                 if (nextlen == 0) {
1444                         max_count = 138;
1445                         min_count = 3;
1446                 } else if (curlen == nextlen) {
1447                         max_count = 6;
1448                         min_count = 3;
1449                 }
1450         }
1451 }
1452
1453
1454 /* ===========================================================================
1455  * Send a literal or distance tree in compressed form, using the codes in
1456  * bl_tree.
1457  */
1458 static void send_tree(ct_data * tree, int max_code)
1459 {
1460         int n;                          /* iterates over all tree elements */
1461         int prevlen = -1;       /* last emitted length */
1462         int curlen;                     /* length of current code */
1463         int nextlen = tree[0].Len;      /* length of next code */
1464         int count = 0;          /* repeat count of the current code */
1465         int max_count = 7;      /* max repeat count */
1466         int min_count = 4;      /* min repeat count */
1467
1468 /* tree[max_code+1].Len = -1; *//* guard already set */
1469         if (nextlen == 0)
1470                 max_count = 138, min_count = 3;
1471
1472         for (n = 0; n <= max_code; n++) {
1473                 curlen = nextlen;
1474                 nextlen = tree[n + 1].Len;
1475                 if (++count < max_count && curlen == nextlen) {
1476                         continue;
1477                 } else if (count < min_count) {
1478                         do {
1479                                 SEND_CODE(curlen, G2.bl_tree);
1480                         } while (--count);
1481                 } else if (curlen != 0) {
1482                         if (curlen != prevlen) {
1483                                 SEND_CODE(curlen, G2.bl_tree);
1484                                 count--;
1485                         }
1486                         Assert(count >= 3 && count <= 6, " 3_6?");
1487                         SEND_CODE(REP_3_6, G2.bl_tree);
1488                         send_bits(count - 3, 2);
1489                 } else if (count <= 10) {
1490                         SEND_CODE(REPZ_3_10, G2.bl_tree);
1491                         send_bits(count - 3, 3);
1492                 } else {
1493                         SEND_CODE(REPZ_11_138, G2.bl_tree);
1494                         send_bits(count - 11, 7);
1495                 }
1496                 count = 0;
1497                 prevlen = curlen;
1498                 if (nextlen == 0) {
1499                         max_count = 138;
1500                         min_count = 3;
1501                 } else if (curlen == nextlen) {
1502                         max_count = 6;
1503                         min_count = 3;
1504                 } else {
1505                         max_count = 7;
1506                         min_count = 4;
1507                 }
1508         }
1509 }
1510
1511
1512 /* ===========================================================================
1513  * Construct the Huffman tree for the bit lengths and return the index in
1514  * bl_order of the last bit length code to send.
1515  */
1516 static int build_bl_tree(void)
1517 {
1518         int max_blindex;        /* index of last bit length code of non zero freq */
1519
1520         /* Determine the bit length frequencies for literal and distance trees */
1521         scan_tree(G2.dyn_ltree, G2.l_desc.max_code);
1522         scan_tree(G2.dyn_dtree, G2.d_desc.max_code);
1523
1524         /* Build the bit length tree: */
1525         build_tree(&G2.bl_desc);
1526         /* opt_len now includes the length of the tree representations, except
1527          * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
1528          */
1529
1530         /* Determine the number of bit length codes to send. The pkzip format
1531          * requires that at least 4 bit length codes be sent. (appnote.txt says
1532          * 3 but the actual value used is 4.)
1533          */
1534         for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
1535                 if (G2.bl_tree[bl_order[max_blindex]].Len != 0)
1536                         break;
1537         }
1538         /* Update opt_len to include the bit length tree and counts */
1539         G2.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
1540         Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", G2.opt_len, G2.static_len));
1541
1542         return max_blindex;
1543 }
1544
1545
1546 /* ===========================================================================
1547  * Send the header for a block using dynamic Huffman trees: the counts, the
1548  * lengths of the bit length codes, the literal tree and the distance tree.
1549  * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
1550  */
1551 static void send_all_trees(int lcodes, int dcodes, int blcodes)
1552 {
1553         int rank;                       /* index in bl_order */
1554
1555         Assert(lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
1556         Assert(lcodes <= L_CODES && dcodes <= D_CODES
1557                    && blcodes <= BL_CODES, "too many codes");
1558         Tracev((stderr, "\nbl counts: "));
1559         send_bits(lcodes - 257, 5);     /* not +255 as stated in appnote.txt */
1560         send_bits(dcodes - 1, 5);
1561         send_bits(blcodes - 4, 4);      /* not -3 as stated in appnote.txt */
1562         for (rank = 0; rank < blcodes; rank++) {
1563                 Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
1564                 send_bits(G2.bl_tree[bl_order[rank]].Len, 3);
1565         }
1566         Tracev((stderr, "\nbl tree: sent %ld", G1.bits_sent));
1567
1568         send_tree((ct_data *) G2.dyn_ltree, lcodes - 1);        /* send the literal tree */
1569         Tracev((stderr, "\nlit tree: sent %ld", G1.bits_sent));
1570
1571         send_tree((ct_data *) G2.dyn_dtree, dcodes - 1);        /* send the distance tree */
1572         Tracev((stderr, "\ndist tree: sent %ld", G1.bits_sent));
1573 }
1574
1575
1576 /* ===========================================================================
1577  * Save the match info and tally the frequency counts. Return true if
1578  * the current block must be flushed.
1579  */
1580 static int ct_tally(int dist, int lc)
1581 {
1582         G1.l_buf[G2.last_lit++] = lc;
1583         if (dist == 0) {
1584                 /* lc is the unmatched char */
1585                 G2.dyn_ltree[lc].Freq++;
1586         } else {
1587                 /* Here, lc is the match length - MIN_MATCH */
1588                 dist--;                 /* dist = match distance - 1 */
1589                 Assert((ush) dist < (ush) MAX_DIST
1590                  && (ush) lc <= (ush) (MAX_MATCH - MIN_MATCH)
1591                  && (ush) D_CODE(dist) < (ush) D_CODES, "ct_tally: bad match"
1592                 );
1593
1594                 G2.dyn_ltree[G2.length_code[lc] + LITERALS + 1].Freq++;
1595                 G2.dyn_dtree[D_CODE(dist)].Freq++;
1596
1597                 G1.d_buf[G2.last_dist++] = dist;
1598                 G2.flags |= G2.flag_bit;
1599         }
1600         G2.flag_bit <<= 1;
1601
1602         /* Output the flags if they fill a byte: */
1603         if ((G2.last_lit & 7) == 0) {
1604                 G2.flag_buf[G2.last_flags++] = G2.flags;
1605                 G2.flags = 0;
1606                 G2.flag_bit = 1;
1607         }
1608         /* Try to guess if it is profitable to stop the current block here */
1609         if ((G2.last_lit & 0xfff) == 0) {
1610                 /* Compute an upper bound for the compressed length */
1611                 ulg out_length = G2.last_lit * 8L;
1612                 ulg in_length = (ulg) G1.strstart - G1.block_start;
1613                 int dcode;
1614
1615                 for (dcode = 0; dcode < D_CODES; dcode++) {
1616                         out_length += G2.dyn_dtree[dcode].Freq * (5L + extra_dbits[dcode]);
1617                 }
1618                 out_length >>= 3;
1619                 Trace((stderr,
1620                                 "\nlast_lit %u, last_dist %u, in %ld, out ~%ld(%ld%%) ",
1621                                 G2.last_lit, G2.last_dist, in_length, out_length,
1622                                 100L - out_length * 100L / in_length));
1623                 if (G2.last_dist < G2.last_lit / 2 && out_length < in_length / 2)
1624                         return 1;
1625         }
1626         return (G2.last_lit == LIT_BUFSIZE - 1 || G2.last_dist == DIST_BUFSIZE);
1627         /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K
1628          * on 16 bit machines and because stored blocks are restricted to
1629          * 64K-1 bytes.
1630          */
1631 }
1632
1633 /* ===========================================================================
1634  * Send the block data compressed using the given Huffman trees
1635  */
1636 static void compress_block(ct_data * ltree, ct_data * dtree)
1637 {
1638         unsigned dist;          /* distance of matched string */
1639         int lc;                 /* match length or unmatched char (if dist == 0) */
1640         unsigned lx = 0;        /* running index in l_buf */
1641         unsigned dx = 0;        /* running index in d_buf */
1642         unsigned fx = 0;        /* running index in flag_buf */
1643         uch flag = 0;           /* current flags */
1644         unsigned code;          /* the code to send */
1645         int extra;              /* number of extra bits to send */
1646
1647         if (G2.last_lit != 0) do {
1648                 if ((lx & 7) == 0)
1649                         flag = G2.flag_buf[fx++];
1650                 lc = G1.l_buf[lx++];
1651                 if ((flag & 1) == 0) {
1652                         SEND_CODE(lc, ltree);   /* send a literal byte */
1653                         Tracecv(lc > ' ', (stderr, " '%c' ", lc));
1654                 } else {
1655                         /* Here, lc is the match length - MIN_MATCH */
1656                         code = G2.length_code[lc];
1657                         SEND_CODE(code + LITERALS + 1, ltree);  /* send the length code */
1658                         extra = extra_lbits[code];
1659                         if (extra != 0) {
1660                                 lc -= G2.base_length[code];
1661                                 send_bits(lc, extra);   /* send the extra length bits */
1662                         }
1663                         dist = G1.d_buf[dx++];
1664                         /* Here, dist is the match distance - 1 */
1665                         code = D_CODE(dist);
1666                         Assert(code < D_CODES, "bad d_code");
1667
1668                         SEND_CODE(code, dtree); /* send the distance code */
1669                         extra = extra_dbits[code];
1670                         if (extra != 0) {
1671                                 dist -= G2.base_dist[code];
1672                                 send_bits(dist, extra); /* send the extra distance bits */
1673                         }
1674                 }                       /* literal or match pair ? */
1675                 flag >>= 1;
1676         } while (lx < G2.last_lit);
1677
1678         SEND_CODE(END_BLOCK, ltree);
1679 }
1680
1681
1682 /* ===========================================================================
1683  * Determine the best encoding for the current block: dynamic trees, static
1684  * trees or store, and output the encoded block to the zip file. This function
1685  * returns the total compressed length for the file so far.
1686  */
1687 static ulg flush_block(char *buf, ulg stored_len, int eof)
1688 {
1689         ulg opt_lenb, static_lenb;      /* opt_len and static_len in bytes */
1690         int max_blindex;                /* index of last bit length code of non zero freq */
1691
1692         G2.flag_buf[G2.last_flags] = G2.flags;   /* Save the flags for the last 8 items */
1693
1694         /* Construct the literal and distance trees */
1695         build_tree(&G2.l_desc);
1696         Tracev((stderr, "\nlit data: dyn %ld, stat %ld", G2.opt_len, G2.static_len));
1697
1698         build_tree(&G2.d_desc);
1699         Tracev((stderr, "\ndist data: dyn %ld, stat %ld", G2.opt_len, G2.static_len));
1700         /* At this point, opt_len and static_len are the total bit lengths of
1701          * the compressed block data, excluding the tree representations.
1702          */
1703
1704         /* Build the bit length tree for the above two trees, and get the index
1705          * in bl_order of the last bit length code to send.
1706          */
1707         max_blindex = build_bl_tree();
1708
1709         /* Determine the best encoding. Compute first the block length in bytes */
1710         opt_lenb = (G2.opt_len + 3 + 7) >> 3;
1711         static_lenb = (G2.static_len + 3 + 7) >> 3;
1712
1713         Trace((stderr,
1714                         "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u dist %u ",
1715                         opt_lenb, G2.opt_len, static_lenb, G2.static_len, stored_len,
1716                         G2.last_lit, G2.last_dist));
1717
1718         if (static_lenb <= opt_lenb)
1719                 opt_lenb = static_lenb;
1720
1721         /* If compression failed and this is the first and last block,
1722          * and if the zip file can be seeked (to rewrite the local header),
1723          * the whole file is transformed into a stored file:
1724          */
1725         if (stored_len <= opt_lenb && eof && G2.compressed_len == 0L && seekable()) {
1726                 /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
1727                 if (buf == NULL)
1728                         bb_error_msg("block vanished");
1729
1730                 copy_block(buf, (unsigned) stored_len, 0);      /* without header */
1731                 G2.compressed_len = stored_len << 3;
1732         } else if (stored_len + 4 <= opt_lenb && buf != NULL) {
1733                 /* 4: two words for the lengths */
1734                 /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
1735                  * Otherwise we can't have processed more than WSIZE input bytes since
1736                  * the last block flush, because compression would have been
1737                  * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
1738                  * transform a block into a stored block.
1739                  */
1740                 send_bits((STORED_BLOCK << 1) + eof, 3);        /* send block type */
1741                 G2.compressed_len = (G2.compressed_len + 3 + 7) & ~7L;
1742                 G2.compressed_len += (stored_len + 4) << 3;
1743
1744                 copy_block(buf, (unsigned) stored_len, 1);      /* with header */
1745         } else if (static_lenb == opt_lenb) {
1746                 send_bits((STATIC_TREES << 1) + eof, 3);
1747                 compress_block((ct_data *) G2.static_ltree, (ct_data *) G2.static_dtree);
1748                 G2.compressed_len += 3 + G2.static_len;
1749         } else {
1750                 send_bits((DYN_TREES << 1) + eof, 3);
1751                 send_all_trees(G2.l_desc.max_code + 1, G2.d_desc.max_code + 1,
1752                                         max_blindex + 1);
1753                 compress_block((ct_data *) G2.dyn_ltree, (ct_data *) G2.dyn_dtree);
1754                 G2.compressed_len += 3 + G2.opt_len;
1755         }
1756         Assert(G2.compressed_len == G1.bits_sent, "bad compressed size");
1757         init_block();
1758
1759         if (eof) {
1760                 bi_windup();
1761                 G2.compressed_len += 7; /* align on byte boundary */
1762         }
1763         Tracev((stderr, "\ncomprlen %lu(%lu) ", G2.compressed_len >> 3,
1764                         G2.compressed_len - 7 * eof));
1765
1766         return G2.compressed_len >> 3;
1767 }
1768
1769
1770 /* ===========================================================================
1771  * Update a hash value with the given input byte
1772  * IN  assertion: all calls to UPDATE_HASH are made with consecutive
1773  *    input characters, so that a running hash key can be computed from the
1774  *    previous key instead of complete recalculation each time.
1775  */
1776 #define UPDATE_HASH(h, c) (h = (((h)<<H_SHIFT) ^ (c)) & HASH_MASK)
1777
1778
1779 /* ===========================================================================
1780  * Same as above, but achieves better compression. We use a lazy
1781  * evaluation for matches: a match is finally adopted only if there is
1782  * no better match at the next window position.
1783  *
1784  * Processes a new input file and return its compressed length. Sets
1785  * the compressed length, crc, deflate flags and internal file
1786  * attributes.
1787  */
1788
1789 /* Flush the current block, with given end-of-file flag.
1790  * IN assertion: strstart is set to the end of the current match. */
1791 #define FLUSH_BLOCK(eof) \
1792         flush_block( \
1793                 G1.block_start >= 0L \
1794                         ? (char*)&G1.window[(unsigned)G1.block_start] \
1795                         : (char*)NULL, \
1796                 (ulg)G1.strstart - G1.block_start, \
1797                 (eof) \
1798         )
1799
1800 /* Insert string s in the dictionary and set match_head to the previous head
1801  * of the hash chain (the most recent string with same hash key). Return
1802  * the previous length of the hash chain.
1803  * IN  assertion: all calls to INSERT_STRING are made with consecutive
1804  *    input characters and the first MIN_MATCH bytes of s are valid
1805  *    (except for the last MIN_MATCH-1 bytes of the input file). */
1806 #define INSERT_STRING(s, match_head) \
1807 do { \
1808         UPDATE_HASH(G1.ins_h, G1.window[(s) + MIN_MATCH-1]); \
1809         G1.prev[(s) & WMASK] = match_head = head[G1.ins_h]; \
1810         head[G1.ins_h] = (s); \
1811 } while (0)
1812
1813 static ulg deflate(void)
1814 {
1815         IPos hash_head;         /* head of hash chain */
1816         IPos prev_match;        /* previous match */
1817         int flush;                      /* set if current block must be flushed */
1818         int match_available = 0;        /* set if previous match exists */
1819         unsigned match_length = MIN_MATCH - 1;  /* length of best match */
1820
1821         /* Process the input block. */
1822         while (G1.lookahead != 0) {
1823                 /* Insert the string window[strstart .. strstart+2] in the
1824                  * dictionary, and set hash_head to the head of the hash chain:
1825                  */
1826                 INSERT_STRING(G1.strstart, hash_head);
1827
1828                 /* Find the longest match, discarding those <= prev_length.
1829                  */
1830                 G1.prev_length = match_length;
1831                 prev_match = G1.match_start;
1832                 match_length = MIN_MATCH - 1;
1833
1834                 if (hash_head != 0 && G1.prev_length < max_lazy_match
1835                  && G1.strstart - hash_head <= MAX_DIST
1836                 ) {
1837                         /* To simplify the code, we prevent matches with the string
1838                          * of window index 0 (in particular we have to avoid a match
1839                          * of the string with itself at the start of the input file).
1840                          */
1841                         match_length = longest_match(hash_head);
1842                         /* longest_match() sets match_start */
1843                         if (match_length > G1.lookahead)
1844                                 match_length = G1.lookahead;
1845
1846                         /* Ignore a length 3 match if it is too distant: */
1847                         if (match_length == MIN_MATCH && G1.strstart - G1.match_start > TOO_FAR) {
1848                                 /* If prev_match is also MIN_MATCH, G1.match_start is garbage
1849                                  * but we will ignore the current match anyway.
1850                                  */
1851                                 match_length--;
1852                         }
1853                 }
1854                 /* If there was a match at the previous step and the current
1855                  * match is not better, output the previous match:
1856                  */
1857                 if (G1.prev_length >= MIN_MATCH && match_length <= G1.prev_length) {
1858                         check_match(G1.strstart - 1, prev_match, G1.prev_length);
1859                         flush = ct_tally(G1.strstart - 1 - prev_match, G1.prev_length - MIN_MATCH);
1860
1861                         /* Insert in hash table all strings up to the end of the match.
1862                          * strstart-1 and strstart are already inserted.
1863                          */
1864                         G1.lookahead -= G1.prev_length - 1;
1865                         G1.prev_length -= 2;
1866                         do {
1867                                 G1.strstart++;
1868                                 INSERT_STRING(G1.strstart, hash_head);
1869                                 /* strstart never exceeds WSIZE-MAX_MATCH, so there are
1870                                  * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
1871                                  * these bytes are garbage, but it does not matter since the
1872                                  * next lookahead bytes will always be emitted as literals.
1873                                  */
1874                         } while (--G1.prev_length != 0);
1875                         match_available = 0;
1876                         match_length = MIN_MATCH - 1;
1877                         G1.strstart++;
1878                         if (flush) {
1879                                 FLUSH_BLOCK(0);
1880                                 G1.block_start = G1.strstart;
1881                         }
1882                 } else if (match_available) {
1883                         /* If there was no match at the previous position, output a
1884                          * single literal. If there was a match but the current match
1885                          * is longer, truncate the previous match to a single literal.
1886                          */
1887                         Tracevv((stderr, "%c", G1.window[G1.strstart - 1]));
1888                         if (ct_tally(0, G1.window[G1.strstart - 1])) {
1889                                 FLUSH_BLOCK(0);
1890                                 G1.block_start = G1.strstart;
1891                         }
1892                         G1.strstart++;
1893                         G1.lookahead--;
1894                 } else {
1895                         /* There is no previous match to compare with, wait for
1896                          * the next step to decide.
1897                          */
1898                         match_available = 1;
1899                         G1.strstart++;
1900                         G1.lookahead--;
1901                 }
1902                 Assert(G1.strstart <= G1.isize && lookahead <= G1.isize, "a bit too far");
1903
1904                 /* Make sure that we always have enough lookahead, except
1905                  * at the end of the input file. We need MAX_MATCH bytes
1906                  * for the next match, plus MIN_MATCH bytes to insert the
1907                  * string following the next match.
1908                  */
1909                 while (G1.lookahead < MIN_LOOKAHEAD && !G1.eofile)
1910                         fill_window();
1911         }
1912         if (match_available)
1913                 ct_tally(0, G1.window[G1.strstart - 1]);
1914
1915         return FLUSH_BLOCK(1);  /* eof */
1916 }
1917
1918
1919 /* ===========================================================================
1920  * Initialize the bit string routines.
1921  */
1922 static void bi_init(void)
1923 {
1924         G1.bi_buf = 0;
1925         G1.bi_valid = 0;
1926 #ifdef DEBUG
1927         G1.bits_sent = 0L;
1928 #endif
1929 }
1930
1931
1932 /* ===========================================================================
1933  * Initialize the "longest match" routines for a new file
1934  */
1935 static void lm_init(ush * flagsp)
1936 {
1937         unsigned j;
1938
1939         /* Initialize the hash table. */
1940         memset(head, 0, HASH_SIZE * sizeof(*head));
1941         /* prev will be initialized on the fly */
1942
1943         /* speed options for the general purpose bit flag */
1944         *flagsp |= 2;   /* FAST 4, SLOW 2 */
1945         /* ??? reduce max_chain_length for binary files */
1946
1947         G1.strstart = 0;
1948         G1.block_start = 0L;
1949
1950         G1.lookahead = file_read(G1.window,
1951                         sizeof(int) <= 2 ? (unsigned) WSIZE : 2 * WSIZE);
1952
1953         if (G1.lookahead == 0 || G1.lookahead == (unsigned) -1) {
1954                 G1.eofile = 1;
1955                 G1.lookahead = 0;
1956                 return;
1957         }
1958         G1.eofile = 0;
1959         /* Make sure that we always have enough lookahead. This is important
1960          * if input comes from a device such as a tty.
1961          */
1962         while (G1.lookahead < MIN_LOOKAHEAD && !G1.eofile)
1963                 fill_window();
1964
1965         G1.ins_h = 0;
1966         for (j = 0; j < MIN_MATCH - 1; j++)
1967                 UPDATE_HASH(G1.ins_h, G1.window[j]);
1968         /* If lookahead < MIN_MATCH, ins_h is garbage, but this is
1969          * not important since only literal bytes will be emitted.
1970          */
1971 }
1972
1973
1974 /* ===========================================================================
1975  * Allocate the match buffer, initialize the various tables and save the
1976  * location of the internal file attribute (ascii/binary) and method
1977  * (DEFLATE/STORE).
1978  * One callsite in zip()
1979  */
1980 static void ct_init(void)
1981 {
1982         int n;                          /* iterates over tree elements */
1983         int length;                     /* length value */
1984         int code;                       /* code value */
1985         int dist;                       /* distance index */
1986
1987         G2.compressed_len = 0L;
1988
1989 #ifdef NOT_NEEDED
1990         if (G2.static_dtree[0].Len != 0)
1991                 return;                 /* ct_init already called */
1992 #endif
1993
1994         /* Initialize the mapping length (0..255) -> length code (0..28) */
1995         length = 0;
1996         for (code = 0; code < LENGTH_CODES - 1; code++) {
1997                 G2.base_length[code] = length;
1998                 for (n = 0; n < (1 << extra_lbits[code]); n++) {
1999                         G2.length_code[length++] = code;
2000                 }
2001         }
2002         Assert(length == 256, "ct_init: length != 256");
2003         /* Note that the length 255 (match length 258) can be represented
2004          * in two different ways: code 284 + 5 bits or code 285, so we
2005          * overwrite length_code[255] to use the best encoding:
2006          */
2007         G2.length_code[length - 1] = code;
2008
2009         /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
2010         dist = 0;
2011         for (code = 0; code < 16; code++) {
2012                 G2.base_dist[code] = dist;
2013                 for (n = 0; n < (1 << extra_dbits[code]); n++) {
2014                         G2.dist_code[dist++] = code;
2015                 }
2016         }
2017         Assert(dist == 256, "ct_init: dist != 256");
2018         dist >>= 7;                     /* from now on, all distances are divided by 128 */
2019         for (; code < D_CODES; code++) {
2020                 G2.base_dist[code] = dist << 7;
2021                 for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
2022                         G2.dist_code[256 + dist++] = code;
2023                 }
2024         }
2025         Assert(dist == 256, "ct_init: 256+dist != 512");
2026
2027         /* Construct the codes of the static literal tree */
2028         /* already zeroed - it's in bss
2029         for (n = 0; n <= MAX_BITS; n++)
2030                 G2.bl_count[n] = 0; */
2031
2032         n = 0;
2033         while (n <= 143) {
2034                 G2.static_ltree[n++].Len = 8;
2035                 G2.bl_count[8]++;
2036         }
2037         while (n <= 255) {
2038                 G2.static_ltree[n++].Len = 9;
2039                 G2.bl_count[9]++;
2040         }
2041         while (n <= 279) {
2042                 G2.static_ltree[n++].Len = 7;
2043                 G2.bl_count[7]++;
2044         }
2045         while (n <= 287) {
2046                 G2.static_ltree[n++].Len = 8;
2047                 G2.bl_count[8]++;
2048         }
2049         /* Codes 286 and 287 do not exist, but we must include them in the
2050          * tree construction to get a canonical Huffman tree (longest code
2051          * all ones)
2052          */
2053         gen_codes((ct_data *) G2.static_ltree, L_CODES + 1);
2054
2055         /* The static distance tree is trivial: */
2056         for (n = 0; n < D_CODES; n++) {
2057                 G2.static_dtree[n].Len = 5;
2058                 G2.static_dtree[n].Code = bi_reverse(n, 5);
2059         }
2060
2061         /* Initialize the first block of the first file: */
2062         init_block();
2063 }
2064
2065
2066 /* ===========================================================================
2067  * Deflate in to out.
2068  * IN assertions: the input and output buffers are cleared.
2069  */
2070
2071 static void zip(void)
2072 {
2073         ush deflate_flags = 0;  /* pkzip -es, -en or -ex equivalent */
2074
2075         G1.outcnt = 0;
2076
2077         /* Write the header to the gzip file. See algorithm.doc for the format */
2078         /* magic header for gzip files: 1F 8B */
2079         /* compression method: 8 (DEFLATED) */
2080         /* general flags: 0 */
2081         put_32bit(0x00088b1f);
2082         put_32bit(0);           /* Unix timestamp */
2083
2084         /* Write deflated file to zip file */
2085         G1.crc = ~0;
2086
2087         bi_init();
2088         ct_init();
2089         lm_init(&deflate_flags);
2090
2091         put_8bit(deflate_flags);        /* extra flags */
2092         put_8bit(3);    /* OS identifier = 3 (Unix) */
2093
2094         deflate();
2095
2096         /* Write the crc and uncompressed size */
2097         put_32bit(~G1.crc);
2098         put_32bit(G1.isize);
2099
2100         flush_outbuf();
2101 }
2102
2103
2104 /* ======================================================================== */
2105 static
2106 IF_DESKTOP(long long) int FAST_FUNC pack_gzip(transformer_state_t *xstate UNUSED_PARAM)
2107 {
2108         /* Clear input and output buffers */
2109         G1.outcnt = 0;
2110 #ifdef DEBUG
2111         G1.insize = 0;
2112 #endif
2113         G1.isize = 0;
2114
2115         /* Reinit G2.xxx */
2116         memset(&G2, 0, sizeof(G2));
2117         G2.l_desc.dyn_tree     = G2.dyn_ltree;
2118         G2.l_desc.static_tree  = G2.static_ltree;
2119         G2.l_desc.extra_bits   = extra_lbits;
2120         G2.l_desc.extra_base   = LITERALS + 1;
2121         G2.l_desc.elems        = L_CODES;
2122         G2.l_desc.max_length   = MAX_BITS;
2123         //G2.l_desc.max_code     = 0;
2124         G2.d_desc.dyn_tree     = G2.dyn_dtree;
2125         G2.d_desc.static_tree  = G2.static_dtree;
2126         G2.d_desc.extra_bits   = extra_dbits;
2127         //G2.d_desc.extra_base   = 0;
2128         G2.d_desc.elems        = D_CODES;
2129         G2.d_desc.max_length   = MAX_BITS;
2130         //G2.d_desc.max_code     = 0;
2131         G2.bl_desc.dyn_tree    = G2.bl_tree;
2132         //G2.bl_desc.static_tree = NULL;
2133         G2.bl_desc.extra_bits  = extra_blbits,
2134         //G2.bl_desc.extra_base  = 0;
2135         G2.bl_desc.elems       = BL_CODES;
2136         G2.bl_desc.max_length  = MAX_BL_BITS;
2137         //G2.bl_desc.max_code    = 0;
2138
2139 #if 0
2140         /* Saving of timestamp is disabled. Why?
2141          * - it is not Y2038-safe.
2142          * - some people want deterministic results
2143          *   (normally they'd use -n, but our -n is a nop).
2144          * - it's bloat.
2145          * Per RFC 1952, gzfile.time=0 is "no timestamp".
2146          * If users will demand this to be reinstated,
2147          * implement -n "don't save timestamp".
2148          */
2149         struct stat s;
2150         s.st_ctime = 0;
2151         fstat(STDIN_FILENO, &s);
2152         zip(s.st_ctime);
2153 #else
2154         zip();
2155 #endif
2156         return 0;
2157 }
2158
2159 #if ENABLE_FEATURE_GZIP_LONG_OPTIONS
2160 static const char gzip_longopts[] ALIGN1 =
2161         "stdout\0"              No_argument       "c"
2162         "to-stdout\0"           No_argument       "c"
2163         "force\0"               No_argument       "f"
2164         "verbose\0"             No_argument       "v"
2165 #if ENABLE_FEATURE_GZIP_DECOMPRESS
2166         "decompress\0"          No_argument       "d"
2167         "uncompress\0"          No_argument       "d"
2168         "test\0"                No_argument       "t"
2169 #endif
2170         "quiet\0"               No_argument       "q"
2171         "fast\0"                No_argument       "1"
2172         "best\0"                No_argument       "9"
2173         "no-name\0"             No_argument       "n"
2174         ;
2175 #endif
2176
2177 /*
2178  * Linux kernel build uses gzip -d -n. We accept and ignore -n.
2179  * Man page says:
2180  * -n --no-name
2181  * gzip: do not save the original file name and time stamp.
2182  * (The original name is always saved if the name had to be truncated.)
2183  * gunzip: do not restore the original file name/time even if present
2184  * (remove only the gzip suffix from the compressed file name).
2185  * This option is the default when decompressing.
2186  * -N --name
2187  * gzip: always save the original file name and time stamp (this is the default)
2188  * gunzip: restore the original file name and time stamp if present.
2189  */
2190
2191 int gzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
2192 #if ENABLE_FEATURE_GZIP_DECOMPRESS
2193 int gzip_main(int argc, char **argv)
2194 #else
2195 int gzip_main(int argc UNUSED_PARAM, char **argv)
2196 #endif
2197 {
2198         unsigned opt;
2199 #ifdef ENABLE_FEATURE_GZIP_LEVELS
2200         static const struct {
2201                 uint8_t good;
2202                 uint8_t chain_shift;
2203                 uint8_t lazy2;
2204                 uint8_t nice2;
2205         } gzip_level_config[6] = {
2206                 {4,   4,   4/2,  16/2}, /* Level 4 */
2207                 {8,   5,  16/2,  32/2}, /* Level 5 */
2208                 {8,   7,  16/2, 128/2}, /* Level 6 */
2209                 {8,   8,  32/2, 128/2}, /* Level 7 */
2210                 {32, 10, 128/2, 258/2}, /* Level 8 */
2211                 {32, 12, 258/2, 258/2}, /* Level 9 */
2212         };
2213 #endif
2214
2215         SET_PTR_TO_GLOBALS((char *)xzalloc(sizeof(struct globals)+sizeof(struct globals2))
2216                         + sizeof(struct globals));
2217
2218 #if ENABLE_FEATURE_GZIP_LONG_OPTIONS
2219         applet_long_options = gzip_longopts;
2220 #endif
2221         /* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
2222         opt = getopt32(argv, "cfv" IF_FEATURE_GZIP_DECOMPRESS("dt") "qn123456789");
2223 #if ENABLE_FEATURE_GZIP_DECOMPRESS /* gunzip_main may not be visible... */
2224         if (opt & 0x18) // -d and/or -t
2225                 return gunzip_main(argc, argv);
2226 #endif
2227 #ifdef ENABLE_FEATURE_GZIP_LEVELS
2228         opt >>= ENABLE_FEATURE_GZIP_DECOMPRESS ? 7 : 5; /* drop cfv[dt]qn bits */
2229         if (opt == 0)
2230                 opt = 1 << 6; /* default: 6 */
2231         opt = ffs(opt >> 4); /* Maps -1..-4 to [0], -5 to [1] ... -9 to [5] */
2232         max_chain_length = 1 << gzip_level_config[opt].chain_shift;
2233         good_match       = gzip_level_config[opt].good;
2234         max_lazy_match   = gzip_level_config[opt].lazy2 * 2;
2235         nice_match       = gzip_level_config[opt].nice2 * 2;
2236 #endif
2237         option_mask32 &= 0x7; /* retain only -cfv */
2238
2239         /* Allocate all global buffers (for DYN_ALLOC option) */
2240         ALLOC(uch, G1.l_buf, INBUFSIZ);
2241         ALLOC(uch, G1.outbuf, OUTBUFSIZ);
2242         ALLOC(ush, G1.d_buf, DIST_BUFSIZE);
2243         ALLOC(uch, G1.window, 2L * WSIZE);
2244         ALLOC(ush, G1.prev, 1L << BITS);
2245
2246         /* Initialize the CRC32 table */
2247         global_crc32_table = crc32_filltable(NULL, 0);
2248
2249         argv += optind;
2250         return bbunpack(argv, pack_gzip, append_ext, "gz");
2251 }