zlib.c revision 1.10.4.2 1 /* $NetBSD: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $ */
2 /*
3 * This file is derived from various .h and .c files from the zlib-1.0.4
4 * distribution by Jean-loup Gailly and Mark Adler, with some additions
5 * by Paul Mackerras to aid in implementing Deflate compression and
6 * decompression for PPP packets. See zlib.h for conditions of
7 * distribution and use.
8 *
9 * Changes that have been made include:
10 * - added Z_PACKET_FLUSH (see zlib.h for details)
11 * - added inflateIncomp and deflateOutputPending
12 * - allow strm->next_out to be NULL, meaning discard the output
13 *
14 * $Id: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $
15 */
16
17 /*
18 * ==FILEVERSION 020312==
19 *
20 * This marker is used by the Linux installation script to determine
21 * whether an up-to-date version of this file is already installed.
22 */
23
24 #include <sys/cdefs.h>
25 __KERNEL_RCSID(0, "$NetBSD: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $");
26
27 #define NO_DUMMY_DECL
28 #define NO_ZCFUNCS
29 #define MY_ZCALLOC
30
31 #if defined(__FreeBSD__) && (defined(KERNEL) || defined(_KERNEL))
32 #define inflate inflate_ppp /* FreeBSD already has an inflate :-( */
33 #endif
34
35
36 /* +++ zutil.h */
37
38 /* zutil.h -- internal interface and configuration of the compression library
39 * Copyright (C) 1995-2002 Jean-loup Gailly.
40 * For conditions of distribution and use, see copyright notice in zlib.h
41 */
42
43 /* WARNING: this file should *not* be used by applications. It is
44 part of the implementation of the compression library and is
45 subject to change. Applications should only use zlib.h.
46 */
47
48 /* @(#) $Id: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $ */
49
50 #ifndef _Z_UTIL_H
51 #define _Z_UTIL_H
52
53 #include "zlib.h"
54
55 #if defined(KERNEL) || defined(_KERNEL)
56 /* Assume this is a *BSD or SVR4 kernel */
57 #include <sys/param.h>
58 #include <sys/time.h>
59 #include <sys/systm.h>
60 # define HAVE_MEMCPY
61 #else
62 #if defined(__KERNEL__)
63 /* Assume this is a Linux kernel */
64 #include <linux/string.h>
65 #define HAVE_MEMCPY
66
67 #else /* not kernel */
68
69 #if defined(__NetBSD__) && (defined(_KERNEL) || defined(_STANDALONE))
70
71 /* XXX doesn't seem to need anything at all, but this is for consistency. */
72 # include <lib/libkern/libkern.h>
73
74 #else
75 #ifdef STDC
76 # include <stddef.h>
77 # include <string.h>
78 # include <stdlib.h>
79 #endif
80 #ifdef NO_ERRNO_H
81 extern int errno;
82 #else
83 # include <errno.h>
84 #endif
85 #endif /* __NetBSD__ && _STANDALONE */
86 #endif /* __KERNEL__ */
87 #endif /* _KERNEL || KERNEL */
88
89
90 #ifndef local
91 # define local static
92 #endif
93 /* compile with -Dlocal if your debugger can't find static symbols */
94
95 typedef unsigned char uch;
96 typedef uch FAR uchf;
97 typedef unsigned short ush;
98 typedef ush FAR ushf;
99 typedef unsigned long ulg;
100
101 extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
102 /* (size given to avoid silly warnings with Visual C++) */
103
104 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
105
106 #define ERR_RETURN(strm,err) \
107 return (strm->msg = (char*)ERR_MSG(err), (err))
108 /* To be used only when the state is known to be valid */
109
110 /* common constants */
111
112 #ifndef DEF_WBITS
113 # define DEF_WBITS MAX_WBITS
114 #endif
115 /* default windowBits for decompression. MAX_WBITS is for compression only */
116
117 #if MAX_MEM_LEVEL >= 8
118 # define DEF_MEM_LEVEL 8
119 #else
120 # define DEF_MEM_LEVEL MAX_MEM_LEVEL
121 #endif
122 /* default memLevel */
123
124 #define STORED_BLOCK 0
125 #define STATIC_TREES 1
126 #define DYN_TREES 2
127 /* The three kinds of block type */
128
129 #define MIN_MATCH 3
130 #define MAX_MATCH 258
131 /* The minimum and maximum match lengths */
132
133 #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
134
135 /* target dependencies */
136
137 #ifdef MSDOS
138 # define OS_CODE 0x00
139 # if defined(__TURBOC__) || defined(__BORLANDC__)
140 # if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
141 /* Allow compilation with ANSI keywords only enabled */
142 void _Cdecl farfree( void *block );
143 void *_Cdecl farmalloc( unsigned long nbytes );
144 # else
145 # include <alloc.h>
146 # endif
147 # else /* MSC or DJGPP */
148 # include <malloc.h>
149 # endif
150 #endif
151
152 #ifdef OS2
153 # define OS_CODE 0x06
154 #endif
155
156 #ifdef WIN32 /* Window 95 & Windows NT */
157 # define OS_CODE 0x0b
158 #endif
159
160 #if defined(VAXC) || defined(VMS)
161 # define OS_CODE 0x02
162 # define F_OPEN(name, mode) \
163 fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
164 #endif
165
166 #ifdef AMIGA
167 # define OS_CODE 0x01
168 #endif
169
170 #if defined(ATARI) || defined(atarist)
171 # define OS_CODE 0x05
172 #endif
173
174 #if defined(MACOS) || defined(TARGET_OS_MAC)
175 # define OS_CODE 0x07
176 # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
177 # include <unix.h> /* for fdopen */
178 # else
179 # ifndef fdopen
180 # define fdopen(fd,mode) NULL /* No fdopen() */
181 # endif
182 # endif
183 #endif
184
185 #ifdef __50SERIES /* Prime/PRIMOS */
186 # define OS_CODE 0x0F
187 #endif
188
189 #ifdef TOPS20
190 # define OS_CODE 0x0a
191 #endif
192
193 #if defined(_BEOS_) || defined(RISCOS)
194 # define fdopen(fd,mode) NULL /* No fdopen() */
195 #endif
196
197 #if (defined(_MSC_VER) && (_MSC_VER > 600))
198 # define fdopen(fd,type) _fdopen(fd,type)
199 #endif
200
201
202 /* Common defaults */
203
204 #ifndef OS_CODE
205 # define OS_CODE 0x03 /* assume Unix */
206 #endif
207
208 #ifndef F_OPEN
209 # define F_OPEN(name, mode) fopen((name), (mode))
210 #endif
211
212 /* functions */
213
214 #ifdef HAVE_STRERROR
215 extern char *strerror __P((int));
216 # define zstrerror(errnum) strerror(errnum)
217 #else
218 # define zstrerror(errnum) ""
219 #endif
220
221 #if defined(pyr)
222 # define NO_MEMCPY
223 #endif
224 #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
225 /* Use our own functions for small and medium model with MSC <= 5.0.
226 * You may have to use the same strategy for Borland C (untested).
227 * The __SC__ check is for Symantec.
228 */
229 # define NO_MEMCPY
230 #endif
231 #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
232 # define HAVE_MEMCPY
233 #endif
234 #ifdef HAVE_MEMCPY
235 # ifdef SMALL_MEDIUM /* MSDOS small or medium model */
236 # define zmemcpy _fmemcpy
237 # define zmemcmp _fmemcmp
238 # define zmemzero(dest, len) _fmemset(dest, 0, len)
239 # else
240 # define zmemcpy memcpy
241 # define zmemcmp memcmp
242 # define zmemzero(dest, len) memset(dest, 0, len)
243 # endif
244 #else
245 extern void zmemcpy __P((Bytef* dest, const Bytef* source, uInt len));
246 extern int zmemcmp __P((const Bytef* s1, const Bytef* s2, uInt len));
247 extern void zmemzero __P((Bytef* dest, uInt len));
248 #endif
249
250 /* Diagnostic functions */
251 #if defined(DEBUG_ZLIB) && !defined(_KERNEL) && !defined(_STANDALONE)
252 # include <stdio.h>
253 extern int z_verbose;
254 extern void z_error __P((char *m));
255 # define Assert(cond,msg) {if(!(cond)) z_error(msg);}
256 # define Trace(x) {if (z_verbose>=0) fprintf x ;}
257 # define Tracev(x) {if (z_verbose>0) fprintf x ;}
258 # define Tracevv(x) {if (z_verbose>1) fprintf x ;}
259 # define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
260 # define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
261 #else
262 # define Assert(cond,msg)
263 # define Trace(x)
264 # define Tracev(x)
265 # define Tracevv(x)
266 # define Tracec(c,x)
267 # define Tracecv(c,x)
268 #endif
269
270
271 typedef uLong (ZEXPORT *check_func) __P((uLong check, const Bytef *buf,
272 uInt len));
273 voidpf zcalloc __P((voidpf opaque, unsigned items, unsigned size));
274 void zcfree __P((voidpf opaque, voidpf ptr));
275
276 #define ZALLOC(strm, items, size) \
277 (*((strm)->zalloc))((strm)->opaque, (items), (size))
278 #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
279 #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
280
281 #endif /* _Z_UTIL_H */
282 /* --- zutil.h */
283
284 /* +++ deflate.h */
285
286 /* deflate.h -- internal compression state
287 * Copyright (C) 1995-2002 Jean-loup Gailly
288 * For conditions of distribution and use, see copyright notice in zlib.h
289 */
290
291 /* WARNING: this file should *not* be used by applications. It is
292 part of the implementation of the compression library and is
293 subject to change. Applications should only use zlib.h.
294 */
295
296 /* @(#) $Id: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $ */
297
298 #ifndef _DEFLATE_H
299 #define _DEFLATE_H
300
301 /* #include "zutil.h" */
302
303 /* ===========================================================================
304 * Internal compression state.
305 */
306
307 #define LENGTH_CODES 29
308 /* number of length codes, not counting the special END_BLOCK code */
309
310 #define LITERALS 256
311 /* number of literal bytes 0..255 */
312
313 #define L_CODES (LITERALS+1+LENGTH_CODES)
314 /* number of Literal or Length codes, including the END_BLOCK code */
315
316 #define D_CODES 30
317 /* number of distance codes */
318
319 #define BL_CODES 19
320 /* number of codes used to transfer the bit lengths */
321
322 #define HEAP_SIZE (2*L_CODES+1)
323 /* maximum heap size */
324
325 #define MAX_BITS 15
326 /* All codes must not exceed MAX_BITS bits */
327
328 #define INIT_STATE 42
329 #define BUSY_STATE 113
330 #define FINISH_STATE 666
331 /* Stream status */
332
333
334 /* Data structure describing a single value and its code string. */
335 typedef struct ct_data_s {
336 union {
337 ush freq; /* frequency count */
338 ush code; /* bit string */
339 } fc;
340 union {
341 ush dad; /* father node in Huffman tree */
342 ush len; /* length of bit string */
343 } dl;
344 } FAR ct_data;
345
346 #define Freq fc.freq
347 #define Code fc.code
348 #define Dad dl.dad
349 #define Len dl.len
350
351 typedef struct static_tree_desc_s static_tree_desc;
352
353 typedef struct tree_desc_s {
354 ct_data *dyn_tree; /* the dynamic tree */
355 int max_code; /* largest code with non zero frequency */
356 static_tree_desc *stat_desc; /* the corresponding static tree */
357 } FAR tree_desc;
358
359 typedef ush Pos;
360 typedef Pos FAR Posf;
361 typedef unsigned IPos;
362
363 /* A Pos is an index in the character window. We use short instead of int to
364 * save space in the various tables. IPos is used only for parameter passing.
365 */
366
367 typedef struct deflate_state {
368 z_streamp strm; /* pointer back to this zlib stream */
369 int status; /* as the name implies */
370 Bytef *pending_buf; /* output still pending */
371 ulg pending_buf_size; /* size of pending_buf */
372 Bytef *pending_out; /* next pending byte to output to the stream */
373 int pending; /* nb of bytes in the pending buffer */
374 int noheader; /* suppress zlib header and adler32 */
375 Byte data_type; /* UNKNOWN, BINARY or ASCII */
376 Byte method; /* STORED (for zip only) or DEFLATED */
377 int last_flush; /* value of flush param for previous deflate call */
378
379 /* used by deflate.c: */
380
381 uInt w_size; /* LZ77 window size (32K by default) */
382 uInt w_bits; /* log2(w_size) (8..16) */
383 uInt w_mask; /* w_size - 1 */
384
385 Bytef *window;
386 /* Sliding window. Input bytes are read into the second half of the window,
387 * and move to the first half later to keep a dictionary of at least wSize
388 * bytes. With this organization, matches are limited to a distance of
389 * wSize-MAX_MATCH bytes, but this ensures that IO is always
390 * performed with a length multiple of the block size. Also, it limits
391 * the window size to 64K, which is quite useful on MSDOS.
392 * To do: use the user input buffer as sliding window.
393 */
394
395 ulg window_size;
396 /* Actual size of window: 2*wSize, except when the user input buffer
397 * is directly used as sliding window.
398 */
399
400 Posf *prev;
401 /* Link to older string with same hash index. To limit the size of this
402 * array to 64K, this link is maintained only for the last 32K strings.
403 * An index in this array is thus a window index modulo 32K.
404 */
405
406 Posf *head; /* Heads of the hash chains or NIL. */
407
408 uInt ins_h; /* hash index of string to be inserted */
409 uInt hash_size; /* number of elements in hash table */
410 uInt hash_bits; /* log2(hash_size) */
411 uInt hash_mask; /* hash_size-1 */
412
413 uInt hash_shift;
414 /* Number of bits by which ins_h must be shifted at each input
415 * step. It must be such that after MIN_MATCH steps, the oldest
416 * byte no longer takes part in the hash key, that is:
417 * hash_shift * MIN_MATCH >= hash_bits
418 */
419
420 long block_start;
421 /* Window position at the beginning of the current output block. Gets
422 * negative when the window is moved backwards.
423 */
424
425 uInt match_length; /* length of best match */
426 IPos prev_match; /* previous match */
427 int match_available; /* set if previous match exists */
428 uInt strstart; /* start of string to insert */
429 uInt match_start; /* start of matching string */
430 uInt lookahead; /* number of valid bytes ahead in window */
431
432 uInt prev_length;
433 /* Length of the best match at previous step. Matches not greater than this
434 * are discarded. This is used in the lazy match evaluation.
435 */
436
437 uInt max_chain_length;
438 /* To speed up deflation, hash chains are never searched beyond this
439 * length. A higher limit improves compression ratio but degrades the
440 * speed.
441 */
442
443 uInt max_lazy_match;
444 /* Attempt to find a better match only when the current match is strictly
445 * smaller than this value. This mechanism is used only for compression
446 * levels >= 4.
447 */
448 # define max_insert_length max_lazy_match
449 /* Insert new strings in the hash table only if the match length is not
450 * greater than this length. This saves time but degrades compression.
451 * max_insert_length is used only for compression levels <= 3.
452 */
453
454 int level; /* compression level (1..9) */
455 int strategy; /* favor or force Huffman coding*/
456
457 uInt good_match;
458 /* Use a faster search when the previous match is longer than this */
459
460 int nice_match; /* Stop searching when current match exceeds this */
461
462 /* used by trees.c: */
463 /* Didn't use ct_data typedef below to supress compiler warning */
464 struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
465 struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
466 struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
467
468 struct tree_desc_s l_desc; /* desc. for literal tree */
469 struct tree_desc_s d_desc; /* desc. for distance tree */
470 struct tree_desc_s bl_desc; /* desc. for bit length tree */
471
472 ush bl_count[MAX_BITS+1];
473 /* number of codes at each bit length for an optimal tree */
474
475 int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
476 int heap_len; /* number of elements in the heap */
477 int heap_max; /* element of largest frequency */
478 /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
479 * The same heap array is used to build all trees.
480 */
481
482 uch depth[2*L_CODES+1];
483 /* Depth of each subtree used as tie breaker for trees of equal frequency
484 */
485
486 uchf *l_buf; /* buffer for literals or lengths */
487
488 uInt lit_bufsize;
489 /* Size of match buffer for literals/lengths. There are 4 reasons for
490 * limiting lit_bufsize to 64K:
491 * - frequencies can be kept in 16 bit counters
492 * - if compression is not successful for the first block, all input
493 * data is still in the window so we can still emit a stored block even
494 * when input comes from standard input. (This can also be done for
495 * all blocks if lit_bufsize is not greater than 32K.)
496 * - if compression is not successful for a file smaller than 64K, we can
497 * even emit a stored file instead of a stored block (saving 5 bytes).
498 * This is applicable only for zip (not gzip or zlib).
499 * - creating new Huffman trees less frequently may not provide fast
500 * adaptation to changes in the input data statistics. (Take for
501 * example a binary file with poorly compressible code followed by
502 * a highly compressible string table.) Smaller buffer sizes give
503 * fast adaptation but have of course the overhead of transmitting
504 * trees more frequently.
505 * - I can't count above 4
506 */
507
508 uInt last_lit; /* running index in l_buf */
509
510 ushf *d_buf;
511 /* Buffer for distances. To simplify the code, d_buf and l_buf have
512 * the same number of elements. To use different lengths, an extra flag
513 * array would be necessary.
514 */
515
516 ulg opt_len; /* bit length of current block with optimal trees */
517 ulg static_len; /* bit length of current block with static trees */
518 uInt matches; /* number of string matches in current block */
519 int last_eob_len; /* bit length of EOB code for last block */
520
521 #ifdef DEBUG_ZLIB
522 ulg compressed_len; /* total bit length of compressed file mod 2^32 */
523 ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
524 #endif
525
526 ush bi_buf;
527 /* Output buffer. bits are inserted starting at the bottom (least
528 * significant bits).
529 */
530 int bi_valid;
531 /* Number of valid bits in bi_buf. All bits above the last valid bit
532 * are always zero.
533 */
534
535 } FAR deflate_state;
536
537 /* Output a byte on the stream.
538 * IN assertion: there is enough room in pending_buf.
539 */
540 #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
541
542
543 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
544 /* Minimum amount of lookahead, except at the end of the input file.
545 * See deflate.c for comments about the MIN_MATCH+1.
546 */
547
548 #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
549 /* In order to simplify the code, particularly on 16 bit machines, match
550 * distances are limited to MAX_DIST instead of WSIZE.
551 */
552
553 /* in trees.c */
554 void _tr_init __P((deflate_state *s));
555 int _tr_tally __P((deflate_state *s, unsigned dist, unsigned lc));
556 void _tr_flush_block __P((deflate_state *s, charf *buf, ulg stored_len,
557 int eof));
558 void _tr_align __P((deflate_state *s));
559 void _tr_stored_block __P((deflate_state *s, charf *buf, ulg stored_len,
560 int eof));
561 void _tr_stored_type_only __P((deflate_state *));
562
563 #define d_code(dist) \
564 ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
565 /* Mapping from a distance to a distance code. dist is the distance - 1 and
566 * must not have side effects. _dist_code[256] and _dist_code[257] are never
567 * used.
568 */
569
570 #ifndef DEBUG_ZLIB
571 /* Inline versions of _tr_tally for speed: */
572
573 #if defined(GEN_TREES_H) || !defined(STDC)
574 extern uch _length_code[];
575 extern uch _dist_code[];
576 #else
577 extern const uch _length_code[];
578 extern const uch _dist_code[];
579 #endif
580
581 # define _tr_tally_lit(s, c, flush) \
582 { uch cc = (c); \
583 s->d_buf[s->last_lit] = 0; \
584 s->l_buf[s->last_lit++] = cc; \
585 s->dyn_ltree[cc].Freq++; \
586 flush = (s->last_lit == s->lit_bufsize-1); \
587 }
588 # define _tr_tally_dist(s, distance, length, flush) \
589 { uch len = (length); \
590 ush dist = (distance); \
591 s->d_buf[s->last_lit] = dist; \
592 s->l_buf[s->last_lit++] = len; \
593 dist--; \
594 s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
595 s->dyn_dtree[d_code(dist)].Freq++; \
596 flush = (s->last_lit == s->lit_bufsize-1); \
597 }
598 #else
599 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
600 # define _tr_tally_dist(s, distance, length, flush) \
601 flush = _tr_tally(s, distance, length)
602 #endif
603
604 #endif
605 /* --- deflate.h */
606
607 /* +++ deflate.c */
608
609 /* deflate.c -- compress data using the deflation algorithm
610 * Copyright (C) 1995-2002 Jean-loup Gailly.
611 * For conditions of distribution and use, see copyright notice in zlib.h
612 */
613
614 /*
615 * ALGORITHM
616 *
617 * The "deflation" process depends on being able to identify portions
618 * of the input text which are identical to earlier input (within a
619 * sliding window trailing behind the input currently being processed).
620 *
621 * The most straightforward technique turns out to be the fastest for
622 * most input files: try all possible matches and select the longest.
623 * The key feature of this algorithm is that insertions into the string
624 * dictionary are very simple and thus fast, and deletions are avoided
625 * completely. Insertions are performed at each input character, whereas
626 * string matches are performed only when the previous match ends. So it
627 * is preferable to spend more time in matches to allow very fast string
628 * insertions and avoid deletions. The matching algorithm for small
629 * strings is inspired from that of Rabin & Karp. A brute force approach
630 * is used to find longer strings when a small match has been found.
631 * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
632 * (by Leonid Broukhis).
633 * A previous version of this file used a more sophisticated algorithm
634 * (by Fiala and Greene) which is guaranteed to run in linear amortized
635 * time, but has a larger average cost, uses more memory and is patented.
636 * However the F&G algorithm may be faster for some highly redundant
637 * files if the parameter max_chain_length (described below) is too large.
638 *
639 * ACKNOWLEDGEMENTS
640 *
641 * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
642 * I found it in 'freeze' written by Leonid Broukhis.
643 * Thanks to many people for bug reports and testing.
644 *
645 * REFERENCES
646 *
647 * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
648 * Available in ftp://ds.internic.net/rfc/rfc1951.txt
649 *
650 * A description of the Rabin and Karp algorithm is given in the book
651 * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
652 *
653 * Fiala,E.R., and Greene,D.H.
654 * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
655 *
656 */
657
658 /* @(#) $Id: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $ */
659
660 /* #include "deflate.h" */
661
662 const char deflate_copyright[] =
663 " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly ";
664 /*
665 If you use the zlib library in a product, an acknowledgment is welcome
666 in the documentation of your product. If for some reason you cannot
667 include such an acknowledgment, I would appreciate that you keep this
668 copyright string in the executable of your product.
669 */
670
671 /* ===========================================================================
672 * Function prototypes.
673 */
674 typedef enum {
675 need_more, /* block not completed, need more input or more output */
676 block_done, /* block flush performed */
677 finish_started, /* finish started, need only more output at next deflate */
678 finish_done /* finish done, accept no more input or output */
679 } block_state;
680
681 typedef block_state (*compress_func) __P((deflate_state *s, int flush));
682 /* Compression function. Returns the block state after the call. */
683
684 local void fill_window __P((deflate_state *s));
685 local block_state deflate_stored __P((deflate_state *s, int flush));
686 local block_state deflate_fast __P((deflate_state *s, int flush));
687 local block_state deflate_slow __P((deflate_state *s, int flush));
688 local void lm_init __P((deflate_state *s));
689 local void putShortMSB __P((deflate_state *s, uInt b));
690 local void flush_pending __P((z_streamp strm));
691 local int read_buf __P((z_streamp strm, Bytef *buf, unsigned size));
692 #ifdef ASMV
693 void match_init __P((void)); /* asm code initialization */
694 uInt longest_match __P((deflate_state *s, IPos cur_match));
695 #else
696 local uInt longest_match __P((deflate_state *s, IPos cur_match));
697 #endif
698
699 #ifdef DEBUG_ZLIB
700 local void check_match __P((deflate_state *s, IPos start, IPos match,
701 int length));
702 #endif
703
704 /* ===========================================================================
705 * Local data
706 */
707
708 #define NIL 0
709 /* Tail of hash chains */
710
711 #ifndef TOO_FAR
712 # define TOO_FAR 4096
713 #endif
714 /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
715
716 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
717 /* Minimum amount of lookahead, except at the end of the input file.
718 * See deflate.c for comments about the MIN_MATCH+1.
719 */
720
721 /* Values for max_lazy_match, good_match and max_chain_length, depending on
722 * the desired pack level (0..9). The values given below have been tuned to
723 * exclude worst case performance for pathological files. Better values may be
724 * found for specific files.
725 */
726 typedef struct config_s {
727 ush good_length; /* reduce lazy search above this match length */
728 ush max_lazy; /* do not perform lazy search above this match length */
729 ush nice_length; /* quit search above this match length */
730 ush max_chain;
731 compress_func func;
732 } config;
733
734 local const config configuration_table[10] = {
735 /* good lazy nice chain */
736 /* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
737 /* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */
738 /* 2 */ {4, 5, 16, 8, deflate_fast},
739 /* 3 */ {4, 6, 32, 32, deflate_fast},
740
741 /* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
742 /* 5 */ {8, 16, 32, 32, deflate_slow},
743 /* 6 */ {8, 16, 128, 128, deflate_slow},
744 /* 7 */ {8, 32, 128, 256, deflate_slow},
745 /* 8 */ {32, 128, 258, 1024, deflate_slow},
746 /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */
747
748 /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
749 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
750 * meaning.
751 */
752
753 #define EQUAL 0
754 /* result of memcmp for equal strings */
755
756 #ifndef NO_DUMMY_DECL
757 struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
758 #endif
759
760 /* ===========================================================================
761 * Update a hash value with the given input byte
762 * IN assertion: all calls to to UPDATE_HASH are made with consecutive
763 * input characters, so that a running hash key can be computed from the
764 * previous key instead of complete recalculation each time.
765 */
766 #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
767
768
769 /* ===========================================================================
770 * Insert string str in the dictionary and set match_head to the previous head
771 * of the hash chain (the most recent string with same hash key). Return
772 * the previous length of the hash chain.
773 * If this file is compiled with -DFASTEST, the compression level is forced
774 * to 1, and no hash chains are maintained.
775 * IN assertion: all calls to to INSERT_STRING are made with consecutive
776 * input characters and the first MIN_MATCH bytes of str are valid
777 * (except for the last MIN_MATCH-1 bytes of the input file).
778 */
779 #ifdef FASTEST
780 #define INSERT_STRING(s, str, match_head) \
781 (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
782 match_head = s->head[s->ins_h], \
783 s->head[s->ins_h] = (Pos)(str))
784 #else
785 #define INSERT_STRING(s, str, match_head) \
786 (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
787 s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
788 s->head[s->ins_h] = (Pos)(str))
789 #endif
790
791 /* ===========================================================================
792 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
793 * prev[] will be initialized on the fly.
794 */
795 #define CLEAR_HASH(s) \
796 s->head[s->hash_size-1] = NIL; \
797 zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
798
799 /* ========================================================================= */
800 int ZEXPORT deflateInit_(strm, level, version, stream_size)
801 z_streamp strm;
802 int level;
803 const char *version;
804 int stream_size;
805 {
806 return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
807 Z_DEFAULT_STRATEGY, version, stream_size);
808 /* To do: ignore strm->next_in if we use it as window */
809 }
810
811 /* ========================================================================= */
812 int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
813 version, stream_size)
814 z_streamp strm;
815 int level;
816 int method;
817 int windowBits;
818 int memLevel;
819 int strategy;
820 const char *version;
821 int stream_size;
822 {
823 deflate_state *s;
824 int noheader = 0;
825 static const char* my_version = ZLIB_VERSION;
826
827 ushf *overlay;
828 /* We overlay pending_buf and d_buf+l_buf. This works since the average
829 * output size for (length,distance) codes is <= 24 bits.
830 */
831
832 if (version == Z_NULL || version[0] != my_version[0] ||
833 stream_size != sizeof(z_stream)) {
834 return Z_VERSION_ERROR;
835 }
836 if (strm == Z_NULL) return Z_STREAM_ERROR;
837
838 strm->msg = Z_NULL;
839 #ifndef NO_ZCFUNCS
840 if (strm->zalloc == Z_NULL) {
841 strm->zalloc = zcalloc;
842 strm->opaque = (voidpf)0;
843 }
844 if (strm->zfree == Z_NULL) strm->zfree = zcfree;
845 #endif
846
847 if (level == Z_DEFAULT_COMPRESSION) level = 6;
848 #ifdef FASTEST
849 level = 1;
850 #endif
851
852 if (windowBits < 0) { /* undocumented feature: suppress zlib header */
853 noheader = 1;
854 windowBits = -windowBits;
855 }
856 if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
857 windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
858 strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
859 return Z_STREAM_ERROR;
860 }
861 s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
862 if (s == Z_NULL) return Z_MEM_ERROR;
863 strm->state = (struct internal_state FAR *)s;
864 s->strm = strm;
865
866 s->noheader = noheader;
867 s->w_bits = windowBits;
868 s->w_size = 1 << s->w_bits;
869 s->w_mask = s->w_size - 1;
870
871 s->hash_bits = memLevel + 7;
872 s->hash_size = 1 << s->hash_bits;
873 s->hash_mask = s->hash_size - 1;
874 s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
875
876 s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
877 s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
878 s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
879
880 s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
881
882 overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
883 s->pending_buf = (uchf *) overlay;
884 s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
885
886 if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
887 s->pending_buf == Z_NULL) {
888 strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
889 deflateEnd (strm);
890 return Z_MEM_ERROR;
891 }
892 s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
893 s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
894
895 s->level = level;
896 s->strategy = strategy;
897 s->method = (Byte)method;
898
899 return deflateReset(strm);
900 }
901
902 /* ========================================================================= */
903 int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
904 z_streamp strm;
905 const Bytef *dictionary;
906 uInt dictLength;
907 {
908 deflate_state *s;
909 uInt length = dictLength;
910 uInt n;
911 IPos hash_head = 0;
912
913 if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
914 return Z_STREAM_ERROR;
915
916 s = (deflate_state *)strm->state;
917 if (s->status != INIT_STATE) return Z_STREAM_ERROR;
918
919 strm->adler = adler32(strm->adler, dictionary, dictLength);
920
921 if (length < MIN_MATCH) return Z_OK;
922 if (length > MAX_DIST(s)) {
923 length = MAX_DIST(s);
924 #ifndef USE_DICT_HEAD
925 dictionary += dictLength - length; /* use the tail of the dictionary */
926 #endif
927 }
928 zmemcpy(s->window, dictionary, length);
929 s->strstart = length;
930 s->block_start = (long)length;
931
932 /* Insert all strings in the hash table (except for the last two bytes).
933 * s->lookahead stays null, so s->ins_h will be recomputed at the next
934 * call of fill_window.
935 */
936 s->ins_h = s->window[0];
937 UPDATE_HASH(s, s->ins_h, s->window[1]);
938 for (n = 0; n <= length - MIN_MATCH; n++) {
939 INSERT_STRING(s, n, hash_head);
940 }
941 if (hash_head) hash_head = 0; /* to make compiler happy */
942 return Z_OK;
943 }
944
945 /* ========================================================================= */
946 int ZEXPORT deflateReset (strm)
947 z_streamp strm;
948 {
949 deflate_state *s;
950
951 if (strm == Z_NULL || strm->state == Z_NULL ||
952 strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;
953
954 strm->total_in = strm->total_out = 0;
955 strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
956 strm->data_type = Z_UNKNOWN;
957
958 s = (deflate_state *)strm->state;
959 s->pending = 0;
960 s->pending_out = s->pending_buf;
961
962 if (s->noheader < 0) {
963 s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
964 }
965 s->status = s->noheader ? BUSY_STATE : INIT_STATE;
966 strm->adler = 1;
967 s->last_flush = Z_NO_FLUSH;
968
969 _tr_init(s);
970 lm_init(s);
971
972 return Z_OK;
973 }
974
975 /* ========================================================================= */
976 int ZEXPORT deflateParams(strm, level, strategy)
977 z_streamp strm;
978 int level;
979 int strategy;
980 {
981 deflate_state *s;
982 compress_func func;
983 int err = Z_OK;
984
985 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
986 s = (deflate_state *)strm->state;
987
988 if (level == Z_DEFAULT_COMPRESSION) {
989 level = 6;
990 }
991 if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
992 return Z_STREAM_ERROR;
993 }
994 func = configuration_table[s->level].func;
995
996 if (func != configuration_table[level].func && strm->total_in != 0) {
997 /* Flush the last buffer: */
998 err = deflate(strm, Z_PARTIAL_FLUSH);
999 }
1000 if (s->level != level) {
1001 s->level = level;
1002 s->max_lazy_match = configuration_table[level].max_lazy;
1003 s->good_match = configuration_table[level].good_length;
1004 s->nice_match = configuration_table[level].nice_length;
1005 s->max_chain_length = configuration_table[level].max_chain;
1006 }
1007 s->strategy = strategy;
1008 return err;
1009 }
1010
1011 /* =========================================================================
1012 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
1013 * IN assertion: the stream state is correct and there is enough room in
1014 * pending_buf.
1015 */
1016 local void putShortMSB (s, b)
1017 deflate_state *s;
1018 uInt b;
1019 {
1020 put_byte(s, (Byte)(b >> 8));
1021 put_byte(s, (Byte)(b & 0xff));
1022 }
1023
1024 /* =========================================================================
1025 * Flush as much pending output as possible. All deflate() output goes
1026 * through this function so some applications may wish to modify it
1027 * to avoid allocating a large strm->next_out buffer and copying into it.
1028 * (See also read_buf()).
1029 */
1030 local void flush_pending(strm)
1031 z_streamp strm;
1032 {
1033 deflate_state *s = (deflate_state *) strm->state;
1034 unsigned len = s->pending;
1035
1036 if (len > strm->avail_out) len = strm->avail_out;
1037 if (len == 0) return;
1038
1039 if (strm->next_out != Z_NULL) {
1040 zmemcpy(strm->next_out, s->pending_out, len);
1041 strm->next_out += len;
1042 }
1043 s->pending_out += len;
1044 strm->total_out += len;
1045 strm->avail_out -= len;
1046 s->pending -= len;
1047 if (s->pending == 0) {
1048 s->pending_out = s->pending_buf;
1049 }
1050 }
1051
1052 /* ========================================================================= */
1053 int ZEXPORT deflate (strm, flush)
1054 z_streamp strm;
1055 int flush;
1056 {
1057 int old_flush; /* value of flush param for previous deflate call */
1058 deflate_state *s;
1059
1060 if (strm == Z_NULL || strm->state == Z_NULL ||
1061 flush > Z_FINISH || flush < 0) {
1062 return Z_STREAM_ERROR;
1063 }
1064 s = (deflate_state *)strm->state;
1065
1066 if ((strm->next_in == Z_NULL && strm->avail_in != 0) ||
1067 (s->status == FINISH_STATE && flush != Z_FINISH)) {
1068 ERR_RETURN(strm, Z_STREAM_ERROR);
1069 }
1070 if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
1071
1072 s->strm = strm; /* just in case */
1073 old_flush = s->last_flush;
1074 s->last_flush = flush;
1075
1076 /* Write the zlib header */
1077 if (s->status == INIT_STATE) {
1078
1079 uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
1080 uInt level_flags = (s->level-1) >> 1;
1081
1082 if (level_flags > 3) level_flags = 3;
1083 header |= (level_flags << 6);
1084 if (s->strstart != 0) header |= PRESET_DICT;
1085 header += 31 - (header % 31);
1086
1087 s->status = BUSY_STATE;
1088 putShortMSB(s, header);
1089
1090 /* Save the adler32 of the preset dictionary: */
1091 if (s->strstart != 0) {
1092 putShortMSB(s, (uInt)(strm->adler >> 16));
1093 putShortMSB(s, (uInt)(strm->adler & 0xffff));
1094 }
1095 strm->adler = 1L;
1096 }
1097
1098 /* Flush as much pending output as possible */
1099 if (s->pending != 0) {
1100 flush_pending(strm);
1101 if (strm->avail_out == 0) {
1102 /* Since avail_out is 0, deflate will be called again with
1103 * more output space, but possibly with both pending and
1104 * avail_in equal to zero. There won't be anything to do,
1105 * but this is not an error situation so make sure we
1106 * return OK instead of BUF_ERROR at next call of deflate:
1107 */
1108 s->last_flush = -1;
1109 return Z_OK;
1110 }
1111
1112 /* Make sure there is something to do and avoid duplicate consecutive
1113 * flushes. For repeated and useless calls with Z_FINISH, we keep
1114 * returning Z_STREAM_END instead of Z_BUFF_ERROR.
1115 */
1116 } else if (strm->avail_in == 0 && flush <= old_flush &&
1117 flush != Z_FINISH) {
1118 ERR_RETURN(strm, Z_BUF_ERROR);
1119 }
1120
1121 /* User must not provide more input after the first FINISH: */
1122 if (s->status == FINISH_STATE && strm->avail_in != 0) {
1123 ERR_RETURN(strm, Z_BUF_ERROR);
1124 }
1125
1126 /* Start a new block or continue the current one.
1127 */
1128 if (strm->avail_in != 0 || s->lookahead != 0 ||
1129 (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
1130 block_state bstate;
1131
1132 bstate = (*(configuration_table[s->level].func))(s, flush);
1133
1134 if (bstate == finish_started || bstate == finish_done) {
1135 s->status = FINISH_STATE;
1136 }
1137 if (bstate == need_more || bstate == finish_started) {
1138 if (strm->avail_out == 0) {
1139 s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
1140 }
1141 return Z_OK;
1142 /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
1143 * of deflate should use the same flush parameter to make sure
1144 * that the flush is complete. So we don't have to output an
1145 * empty block here, this will be done at next call. This also
1146 * ensures that for a very small output buffer, we emit at most
1147 * one empty block.
1148 */
1149 }
1150 if (bstate == block_done) {
1151 if (flush == Z_PARTIAL_FLUSH) {
1152 _tr_align(s);
1153 } else if (flush == Z_PACKET_FLUSH) {
1154 /* Output just the 3-bit `stored' block type value,
1155 but not a zero length. */
1156 _tr_stored_type_only(s);
1157 } else { /* FULL_FLUSH or SYNC_FLUSH */
1158 _tr_stored_block(s, (char*)0, 0L, 0);
1159 /* For a full flush, this empty block will be recognized
1160 * as a special marker by inflate_sync().
1161 */
1162 if (flush == Z_FULL_FLUSH) {
1163 CLEAR_HASH(s); /* forget history */
1164 }
1165 }
1166 flush_pending(strm);
1167 if (strm->avail_out == 0) {
1168 s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
1169 return Z_OK;
1170 }
1171 }
1172 }
1173 Assert(strm->avail_out > 0, "bug2");
1174
1175 if (flush != Z_FINISH) return Z_OK;
1176 if (s->noheader) return Z_STREAM_END;
1177
1178 /* Write the zlib trailer (adler32) */
1179 putShortMSB(s, (uInt)(strm->adler >> 16));
1180 putShortMSB(s, (uInt)(strm->adler & 0xffff));
1181 flush_pending(strm);
1182 /* If avail_out is zero, the application will call deflate again
1183 * to flush the rest.
1184 */
1185 s->noheader = -1; /* write the trailer only once! */
1186 return s->pending != 0 ? Z_OK : Z_STREAM_END;
1187 }
1188
1189 /* ========================================================================= */
1190 int ZEXPORT deflateEnd (strm)
1191 z_streamp strm;
1192 {
1193 int status;
1194 deflate_state *s;
1195
1196 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1197 s = (deflate_state *) strm->state;
1198
1199 status = s->status;
1200 if (status != INIT_STATE && status != BUSY_STATE &&
1201 status != FINISH_STATE) {
1202 return Z_STREAM_ERROR;
1203 }
1204
1205 /* Deallocate in reverse order of allocations: */
1206 TRY_FREE(strm, s->pending_buf);
1207 TRY_FREE(strm, s->head);
1208 TRY_FREE(strm, s->prev);
1209 TRY_FREE(strm, s->window);
1210
1211 ZFREE(strm, s);
1212 strm->state = Z_NULL;
1213
1214 return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
1215 }
1216
1217 /* =========================================================================
1218 * Copy the source state to the destination state.
1219 * To simplify the source, this is not supported for 16-bit MSDOS (which
1220 * doesn't have enough memory anyway to duplicate compression states).
1221 */
1222 int ZEXPORT deflateCopy (dest, source)
1223 z_streamp dest;
1224 z_streamp source;
1225 {
1226 #ifdef MAXSEG_64K
1227 return Z_STREAM_ERROR;
1228 #else
1229 deflate_state *ds;
1230 deflate_state *ss;
1231 ushf *overlay;
1232
1233
1234 if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
1235 return Z_STREAM_ERROR;
1236 }
1237
1238 ss = (deflate_state *)source->state;
1239
1240 *dest = *source;
1241
1242 ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
1243 if (ds == Z_NULL) return Z_MEM_ERROR;
1244 dest->state = (void *) ds;
1245 *ds = *ss;
1246 ds->strm = dest;
1247
1248 ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
1249 ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
1250 ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
1251 overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
1252 ds->pending_buf = (uchf *) overlay;
1253
1254 if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
1255 ds->pending_buf == Z_NULL) {
1256 deflateEnd (dest);
1257 return Z_MEM_ERROR;
1258 }
1259 /* following zmemcpy do not work for 16-bit MSDOS */
1260 zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
1261 zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
1262 zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
1263 zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
1264
1265 ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
1266 ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
1267 ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
1268
1269 ds->l_desc.dyn_tree = ds->dyn_ltree;
1270 ds->d_desc.dyn_tree = ds->dyn_dtree;
1271 ds->bl_desc.dyn_tree = ds->bl_tree;
1272
1273 return Z_OK;
1274 #endif
1275 }
1276
1277 /* ===========================================================================
1278 * Return the number of bytes of output which are immediately available
1279 * for output from the decompressor.
1280 */
1281 int deflateOutputPending (strm)
1282 z_streamp strm;
1283 {
1284 if (strm == Z_NULL || strm->state == Z_NULL) return 0;
1285
1286 return ((deflate_state *)(strm->state))->pending;
1287 }
1288
1289 /* ===========================================================================
1290 * Read a new buffer from the current input stream, update the adler32
1291 * and total number of bytes read. All deflate() input goes through
1292 * this function so some applications may wish to modify it to avoid
1293 * allocating a large strm->next_in buffer and copying from it.
1294 * (See also flush_pending()).
1295 */
1296 local int read_buf(strm, buf, size)
1297 z_streamp strm;
1298 Bytef *buf;
1299 unsigned size;
1300 {
1301 unsigned len = strm->avail_in;
1302
1303 if (len > size) len = size;
1304 if (len == 0) return 0;
1305
1306 strm->avail_in -= len;
1307
1308 if (!((deflate_state *)(strm->state))->noheader) {
1309 strm->adler = adler32(strm->adler, strm->next_in, len);
1310 }
1311 zmemcpy(buf, strm->next_in, len);
1312 strm->next_in += len;
1313 strm->total_in += len;
1314
1315 return (int)len;
1316 }
1317
1318 /* ===========================================================================
1319 * Initialize the "longest match" routines for a new zlib stream
1320 */
1321 local void lm_init (s)
1322 deflate_state *s;
1323 {
1324 s->window_size = (ulg)2L*s->w_size;
1325
1326 CLEAR_HASH(s);
1327
1328 /* Set the default configuration parameters:
1329 */
1330 s->max_lazy_match = configuration_table[s->level].max_lazy;
1331 s->good_match = configuration_table[s->level].good_length;
1332 s->nice_match = configuration_table[s->level].nice_length;
1333 s->max_chain_length = configuration_table[s->level].max_chain;
1334
1335 s->strstart = 0;
1336 s->block_start = 0L;
1337 s->lookahead = 0;
1338 s->match_length = s->prev_length = MIN_MATCH-1;
1339 s->match_available = 0;
1340 s->ins_h = 0;
1341 #ifdef ASMV
1342 match_init(); /* initialize the asm code */
1343 #endif
1344 }
1345
1346 /* ===========================================================================
1347 * Set match_start to the longest match starting at the given string and
1348 * return its length. Matches shorter or equal to prev_length are discarded,
1349 * in which case the result is equal to prev_length and match_start is
1350 * garbage.
1351 * IN assertions: cur_match is the head of the hash chain for the current
1352 * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
1353 * OUT assertion: the match length is not greater than s->lookahead.
1354 */
1355 #ifndef ASMV
1356 /* For 80x86 and 680x0, an optimized version will be provided in match.asm or
1357 * match.S. The code will be functionally equivalent.
1358 */
1359 #ifndef FASTEST
1360 local uInt longest_match(s, cur_match)
1361 deflate_state *s;
1362 IPos cur_match; /* current match */
1363 {
1364 unsigned chain_length = s->max_chain_length;/* max hash chain length */
1365 Bytef *scan = s->window + s->strstart; /* current string */
1366 Bytef *match; /* matched string */
1367 int len; /* length of current match */
1368 int best_len = s->prev_length; /* best match length so far */
1369 int nice_match = s->nice_match; /* stop if match long enough */
1370 IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
1371 s->strstart - (IPos)MAX_DIST(s) : NIL;
1372 /* Stop when cur_match becomes <= limit. To simplify the code,
1373 * we prevent matches with the string of window index 0.
1374 */
1375 Posf *prev = s->prev;
1376 uInt wmask = s->w_mask;
1377
1378 #ifdef UNALIGNED_OK
1379 /* Compare two bytes at a time. Note: this is not always beneficial.
1380 * Try with and without -DUNALIGNED_OK to check.
1381 */
1382 Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
1383 ush scan_start = *(ushf*)scan;
1384 ush scan_end = *(ushf*)(scan+best_len-1);
1385 #else
1386 Bytef *strend = s->window + s->strstart + MAX_MATCH;
1387 Byte scan_end1 = scan[best_len-1];
1388 Byte scan_end = scan[best_len];
1389 #endif
1390
1391 /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1392 * It is easy to get rid of this optimization if necessary.
1393 */
1394 Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1395
1396 /* Do not waste too much time if we already have a good match: */
1397 if (s->prev_length >= s->good_match) {
1398 chain_length >>= 2;
1399 }
1400 /* Do not look for matches beyond the end of the input. This is necessary
1401 * to make deflate deterministic.
1402 */
1403 if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
1404
1405 Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
1406
1407 do {
1408 Assert(cur_match < s->strstart, "no future");
1409 match = s->window + cur_match;
1410
1411 /* Skip to next match if the match length cannot increase
1412 * or if the match length is less than 2:
1413 */
1414 #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
1415 /* This code assumes sizeof(unsigned short) == 2. Do not use
1416 * UNALIGNED_OK if your compiler uses a different size.
1417 */
1418 if (*(ushf*)(match+best_len-1) != scan_end ||
1419 *(ushf*)match != scan_start) continue;
1420
1421 /* It is not necessary to compare scan[2] and match[2] since they are
1422 * always equal when the other bytes match, given that the hash keys
1423 * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
1424 * strstart+3, +5, ... up to strstart+257. We check for insufficient
1425 * lookahead only every 4th comparison; the 128th check will be made
1426 * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
1427 * necessary to put more guard bytes at the end of the window, or
1428 * to check more often for insufficient lookahead.
1429 */
1430 Assert(scan[2] == match[2], "scan[2]?");
1431 scan++, match++;
1432 do {
1433 } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1434 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1435 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1436 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1437 scan < strend);
1438 /* The funny "do {}" generates better code on most compilers */
1439
1440 /* Here, scan <= window+strstart+257 */
1441 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1442 if (*scan == *match) scan++;
1443
1444 len = (MAX_MATCH - 1) - (int)(strend-scan);
1445 scan = strend - (MAX_MATCH-1);
1446
1447 #else /* UNALIGNED_OK */
1448
1449 if (match[best_len] != scan_end ||
1450 match[best_len-1] != scan_end1 ||
1451 *match != *scan ||
1452 *++match != scan[1]) continue;
1453
1454 /* The check at best_len-1 can be removed because it will be made
1455 * again later. (This heuristic is not always a win.)
1456 * It is not necessary to compare scan[2] and match[2] since they
1457 * are always equal when the other bytes match, given that
1458 * the hash keys are equal and that HASH_BITS >= 8.
1459 */
1460 scan += 2, match++;
1461 Assert(*scan == *match, "match[2]?");
1462
1463 /* We check for insufficient lookahead only every 8th comparison;
1464 * the 256th check will be made at strstart+258.
1465 */
1466 do {
1467 } while (*++scan == *++match && *++scan == *++match &&
1468 *++scan == *++match && *++scan == *++match &&
1469 *++scan == *++match && *++scan == *++match &&
1470 *++scan == *++match && *++scan == *++match &&
1471 scan < strend);
1472
1473 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1474
1475 len = MAX_MATCH - (int)(strend - scan);
1476 scan = strend - MAX_MATCH;
1477
1478 #endif /* UNALIGNED_OK */
1479
1480 if (len > best_len) {
1481 s->match_start = cur_match;
1482 best_len = len;
1483 if (len >= nice_match) break;
1484 #ifdef UNALIGNED_OK
1485 scan_end = *(ushf*)(scan+best_len-1);
1486 #else
1487 scan_end1 = scan[best_len-1];
1488 scan_end = scan[best_len];
1489 #endif
1490 }
1491 } while ((cur_match = prev[cur_match & wmask]) > limit
1492 && --chain_length != 0);
1493
1494 if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
1495 return s->lookahead;
1496 }
1497
1498 #else /* FASTEST */
1499 /* ---------------------------------------------------------------------------
1500 * Optimized version for level == 1 only
1501 */
1502 local uInt longest_match(s, cur_match)
1503 deflate_state *s;
1504 IPos cur_match; /* current match */
1505 {
1506 register Bytef *scan = s->window + s->strstart; /* current string */
1507 register Bytef *match; /* matched string */
1508 register int len; /* length of current match */
1509 register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1510
1511 /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1512 * It is easy to get rid of this optimization if necessary.
1513 */
1514 Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1515
1516 Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
1517
1518 Assert(cur_match < s->strstart, "no future");
1519
1520 match = s->window + cur_match;
1521
1522 /* Return failure if the match length is less than 2:
1523 */
1524 if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
1525
1526 /* The check at best_len-1 can be removed because it will be made
1527 * again later. (This heuristic is not always a win.)
1528 * It is not necessary to compare scan[2] and match[2] since they
1529 * are always equal when the other bytes match, given that
1530 * the hash keys are equal and that HASH_BITS >= 8.
1531 */
1532 scan += 2, match += 2;
1533 Assert(*scan == *match, "match[2]?");
1534
1535 /* We check for insufficient lookahead only every 8th comparison;
1536 * the 256th check will be made at strstart+258.
1537 */
1538 do {
1539 } while (*++scan == *++match && *++scan == *++match &&
1540 *++scan == *++match && *++scan == *++match &&
1541 *++scan == *++match && *++scan == *++match &&
1542 *++scan == *++match && *++scan == *++match &&
1543 scan < strend);
1544
1545 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1546
1547 len = MAX_MATCH - (int)(strend - scan);
1548
1549 if (len < MIN_MATCH) return MIN_MATCH - 1;
1550
1551 s->match_start = cur_match;
1552 return len <= s->lookahead ? len : s->lookahead;
1553 }
1554 #endif /* FASTEST */
1555 #endif /* ASMV */
1556
1557 #ifdef DEBUG_ZLIB
1558 /* ===========================================================================
1559 * Check that the match at match_start is indeed a match.
1560 */
1561 local void check_match(s, start, match, length)
1562 deflate_state *s;
1563 IPos start, match;
1564 int length;
1565 {
1566 /* check that the match is indeed a match */
1567 if (zmemcmp(s->window + match,
1568 s->window + start, length) != EQUAL) {
1569 fprintf(stderr, " start %u, match %u, length %d\n",
1570 start, match, length);
1571 do {
1572 fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
1573 } while (--length != 0);
1574 z_error("invalid match");
1575 }
1576 if (z_verbose > 1) {
1577 fprintf(stderr,"\\[%d,%d]", start-match, length);
1578 do { putc(s->window[start++], stderr); } while (--length != 0);
1579 }
1580 }
1581 #else
1582 # define check_match(s, start, match, length)
1583 #endif
1584
1585 /* ===========================================================================
1586 * Fill the window when the lookahead becomes insufficient.
1587 * Updates strstart and lookahead.
1588 *
1589 * IN assertion: lookahead < MIN_LOOKAHEAD
1590 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
1591 * At least one byte has been read, or avail_in == 0; reads are
1592 * performed for at least two bytes (required for the zip translate_eol
1593 * option -- not supported here).
1594 */
1595 local void fill_window(s)
1596 deflate_state *s;
1597 {
1598 unsigned n, m;
1599 Posf *p;
1600 unsigned more; /* Amount of free space at the end of the window. */
1601 uInt wsize = s->w_size;
1602
1603 do {
1604 more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
1605
1606 /* Deal with !@#$% 64K limit: */
1607 if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
1608 more = wsize;
1609
1610 } else if (more == (unsigned)(-1)) {
1611 /* Very unlikely, but possible on 16 bit machine if strstart == 0
1612 * and lookahead == 1 (input done one byte at time)
1613 */
1614 more--;
1615
1616 /* If the window is almost full and there is insufficient lookahead,
1617 * move the upper half to the lower one to make room in the upper half.
1618 */
1619 } else if (s->strstart >= wsize+MAX_DIST(s)) {
1620
1621 zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
1622 s->match_start -= wsize;
1623 s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
1624 s->block_start -= (long) wsize;
1625
1626 /* Slide the hash table (could be avoided with 32 bit values
1627 at the expense of memory usage). We slide even when level == 0
1628 to keep the hash table consistent if we switch back to level > 0
1629 later. (Using level 0 permanently is not an optimal usage of
1630 zlib, so we don't care about this pathological case.)
1631 */
1632 n = s->hash_size;
1633 p = &s->head[n];
1634 do {
1635 m = *--p;
1636 *p = (Pos)(m >= wsize ? m-wsize : NIL);
1637 } while (--n);
1638
1639 n = wsize;
1640 #ifndef FASTEST
1641 p = &s->prev[n];
1642 do {
1643 m = *--p;
1644 *p = (Pos)(m >= wsize ? m-wsize : NIL);
1645 /* If n is not on any hash chain, prev[n] is garbage but
1646 * its value will never be used.
1647 */
1648 } while (--n);
1649 #endif
1650 more += wsize;
1651 }
1652 if (s->strm->avail_in == 0) return;
1653
1654 /* If there was no sliding:
1655 * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
1656 * more == window_size - lookahead - strstart
1657 * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
1658 * => more >= window_size - 2*WSIZE + 2
1659 * In the BIG_MEM or MMAP case (not yet supported),
1660 * window_size == input_size + MIN_LOOKAHEAD &&
1661 * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
1662 * Otherwise, window_size == 2*WSIZE so more >= 2.
1663 * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
1664 */
1665 Assert(more >= 2, "more < 2");
1666
1667 n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
1668 s->lookahead += n;
1669
1670 /* Initialize the hash value now that we have some input: */
1671 if (s->lookahead >= MIN_MATCH) {
1672 s->ins_h = s->window[s->strstart];
1673 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1674 #if MIN_MATCH != 3
1675 Call UPDATE_HASH() MIN_MATCH-3 more times
1676 #endif
1677 }
1678 /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
1679 * but this is not important since only literal bytes will be emitted.
1680 */
1681
1682 } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
1683 }
1684
1685 /* ===========================================================================
1686 * Flush the current block, with given end-of-file flag.
1687 * IN assertion: strstart is set to the end of the current match.
1688 */
1689 #define FLUSH_BLOCK_ONLY(s, eof) { \
1690 _tr_flush_block(s, (s->block_start >= 0L ? \
1691 (charf *)&s->window[(unsigned)s->block_start] : \
1692 (charf *)Z_NULL), \
1693 (ulg)((long)s->strstart - s->block_start), \
1694 (eof)); \
1695 s->block_start = s->strstart; \
1696 flush_pending(s->strm); \
1697 Tracev((stderr,"[FLUSH]")); \
1698 }
1699
1700 /* Same but force premature exit if necessary. */
1701 #define FLUSH_BLOCK(s, eof) { \
1702 FLUSH_BLOCK_ONLY(s, eof); \
1703 if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
1704 }
1705
1706 /* ===========================================================================
1707 * Copy without compression as much as possible from the input stream, return
1708 * the current block state.
1709 * This function does not insert new strings in the dictionary since
1710 * uncompressible data is probably not useful. This function is used
1711 * only for the level=0 compression option.
1712 * NOTE: this function should be optimized to avoid extra copying from
1713 * window to pending_buf.
1714 */
1715 local block_state deflate_stored(s, flush)
1716 deflate_state *s;
1717 int flush;
1718 {
1719 /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
1720 * to pending_buf_size, and each stored block has a 5 byte header:
1721 */
1722 ulg max_block_size = 0xffff;
1723 ulg max_start;
1724
1725 if (max_block_size > s->pending_buf_size - 5) {
1726 max_block_size = s->pending_buf_size - 5;
1727 }
1728
1729 /* Copy as much as possible from input to output: */
1730 for (;;) {
1731 /* Fill the window as much as possible: */
1732 if (s->lookahead <= 1) {
1733
1734 Assert(s->strstart < s->w_size+MAX_DIST(s) ||
1735 s->block_start >= (long)s->w_size, "slide too late");
1736
1737 fill_window(s);
1738 if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
1739
1740 if (s->lookahead == 0) break; /* flush the current block */
1741 }
1742 Assert(s->block_start >= 0L, "block gone");
1743
1744 s->strstart += s->lookahead;
1745 s->lookahead = 0;
1746
1747 /* Emit a stored block if pending_buf will be full: */
1748 max_start = s->block_start + max_block_size;
1749 if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
1750 /* strstart == 0 is possible when wraparound on 16-bit machine */
1751 s->lookahead = (uInt)(s->strstart - max_start);
1752 s->strstart = (uInt)max_start;
1753 FLUSH_BLOCK(s, 0);
1754 }
1755 /* Flush if we may have to slide, otherwise block_start may become
1756 * negative and the data will be gone:
1757 */
1758 if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
1759 FLUSH_BLOCK(s, 0);
1760 }
1761 }
1762 FLUSH_BLOCK(s, flush == Z_FINISH);
1763 return flush == Z_FINISH ? finish_done : block_done;
1764 }
1765
1766 /* ===========================================================================
1767 * Compress as much as possible from the input stream, return the current
1768 * block state.
1769 * This function does not perform lazy evaluation of matches and inserts
1770 * new strings in the dictionary only for unmatched strings or for short
1771 * matches. It is used only for the fast compression options.
1772 */
1773 local block_state deflate_fast(s, flush)
1774 deflate_state *s;
1775 int flush;
1776 {
1777 IPos hash_head = NIL; /* head of the hash chain */
1778 int bflush; /* set if current block must be flushed */
1779
1780 for (;;) {
1781 /* Make sure that we always have enough lookahead, except
1782 * at the end of the input file. We need MAX_MATCH bytes
1783 * for the next match, plus MIN_MATCH bytes to insert the
1784 * string following the next match.
1785 */
1786 if (s->lookahead < MIN_LOOKAHEAD) {
1787 fill_window(s);
1788 if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1789 return need_more;
1790 }
1791 if (s->lookahead == 0) break; /* flush the current block */
1792 }
1793
1794 /* Insert the string window[strstart .. strstart+2] in the
1795 * dictionary, and set hash_head to the head of the hash chain:
1796 */
1797 if (s->lookahead >= MIN_MATCH) {
1798 INSERT_STRING(s, s->strstart, hash_head);
1799 }
1800
1801 /* Find the longest match, discarding those <= prev_length.
1802 * At this point we have always match_length < MIN_MATCH
1803 */
1804 if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
1805 /* To simplify the code, we prevent matches with the string
1806 * of window index 0 (in particular we have to avoid a match
1807 * of the string with itself at the start of the input file).
1808 */
1809 if (s->strategy != Z_HUFFMAN_ONLY) {
1810 s->match_length = longest_match (s, hash_head);
1811 }
1812 /* longest_match() sets match_start */
1813 }
1814 if (s->match_length >= MIN_MATCH) {
1815 check_match(s, s->strstart, s->match_start, s->match_length);
1816
1817 _tr_tally_dist(s, s->strstart - s->match_start,
1818 s->match_length - MIN_MATCH, bflush);
1819
1820 s->lookahead -= s->match_length;
1821
1822 /* Insert new strings in the hash table only if the match length
1823 * is not too large. This saves time but degrades compression.
1824 */
1825 #ifndef FASTEST
1826 if (s->match_length <= s->max_insert_length &&
1827 s->lookahead >= MIN_MATCH) {
1828 s->match_length--; /* string at strstart already in hash table */
1829 do {
1830 s->strstart++;
1831 INSERT_STRING(s, s->strstart, hash_head);
1832 /* strstart never exceeds WSIZE-MAX_MATCH, so there are
1833 * always MIN_MATCH bytes ahead.
1834 */
1835 } while (--s->match_length != 0);
1836 s->strstart++;
1837 } else
1838 #endif
1839 {
1840 s->strstart += s->match_length;
1841 s->match_length = 0;
1842 s->ins_h = s->window[s->strstart];
1843 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1844 #if MIN_MATCH != 3
1845 Call UPDATE_HASH() MIN_MATCH-3 more times
1846 #endif
1847 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1848 * matter since it will be recomputed at next deflate call.
1849 */
1850 }
1851 } else {
1852 /* No match, output a literal byte */
1853 Tracevv((stderr,"%c", s->window[s->strstart]));
1854 _tr_tally_lit (s, s->window[s->strstart], bflush);
1855 s->lookahead--;
1856 s->strstart++;
1857 }
1858 if (bflush) FLUSH_BLOCK(s, 0);
1859 }
1860 FLUSH_BLOCK(s, flush == Z_FINISH);
1861 return flush == Z_FINISH ? finish_done : block_done;
1862 }
1863
1864 /* ===========================================================================
1865 * Same as above, but achieves better compression. We use a lazy
1866 * evaluation for matches: a match is finally adopted only if there is
1867 * no better match at the next window position.
1868 */
1869 local block_state deflate_slow(s, flush)
1870 deflate_state *s;
1871 int flush;
1872 {
1873 IPos hash_head = NIL; /* head of hash chain */
1874 int bflush; /* set if current block must be flushed */
1875
1876 /* Process the input block. */
1877 for (;;) {
1878 /* Make sure that we always have enough lookahead, except
1879 * at the end of the input file. We need MAX_MATCH bytes
1880 * for the next match, plus MIN_MATCH bytes to insert the
1881 * string following the next match.
1882 */
1883 if (s->lookahead < MIN_LOOKAHEAD) {
1884 fill_window(s);
1885 if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1886 return need_more;
1887 }
1888 if (s->lookahead == 0) break; /* flush the current block */
1889 }
1890
1891 /* Insert the string window[strstart .. strstart+2] in the
1892 * dictionary, and set hash_head to the head of the hash chain:
1893 */
1894 if (s->lookahead >= MIN_MATCH) {
1895 INSERT_STRING(s, s->strstart, hash_head);
1896 }
1897
1898 /* Find the longest match, discarding those <= prev_length.
1899 */
1900 s->prev_length = s->match_length, s->prev_match = s->match_start;
1901 s->match_length = MIN_MATCH-1;
1902
1903 if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
1904 s->strstart - hash_head <= MAX_DIST(s)) {
1905 /* To simplify the code, we prevent matches with the string
1906 * of window index 0 (in particular we have to avoid a match
1907 * of the string with itself at the start of the input file).
1908 */
1909 if (s->strategy != Z_HUFFMAN_ONLY) {
1910 s->match_length = longest_match (s, hash_head);
1911 }
1912 /* longest_match() sets match_start */
1913
1914 if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
1915 (s->match_length == MIN_MATCH &&
1916 s->strstart - s->match_start > TOO_FAR))) {
1917
1918 /* If prev_match is also MIN_MATCH, match_start is garbage
1919 * but we will ignore the current match anyway.
1920 */
1921 s->match_length = MIN_MATCH-1;
1922 }
1923 }
1924 /* If there was a match at the previous step and the current
1925 * match is not better, output the previous match:
1926 */
1927 if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
1928 uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
1929 /* Do not insert strings in hash table beyond this. */
1930
1931 check_match(s, s->strstart-1, s->prev_match, s->prev_length);
1932
1933 _tr_tally_dist(s, s->strstart -1 - s->prev_match,
1934 s->prev_length - MIN_MATCH, bflush);
1935
1936 /* Insert in hash table all strings up to the end of the match.
1937 * strstart-1 and strstart are already inserted. If there is not
1938 * enough lookahead, the last two strings are not inserted in
1939 * the hash table.
1940 */
1941 s->lookahead -= s->prev_length-1;
1942 s->prev_length -= 2;
1943 do {
1944 if (++s->strstart <= max_insert) {
1945 INSERT_STRING(s, s->strstart, hash_head);
1946 }
1947 } while (--s->prev_length != 0);
1948 s->match_available = 0;
1949 s->match_length = MIN_MATCH-1;
1950 s->strstart++;
1951
1952 if (bflush) FLUSH_BLOCK(s, 0);
1953
1954 } else if (s->match_available) {
1955 /* If there was no match at the previous position, output a
1956 * single literal. If there was a match but the current match
1957 * is longer, truncate the previous match to a single literal.
1958 */
1959 Tracevv((stderr,"%c", s->window[s->strstart-1]));
1960 _tr_tally_lit(s, s->window[s->strstart-1], bflush);
1961 if (bflush) {
1962 FLUSH_BLOCK_ONLY(s, 0);
1963 }
1964 s->strstart++;
1965 s->lookahead--;
1966 if (s->strm->avail_out == 0) return need_more;
1967 } else {
1968 /* There is no previous match to compare with, wait for
1969 * the next step to decide.
1970 */
1971 s->match_available = 1;
1972 s->strstart++;
1973 s->lookahead--;
1974 }
1975 }
1976 Assert (flush != Z_NO_FLUSH, "no flush?");
1977 if (s->match_available) {
1978 Tracevv((stderr,"%c", s->window[s->strstart-1]));
1979 _tr_tally_lit(s, s->window[s->strstart-1], bflush);
1980 s->match_available = 0;
1981 }
1982 FLUSH_BLOCK(s, flush == Z_FINISH);
1983 return flush == Z_FINISH ? finish_done : block_done;
1984 }
1985 /* --- deflate.c */
1986
1987 /* +++ trees.c */
1988
1989 /* trees.c -- output deflated data using Huffman coding
1990 * Copyright (C) 1995-2002 Jean-loup Gailly
1991 * For conditions of distribution and use, see copyright notice in zlib.h
1992 */
1993
1994 /*
1995 * ALGORITHM
1996 *
1997 * The "deflation" process uses several Huffman trees. The more
1998 * common source values are represented by shorter bit sequences.
1999 *
2000 * Each code tree is stored in a compressed form which is itself
2001 * a Huffman encoding of the lengths of all the code strings (in
2002 * ascending order by source values). The actual code strings are
2003 * reconstructed from the lengths in the inflate process, as described
2004 * in the deflate specification.
2005 *
2006 * REFERENCES
2007 *
2008 * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
2009 * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
2010 *
2011 * Storer, James A.
2012 * Data Compression: Methods and Theory, pp. 49-50.
2013 * Computer Science Press, 1988. ISBN 0-7167-8156-5.
2014 *
2015 * Sedgewick, R.
2016 * Algorithms, p290.
2017 * Addison-Wesley, 1983. ISBN 0-201-06672-6.
2018 */
2019
2020 /* @(#) $Id: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $ */
2021
2022 /* #define GEN_TREES_H */
2023
2024 /* #include "deflate.h" */
2025
2026 #ifdef DEBUG_ZLIB
2027 # include <ctype.h>
2028 #endif
2029
2030 /* ===========================================================================
2031 * Constants
2032 */
2033
2034 #define MAX_BL_BITS 7
2035 /* Bit length codes must not exceed MAX_BL_BITS bits */
2036
2037 #define END_BLOCK 256
2038 /* end of block literal code */
2039
2040 #define REP_3_6 16
2041 /* repeat previous bit length 3-6 times (2 bits of repeat count) */
2042
2043 #define REPZ_3_10 17
2044 /* repeat a zero length 3-10 times (3 bits of repeat count) */
2045
2046 #define REPZ_11_138 18
2047 /* repeat a zero length 11-138 times (7 bits of repeat count) */
2048
2049 local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
2050 = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
2051
2052 local const int extra_dbits[D_CODES] /* extra bits for each distance code */
2053 = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
2054
2055 local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
2056 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
2057
2058 local const uch bl_order[BL_CODES]
2059 = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
2060 /* The lengths of the bit length codes are sent in order of decreasing
2061 * probability, to avoid transmitting the lengths for unused bit length codes.
2062 */
2063
2064 #define Buf_size (8 * 2*sizeof(char))
2065 /* Number of bits used within bi_buf. (bi_buf might be implemented on
2066 * more than 16 bits on some systems.)
2067 */
2068
2069
2070 #define MAX(a,b) (a >= b ? a : b)
2071 /* the arguments must not have side effects */
2072
2073 /* ===========================================================================
2074 * Local data. These are initialized only once.
2075 */
2076
2077 #define DIST_CODE_LEN 512 /* see definition of array dist_code below */
2078
2079 #if defined(GEN_TREES_H) || !defined(STDC)
2080 /* non ANSI compilers may not accept trees.h */
2081
2082 local ct_data static_ltree[L_CODES+2];
2083 /* The static literal tree. Since the bit lengths are imposed, there is no
2084 * need for the L_CODES extra codes used during heap construction. However
2085 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
2086 * below).
2087 */
2088
2089 local ct_data static_dtree[D_CODES];
2090 /* The static distance tree. (Actually a trivial tree since all codes use
2091 * 5 bits.)
2092 */
2093
2094 uch _dist_code[DIST_CODE_LEN];
2095 /* Distance codes. The first 256 values correspond to the distances
2096 * 3 .. 258, the last 256 values correspond to the top 8 bits of
2097 * the 15 bit distances.
2098 */
2099
2100 uch _length_code[MAX_MATCH-MIN_MATCH+1];
2101 /* length code for each normalized match length (0 == MIN_MATCH) */
2102
2103 local int base_length[LENGTH_CODES];
2104 /* First normalized length for each code (0 = MIN_MATCH) */
2105
2106 local int base_dist[D_CODES];
2107 /* First normalized distance for each code (0 = distance of 1) */
2108
2109 #else
2110 /* +++ trees.h */
2111
2112 /* header created automatically with -DGEN_TREES_H */
2113
2114 local const ct_data static_ltree[L_CODES+2] = {
2115 {{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}},
2116 {{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}},
2117 {{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}},
2118 {{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}},
2119 {{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}},
2120 {{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}},
2121 {{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}},
2122 {{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}},
2123 {{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}},
2124 {{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}},
2125 {{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}},
2126 {{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}},
2127 {{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}},
2128 {{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}},
2129 {{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}},
2130 {{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}},
2131 {{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}},
2132 {{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}},
2133 {{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}},
2134 {{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}},
2135 {{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}},
2136 {{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}},
2137 {{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}},
2138 {{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}},
2139 {{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}},
2140 {{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}},
2141 {{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}},
2142 {{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}},
2143 {{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}},
2144 {{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}},
2145 {{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}},
2146 {{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}},
2147 {{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}},
2148 {{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}},
2149 {{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}},
2150 {{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}},
2151 {{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}},
2152 {{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}},
2153 {{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}},
2154 {{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}},
2155 {{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}},
2156 {{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}},
2157 {{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}},
2158 {{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}},
2159 {{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}},
2160 {{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}},
2161 {{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}},
2162 {{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}},
2163 {{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}},
2164 {{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}},
2165 {{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}},
2166 {{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}},
2167 {{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}},
2168 {{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}},
2169 {{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}},
2170 {{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}},
2171 {{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}},
2172 {{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}}
2173 };
2174
2175 local const ct_data static_dtree[D_CODES] = {
2176 {{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
2177 {{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
2178 {{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
2179 {{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
2180 {{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
2181 {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
2182 };
2183
2184 const uch _dist_code[DIST_CODE_LEN] = {
2185 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
2186 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
2187 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
2188 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
2189 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
2190 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
2191 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
2192 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
2193 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
2194 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
2195 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
2196 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
2197 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
2198 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
2199 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
2200 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
2201 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
2202 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
2203 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
2204 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
2205 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
2206 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
2207 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
2208 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
2209 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
2210 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
2211 };
2212
2213 const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {
2214 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
2215 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
2216 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
2217 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
2218 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
2219 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
2220 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
2221 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
2222 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
2223 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
2224 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
2225 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
2226 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
2227 };
2228
2229 local const int base_length[LENGTH_CODES] = {
2230 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
2231 64, 80, 96, 112, 128, 160, 192, 224, 0
2232 };
2233
2234 local const int base_dist[D_CODES] = {
2235 0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
2236 32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
2237 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
2238 };
2239 /* --- trees.h */
2240
2241 #endif /* GEN_TREES_H */
2242
2243 struct static_tree_desc_s {
2244 const ct_data *static_tree; /* static tree or NULL */
2245 const intf *extra_bits; /* extra bits for each code or NULL */
2246 int extra_base; /* base index for extra_bits */
2247 int elems; /* max number of elements in the tree */
2248 int max_length; /* max bit length for the codes */
2249 };
2250
2251 local static_tree_desc static_l_desc =
2252 {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
2253
2254 local static_tree_desc static_d_desc =
2255 {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
2256
2257 local static_tree_desc static_bl_desc =
2258 {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
2259
2260 /* ===========================================================================
2261 * Local (static) routines in this file.
2262 */
2263
2264 local void tr_static_init __P((void));
2265 local void init_block __P((deflate_state *s));
2266 local void pqdownheap __P((deflate_state *s, ct_data *tree, int k));
2267 local void gen_bitlen __P((deflate_state *s, tree_desc *desc));
2268 local void gen_codes __P((ct_data *tree, int max_code, ushf *bl_count));
2269 local void build_tree __P((deflate_state *s, tree_desc *desc));
2270 local void scan_tree __P((deflate_state *s, ct_data *tree, int max_code));
2271 local void send_tree __P((deflate_state *s, ct_data *tree, int max_code));
2272 local int build_bl_tree __P((deflate_state *s));
2273 local void send_all_trees __P((deflate_state *s, int lcodes, int dcodes,
2274 int blcodes));
2275 local void compress_block __P((deflate_state *s, ct_data *ltree,
2276 ct_data *dtree));
2277 local void set_data_type __P((deflate_state *s));
2278 local unsigned bi_reverse __P((unsigned value, int length));
2279 local void bi_windup __P((deflate_state *s));
2280 local void bi_flush __P((deflate_state *s));
2281 local void copy_block __P((deflate_state *s, charf *buf, unsigned len,
2282 int header));
2283
2284 #ifdef GEN_TREES_H
2285 local void gen_trees_header __P((void));
2286 #endif
2287
2288 #ifndef DEBUG_ZLIB
2289 # define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
2290 /* Send a code of the given tree. c and tree must not have side effects */
2291
2292 #else /* DEBUG_ZLIB */
2293 # define send_code(s, c, tree) \
2294 { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
2295 send_bits(s, tree[c].Code, tree[c].Len); }
2296 #endif
2297
2298 /* ===========================================================================
2299 * Output a short LSB first on the stream.
2300 * IN assertion: there is enough room in pendingBuf.
2301 */
2302 #define put_short(s, w) { \
2303 put_byte(s, (uch)((w) & 0xff)); \
2304 put_byte(s, (uch)((ush)(w) >> 8)); \
2305 }
2306
2307 /* ===========================================================================
2308 * Send a value on a given number of bits.
2309 * IN assertion: length <= 16 and value fits in length bits.
2310 */
2311 #ifdef DEBUG_ZLIB
2312 local void send_bits __P((deflate_state *s, int value, int length));
2313
2314 local void send_bits(s, value, length)
2315 deflate_state *s;
2316 int value; /* value to send */
2317 int length; /* number of bits */
2318 {
2319 Tracevv((stderr," l %2d v %4x ", length, value));
2320 Assert(length > 0 && length <= 15, "invalid length");
2321 s->bits_sent += (ulg)length;
2322
2323 /* If not enough room in bi_buf, use (valid) bits from bi_buf and
2324 * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
2325 * unused bits in value.
2326 */
2327 if (s->bi_valid > (int)Buf_size - length) {
2328 s->bi_buf |= (value << s->bi_valid);
2329 put_short(s, s->bi_buf);
2330 s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
2331 s->bi_valid += length - Buf_size;
2332 } else {
2333 s->bi_buf |= value << s->bi_valid;
2334 s->bi_valid += length;
2335 }
2336 }
2337 #else /* !DEBUG_ZLIB */
2338
2339 #define send_bits(s, value, length) \
2340 { int len = length;\
2341 if (s->bi_valid > (int)Buf_size - len) {\
2342 int val = value;\
2343 s->bi_buf |= (val << s->bi_valid);\
2344 put_short(s, s->bi_buf);\
2345 s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
2346 s->bi_valid += len - Buf_size;\
2347 } else {\
2348 s->bi_buf |= (value) << s->bi_valid;\
2349 s->bi_valid += len;\
2350 }\
2351 }
2352 #endif /* DEBUG_ZLIB */
2353
2354
2355 /* ===========================================================================
2356 * Initialize the various 'constant' tables.
2357 */
2358 local void tr_static_init()
2359 {
2360 #if defined(GEN_TREES_H) || !defined(STDC)
2361 static int static_init_done = 0;
2362 int n; /* iterates over tree elements */
2363 int bits; /* bit counter */
2364 int length; /* length value */
2365 int code; /* code value */
2366 int dist; /* distance index */
2367 ush bl_count[MAX_BITS+1];
2368 /* number of codes at each bit length for an optimal tree */
2369
2370 if (static_init_done) return;
2371
2372 /* For some embedded targets, global variables are not initialized: */
2373 static_l_desc.static_tree = static_ltree;
2374 static_l_desc.extra_bits = extra_lbits;
2375 static_d_desc.static_tree = static_dtree;
2376 static_d_desc.extra_bits = extra_dbits;
2377 static_bl_desc.extra_bits = extra_blbits;
2378
2379 /* Initialize the mapping length (0..255) -> length code (0..28) */
2380 length = 0;
2381 for (code = 0; code < LENGTH_CODES-1; code++) {
2382 base_length[code] = length;
2383 for (n = 0; n < (1<<extra_lbits[code]); n++) {
2384 _length_code[length++] = (uch)code;
2385 }
2386 }
2387 Assert (length == 256, "tr_static_init: length != 256");
2388 /* Note that the length 255 (match length 258) can be represented
2389 * in two different ways: code 284 + 5 bits or code 285, so we
2390 * overwrite length_code[255] to use the best encoding:
2391 */
2392 _length_code[length-1] = (uch)code;
2393
2394 /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
2395 dist = 0;
2396 for (code = 0 ; code < 16; code++) {
2397 base_dist[code] = dist;
2398 for (n = 0; n < (1<<extra_dbits[code]); n++) {
2399 _dist_code[dist++] = (uch)code;
2400 }
2401 }
2402 Assert (dist == 256, "tr_static_init: dist != 256");
2403 dist >>= 7; /* from now on, all distances are divided by 128 */
2404 for ( ; code < D_CODES; code++) {
2405 base_dist[code] = dist << 7;
2406 for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
2407 _dist_code[256 + dist++] = (uch)code;
2408 }
2409 }
2410 Assert (dist == 256, "tr_static_init: 256+dist != 512");
2411
2412 /* Construct the codes of the static literal tree */
2413 for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
2414 n = 0;
2415 while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
2416 while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
2417 while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
2418 while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
2419 /* Codes 286 and 287 do not exist, but we must include them in the
2420 * tree construction to get a canonical Huffman tree (longest code
2421 * all ones)
2422 */
2423 gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
2424
2425 /* The static distance tree is trivial: */
2426 for (n = 0; n < D_CODES; n++) {
2427 static_dtree[n].Len = 5;
2428 static_dtree[n].Code = bi_reverse((unsigned)n, 5);
2429 }
2430 static_init_done = 1;
2431
2432 # ifdef GEN_TREES_H
2433 gen_trees_header();
2434 # endif
2435 #endif /* defined(GEN_TREES_H) || !defined(STDC) */
2436 }
2437
2438 /* ===========================================================================
2439 * Genererate the file trees.h describing the static trees.
2440 */
2441 #ifdef GEN_TREES_H
2442 # ifndef DEBUG_ZLIB
2443 # include <stdio.h>
2444 # endif
2445
2446 # define SEPARATOR(i, last, width) \
2447 ((i) == (last)? "\n};\n\n" : \
2448 ((i) % (width) == (width)-1 ? ",\n" : ", "))
2449
2450 void gen_trees_header()
2451 {
2452 FILE *header = fopen("trees.h", "w");
2453 int i;
2454
2455 Assert (header != NULL, "Can't open trees.h");
2456 fprintf(header,
2457 "/* header created automatically with -DGEN_TREES_H */\n\n");
2458
2459 fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
2460 for (i = 0; i < L_CODES+2; i++) {
2461 fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
2462 static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
2463 }
2464
2465 fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
2466 for (i = 0; i < D_CODES; i++) {
2467 fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
2468 static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
2469 }
2470
2471 fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n");
2472 for (i = 0; i < DIST_CODE_LEN; i++) {
2473 fprintf(header, "%2u%s", _dist_code[i],
2474 SEPARATOR(i, DIST_CODE_LEN-1, 20));
2475 }
2476
2477 fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
2478 for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
2479 fprintf(header, "%2u%s", _length_code[i],
2480 SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
2481 }
2482
2483 fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
2484 for (i = 0; i < LENGTH_CODES; i++) {
2485 fprintf(header, "%1u%s", base_length[i],
2486 SEPARATOR(i, LENGTH_CODES-1, 20));
2487 }
2488
2489 fprintf(header, "local const int base_dist[D_CODES] = {\n");
2490 for (i = 0; i < D_CODES; i++) {
2491 fprintf(header, "%5u%s", base_dist[i],
2492 SEPARATOR(i, D_CODES-1, 10));
2493 }
2494
2495 fclose(header);
2496 }
2497 #endif /* GEN_TREES_H */
2498
2499 /* ===========================================================================
2500 * Initialize the tree data structures for a new zlib stream.
2501 */
2502 void _tr_init(s)
2503 deflate_state *s;
2504 {
2505 tr_static_init();
2506
2507 s->l_desc.dyn_tree = s->dyn_ltree;
2508 s->l_desc.stat_desc = &static_l_desc;
2509
2510 s->d_desc.dyn_tree = s->dyn_dtree;
2511 s->d_desc.stat_desc = &static_d_desc;
2512
2513 s->bl_desc.dyn_tree = s->bl_tree;
2514 s->bl_desc.stat_desc = &static_bl_desc;
2515
2516 s->bi_buf = 0;
2517 s->bi_valid = 0;
2518 s->last_eob_len = 8; /* enough lookahead for inflate */
2519 #ifdef DEBUG_ZLIB
2520 s->compressed_len = 0L;
2521 s->bits_sent = 0L;
2522 #endif
2523
2524 /* Initialize the first block of the first file: */
2525 init_block(s);
2526 }
2527
2528 /* ===========================================================================
2529 * Initialize a new block.
2530 */
2531 local void init_block(s)
2532 deflate_state *s;
2533 {
2534 int n; /* iterates over tree elements */
2535
2536 /* Initialize the trees. */
2537 for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
2538 for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
2539 for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
2540
2541 s->dyn_ltree[END_BLOCK].Freq = 1;
2542 s->opt_len = s->static_len = 0L;
2543 s->last_lit = s->matches = 0;
2544 }
2545
2546 #define SMALLEST 1
2547 /* Index within the heap array of least frequent node in the Huffman tree */
2548
2549
2550 /* ===========================================================================
2551 * Remove the smallest element from the heap and recreate the heap with
2552 * one less element. Updates heap and heap_len.
2553 */
2554 #define pqremove(s, tree, top) \
2555 {\
2556 top = s->heap[SMALLEST]; \
2557 s->heap[SMALLEST] = s->heap[s->heap_len--]; \
2558 pqdownheap(s, tree, SMALLEST); \
2559 }
2560
2561 /* ===========================================================================
2562 * Compares to subtrees, using the tree depth as tie breaker when
2563 * the subtrees have equal frequency. This minimizes the worst case length.
2564 */
2565 #define smaller(tree, n, m, depth) \
2566 (tree[n].Freq < tree[m].Freq || \
2567 (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
2568
2569 /* ===========================================================================
2570 * Restore the heap property by moving down the tree starting at node k,
2571 * exchanging a node with the smallest of its two sons if necessary, stopping
2572 * when the heap property is re-established (each father smaller than its
2573 * two sons).
2574 */
2575 local void pqdownheap(s, tree, k)
2576 deflate_state *s;
2577 ct_data *tree; /* the tree to restore */
2578 int k; /* node to move down */
2579 {
2580 int v = s->heap[k];
2581 int j = k << 1; /* left son of k */
2582 while (j <= s->heap_len) {
2583 /* Set j to the smallest of the two sons: */
2584 if (j < s->heap_len &&
2585 smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
2586 j++;
2587 }
2588 /* Exit if v is smaller than both sons */
2589 if (smaller(tree, v, s->heap[j], s->depth)) break;
2590
2591 /* Exchange v with the smallest son */
2592 s->heap[k] = s->heap[j]; k = j;
2593
2594 /* And continue down the tree, setting j to the left son of k */
2595 j <<= 1;
2596 }
2597 s->heap[k] = v;
2598 }
2599
2600 /* ===========================================================================
2601 * Compute the optimal bit lengths for a tree and update the total bit length
2602 * for the current block.
2603 * IN assertion: the fields freq and dad are set, heap[heap_max] and
2604 * above are the tree nodes sorted by increasing frequency.
2605 * OUT assertions: the field len is set to the optimal bit length, the
2606 * array bl_count contains the frequencies for each bit length.
2607 * The length opt_len is updated; static_len is also updated if stree is
2608 * not null.
2609 */
2610 local void gen_bitlen(s, desc)
2611 deflate_state *s;
2612 tree_desc *desc; /* the tree descriptor */
2613 {
2614 ct_data *tree = desc->dyn_tree;
2615 int max_code = desc->max_code;
2616 const ct_data *stree = desc->stat_desc->static_tree;
2617 const intf *extra = desc->stat_desc->extra_bits;
2618 int base = desc->stat_desc->extra_base;
2619 int max_length = desc->stat_desc->max_length;
2620 int h; /* heap index */
2621 int n, m; /* iterate over the tree elements */
2622 int bits; /* bit length */
2623 int xbits; /* extra bits */
2624 ush f; /* frequency */
2625 int overflow = 0; /* number of elements with bit length too large */
2626
2627 for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
2628
2629 /* In a first pass, compute the optimal bit lengths (which may
2630 * overflow in the case of the bit length tree).
2631 */
2632 tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
2633
2634 for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
2635 n = s->heap[h];
2636 bits = tree[tree[n].Dad].Len + 1;
2637 if (bits > max_length) bits = max_length, overflow++;
2638 tree[n].Len = (ush)bits;
2639 /* We overwrite tree[n].Dad which is no longer needed */
2640
2641 if (n > max_code) continue; /* not a leaf node */
2642
2643 s->bl_count[bits]++;
2644 xbits = 0;
2645 if (n >= base) xbits = extra[n-base];
2646 f = tree[n].Freq;
2647 s->opt_len += (ulg)f * (bits + xbits);
2648 if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
2649 }
2650 if (overflow == 0) return;
2651
2652 Trace((stderr,"\nbit length overflow\n"));
2653 /* This happens for example on obj2 and pic of the Calgary corpus */
2654
2655 /* Find the first bit length which could increase: */
2656 do {
2657 bits = max_length-1;
2658 while (s->bl_count[bits] == 0) bits--;
2659 s->bl_count[bits]--; /* move one leaf down the tree */
2660 s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
2661 s->bl_count[max_length]--;
2662 /* The brother of the overflow item also moves one step up,
2663 * but this does not affect bl_count[max_length]
2664 */
2665 overflow -= 2;
2666 } while (overflow > 0);
2667
2668 /* Now recompute all bit lengths, scanning in increasing frequency.
2669 * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
2670 * lengths instead of fixing only the wrong ones. This idea is taken
2671 * from 'ar' written by Haruhiko Okumura.)
2672 */
2673 for (bits = max_length; bits != 0; bits--) {
2674 n = s->bl_count[bits];
2675 while (n != 0) {
2676 m = s->heap[--h];
2677 if (m > max_code) continue;
2678 if (tree[m].Len != (unsigned) bits) {
2679 Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
2680 s->opt_len += ((long)bits - (long)tree[m].Len)
2681 *(long)tree[m].Freq;
2682 tree[m].Len = (ush)bits;
2683 }
2684 n--;
2685 }
2686 }
2687 }
2688
2689 /* ===========================================================================
2690 * Generate the codes for a given tree and bit counts (which need not be
2691 * optimal).
2692 * IN assertion: the array bl_count contains the bit length statistics for
2693 * the given tree and the field len is set for all tree elements.
2694 * OUT assertion: the field code is set for all tree elements of non
2695 * zero code length.
2696 */
2697 local void gen_codes (tree, max_code, bl_count)
2698 ct_data *tree; /* the tree to decorate */
2699 int max_code; /* largest code with non zero frequency */
2700 ushf *bl_count; /* number of codes at each bit length */
2701 {
2702 ush next_code[MAX_BITS+1]; /* next code value for each bit length */
2703 ush code = 0; /* running code value */
2704 int bits; /* bit index */
2705 int n; /* code index */
2706
2707 /* The distribution counts are first used to generate the code values
2708 * without bit reversal.
2709 */
2710 for (bits = 1; bits <= MAX_BITS; bits++) {
2711 next_code[bits] = code = (code + bl_count[bits-1]) << 1;
2712 }
2713 /* Check that the bit counts in bl_count are consistent. The last code
2714 * must be all ones.
2715 */
2716 Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
2717 "inconsistent bit counts");
2718 Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
2719
2720 for (n = 0; n <= max_code; n++) {
2721 int len = tree[n].Len;
2722 if (len == 0) continue;
2723 /* Now reverse the bits */
2724 tree[n].Code = bi_reverse(next_code[len]++, len);
2725
2726 Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
2727 n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
2728 }
2729 }
2730
2731 /* ===========================================================================
2732 * Construct one Huffman tree and assigns the code bit strings and lengths.
2733 * Update the total bit length for the current block.
2734 * IN assertion: the field freq is set for all tree elements.
2735 * OUT assertions: the fields len and code are set to the optimal bit length
2736 * and corresponding code. The length opt_len is updated; static_len is
2737 * also updated if stree is not null. The field max_code is set.
2738 */
2739 local void build_tree(s, desc)
2740 deflate_state *s;
2741 tree_desc *desc; /* the tree descriptor */
2742 {
2743 ct_data *tree = desc->dyn_tree;
2744 const ct_data *stree = desc->stat_desc->static_tree;
2745 int elems = desc->stat_desc->elems;
2746 int n, m; /* iterate over heap elements */
2747 int max_code = -1; /* largest code with non zero frequency */
2748 int node; /* new node being created */
2749
2750 /* Construct the initial heap, with least frequent element in
2751 * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
2752 * heap[0] is not used.
2753 */
2754 s->heap_len = 0, s->heap_max = HEAP_SIZE;
2755
2756 for (n = 0; n < elems; n++) {
2757 if (tree[n].Freq != 0) {
2758 s->heap[++(s->heap_len)] = max_code = n;
2759 s->depth[n] = 0;
2760 } else {
2761 tree[n].Len = 0;
2762 }
2763 }
2764
2765 /* The pkzip format requires that at least one distance code exists,
2766 * and that at least one bit should be sent even if there is only one
2767 * possible code. So to avoid special checks later on we force at least
2768 * two codes of non zero frequency.
2769 */
2770 while (s->heap_len < 2) {
2771 node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
2772 tree[node].Freq = 1;
2773 s->depth[node] = 0;
2774 s->opt_len--; if (stree) s->static_len -= stree[node].Len;
2775 /* node is 0 or 1 so it does not have extra bits */
2776 }
2777 desc->max_code = max_code;
2778
2779 /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
2780 * establish sub-heaps of increasing lengths:
2781 */
2782 for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
2783
2784 /* Construct the Huffman tree by repeatedly combining the least two
2785 * frequent nodes.
2786 */
2787 node = elems; /* next internal node of the tree */
2788 do {
2789 pqremove(s, tree, n); /* n = node of least frequency */
2790 m = s->heap[SMALLEST]; /* m = node of next least frequency */
2791
2792 s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
2793 s->heap[--(s->heap_max)] = m;
2794
2795 /* Create a new node father of n and m */
2796 tree[node].Freq = tree[n].Freq + tree[m].Freq;
2797 s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
2798 tree[n].Dad = tree[m].Dad = (ush)node;
2799 #ifdef DUMP_BL_TREE
2800 if (tree == s->bl_tree) {
2801 fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
2802 node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
2803 }
2804 #endif
2805 /* and insert the new node in the heap */
2806 s->heap[SMALLEST] = node++;
2807 pqdownheap(s, tree, SMALLEST);
2808
2809 } while (s->heap_len >= 2);
2810
2811 s->heap[--(s->heap_max)] = s->heap[SMALLEST];
2812
2813 /* At this point, the fields freq and dad are set. We can now
2814 * generate the bit lengths.
2815 */
2816 gen_bitlen(s, (tree_desc *)desc);
2817
2818 /* The field len is now set, we can generate the bit codes */
2819 gen_codes ((ct_data *)tree, max_code, s->bl_count);
2820 }
2821
2822 /* ===========================================================================
2823 * Scan a literal or distance tree to determine the frequencies of the codes
2824 * in the bit length tree.
2825 */
2826 local void scan_tree (s, tree, max_code)
2827 deflate_state *s;
2828 ct_data *tree; /* the tree to be scanned */
2829 int max_code; /* and its largest code of non zero frequency */
2830 {
2831 int n; /* iterates over all tree elements */
2832 int prevlen = -1; /* last emitted length */
2833 int curlen; /* length of current code */
2834 int nextlen = tree[0].Len; /* length of next code */
2835 int count = 0; /* repeat count of the current code */
2836 int max_count = 7; /* max repeat count */
2837 int min_count = 4; /* min repeat count */
2838
2839 if (nextlen == 0) max_count = 138, min_count = 3;
2840 tree[max_code+1].Len = (ush)0xffff; /* guard */
2841
2842 for (n = 0; n <= max_code; n++) {
2843 curlen = nextlen; nextlen = tree[n+1].Len;
2844 if (++count < max_count && curlen == nextlen) {
2845 continue;
2846 } else if (count < min_count) {
2847 s->bl_tree[curlen].Freq += count;
2848 } else if (curlen != 0) {
2849 if (curlen != prevlen) s->bl_tree[curlen].Freq++;
2850 s->bl_tree[REP_3_6].Freq++;
2851 } else if (count <= 10) {
2852 s->bl_tree[REPZ_3_10].Freq++;
2853 } else {
2854 s->bl_tree[REPZ_11_138].Freq++;
2855 }
2856 count = 0; prevlen = curlen;
2857 if (nextlen == 0) {
2858 max_count = 138, min_count = 3;
2859 } else if (curlen == nextlen) {
2860 max_count = 6, min_count = 3;
2861 } else {
2862 max_count = 7, min_count = 4;
2863 }
2864 }
2865 }
2866
2867 /* ===========================================================================
2868 * Send a literal or distance tree in compressed form, using the codes in
2869 * bl_tree.
2870 */
2871 local void send_tree (s, tree, max_code)
2872 deflate_state *s;
2873 ct_data *tree; /* the tree to be scanned */
2874 int max_code; /* and its largest code of non zero frequency */
2875 {
2876 int n; /* iterates over all tree elements */
2877 int prevlen = -1; /* last emitted length */
2878 int curlen; /* length of current code */
2879 int nextlen = tree[0].Len; /* length of next code */
2880 int count = 0; /* repeat count of the current code */
2881 int max_count = 7; /* max repeat count */
2882 int min_count = 4; /* min repeat count */
2883
2884 /* tree[max_code+1].Len = -1; */ /* guard already set */
2885 if (nextlen == 0) max_count = 138, min_count = 3;
2886
2887 for (n = 0; n <= max_code; n++) {
2888 curlen = nextlen; nextlen = tree[n+1].Len;
2889 if (++count < max_count && curlen == nextlen) {
2890 continue;
2891 } else if (count < min_count) {
2892 do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
2893
2894 } else if (curlen != 0) {
2895 if (curlen != prevlen) {
2896 send_code(s, curlen, s->bl_tree); count--;
2897 }
2898 Assert(count >= 3 && count <= 6, " 3_6?");
2899 send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
2900
2901 } else if (count <= 10) {
2902 send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
2903
2904 } else {
2905 send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
2906 }
2907 count = 0; prevlen = curlen;
2908 if (nextlen == 0) {
2909 max_count = 138, min_count = 3;
2910 } else if (curlen == nextlen) {
2911 max_count = 6, min_count = 3;
2912 } else {
2913 max_count = 7, min_count = 4;
2914 }
2915 }
2916 }
2917
2918 /* ===========================================================================
2919 * Construct the Huffman tree for the bit lengths and return the index in
2920 * bl_order of the last bit length code to send.
2921 */
2922 local int build_bl_tree(s)
2923 deflate_state *s;
2924 {
2925 int max_blindex; /* index of last bit length code of non zero freq */
2926
2927 /* Determine the bit length frequencies for literal and distance trees */
2928 scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
2929 scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
2930
2931 /* Build the bit length tree: */
2932 build_tree(s, (tree_desc *)(&(s->bl_desc)));
2933 /* opt_len now includes the length of the tree representations, except
2934 * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
2935 */
2936
2937 /* Determine the number of bit length codes to send. The pkzip format
2938 * requires that at least 4 bit length codes be sent. (appnote.txt says
2939 * 3 but the actual value used is 4.)
2940 */
2941 for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
2942 if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
2943 }
2944 /* Update opt_len to include the bit length tree and counts */
2945 s->opt_len += 3*(max_blindex+1) + 5+5+4;
2946 Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
2947 s->opt_len, s->static_len));
2948
2949 return max_blindex;
2950 }
2951
2952 /* ===========================================================================
2953 * Send the header for a block using dynamic Huffman trees: the counts, the
2954 * lengths of the bit length codes, the literal tree and the distance tree.
2955 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
2956 */
2957 local void send_all_trees(s, lcodes, dcodes, blcodes)
2958 deflate_state *s;
2959 int lcodes, dcodes, blcodes; /* number of codes for each tree */
2960 {
2961 int rank; /* index in bl_order */
2962
2963 Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
2964 Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
2965 "too many codes");
2966 Tracev((stderr, "\nbl counts: "));
2967 send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
2968 send_bits(s, dcodes-1, 5);
2969 send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
2970 for (rank = 0; rank < blcodes; rank++) {
2971 Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
2972 send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
2973 }
2974 Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
2975
2976 send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
2977 Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
2978
2979 send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
2980 Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
2981 }
2982
2983 /* ===========================================================================
2984 * Send a stored block
2985 */
2986 void _tr_stored_block(s, buf, stored_len, eof)
2987 deflate_state *s;
2988 charf *buf; /* input block */
2989 ulg stored_len; /* length of input block */
2990 int eof; /* true if this is the last block for a file */
2991 {
2992 send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */
2993 #ifdef DEBUG_ZLIB
2994 s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
2995 s->compressed_len += (stored_len + 4) << 3;
2996 #endif
2997 copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
2998 }
2999
3000 /* Send just the `stored block' type code without any length bytes or data.
3001 */
3002 void _tr_stored_type_only(s)
3003 deflate_state *s;
3004 {
3005 send_bits(s, (STORED_BLOCK << 1), 3);
3006 bi_windup(s);
3007 #ifdef DEBUG_ZLIB
3008 s->compressed_len = (s->compressed_len + 3) & ~7L;
3009 #endif
3010 }
3011
3012 /* ===========================================================================
3013 * Send one empty static block to give enough lookahead for inflate.
3014 * This takes 10 bits, of which 7 may remain in the bit buffer.
3015 * The current inflate code requires 9 bits of lookahead. If the
3016 * last two codes for the previous block (real code plus EOB) were coded
3017 * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
3018 * the last real code. In this case we send two empty static blocks instead
3019 * of one. (There are no problems if the previous block is stored or fixed.)
3020 * To simplify the code, we assume the worst case of last real code encoded
3021 * on one bit only.
3022 */
3023 void _tr_align(s)
3024 deflate_state *s;
3025 {
3026 send_bits(s, STATIC_TREES<<1, 3);
3027 send_code(s, END_BLOCK, static_ltree);
3028 #ifdef DEBUG_ZLIB
3029 s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
3030 #endif
3031 bi_flush(s);
3032 /* Of the 10 bits for the empty block, we have already sent
3033 * (10 - bi_valid) bits. The lookahead for the last real code (before
3034 * the EOB of the previous block) was thus at least one plus the length
3035 * of the EOB plus what we have just sent of the empty static block.
3036 */
3037 if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
3038 send_bits(s, STATIC_TREES<<1, 3);
3039 send_code(s, END_BLOCK, static_ltree);
3040 #ifdef DEBUG_ZLIB
3041 s->compressed_len += 10L;
3042 #endif
3043 bi_flush(s);
3044 }
3045 s->last_eob_len = 7;
3046 }
3047
3048 /* ===========================================================================
3049 * Determine the best encoding for the current block: dynamic trees, static
3050 * trees or store, and output the encoded block to the zip file.
3051 */
3052 void _tr_flush_block(s, buf, stored_len, eof)
3053 deflate_state *s;
3054 charf *buf; /* input block, or NULL if too old */
3055 ulg stored_len; /* length of input block */
3056 int eof; /* true if this is the last block for a file */
3057 {
3058 ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
3059 int max_blindex = 0; /* index of last bit length code of non zero freq */
3060
3061 /* Build the Huffman trees unless a stored block is forced */
3062 if (s->level > 0) {
3063
3064 /* Check if the file is ascii or binary */
3065 if (s->data_type == Z_UNKNOWN) set_data_type(s);
3066
3067 /* Construct the literal and distance trees */
3068 build_tree(s, (tree_desc *)(&(s->l_desc)));
3069 Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
3070 s->static_len));
3071
3072 build_tree(s, (tree_desc *)(&(s->d_desc)));
3073 Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
3074 s->static_len));
3075 /* At this point, opt_len and static_len are the total bit lengths of
3076 * the compressed block data, excluding the tree representations.
3077 */
3078
3079 /* Build the bit length tree for the above two trees, and get the index
3080 * in bl_order of the last bit length code to send.
3081 */
3082 max_blindex = build_bl_tree(s);
3083
3084 /* Determine the best encoding. Compute first the block length in bytes*/
3085 opt_lenb = (s->opt_len+3+7)>>3;
3086 static_lenb = (s->static_len+3+7)>>3;
3087
3088 Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
3089 opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
3090 s->last_lit));
3091
3092 if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
3093
3094 } else {
3095 Assert(buf != (char*)0, "lost buf");
3096 opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
3097 }
3098
3099 #ifdef FORCE_STORED
3100 if (buf != (char*)0) { /* force stored block */
3101 #else
3102 if (stored_len+4 <= opt_lenb && buf != (char*)0) {
3103 /* 4: two words for the lengths */
3104 #endif
3105 /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
3106 * Otherwise we can't have processed more than WSIZE input bytes since
3107 * the last block flush, because compression would have been
3108 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
3109 * transform a block into a stored block.
3110 */
3111 _tr_stored_block(s, buf, stored_len, eof);
3112
3113 #ifdef FORCE_STATIC
3114 } else if (static_lenb >= 0) { /* force static trees */
3115 #else
3116 } else if (static_lenb == opt_lenb) {
3117 #endif
3118 send_bits(s, (STATIC_TREES<<1)+eof, 3);
3119 compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
3120 #ifdef DEBUG_ZLIB
3121 s->compressed_len += 3 + s->static_len;
3122 #endif
3123 } else {
3124 send_bits(s, (DYN_TREES<<1)+eof, 3);
3125 send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
3126 max_blindex+1);
3127 compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
3128 #ifdef DEBUG_ZLIB
3129 s->compressed_len += 3 + s->opt_len;
3130 #endif
3131 }
3132 Assert (s->compressed_len == s->bits_sent, "bad compressed size");
3133 /* The above check is made mod 2^32, for files larger than 512 MB
3134 * and uLong implemented on 32 bits.
3135 */
3136 init_block(s);
3137
3138 if (eof) {
3139 bi_windup(s);
3140 #ifdef DEBUG_ZLIB
3141 s->compressed_len += 7; /* align on byte boundary */
3142 #endif
3143 }
3144 Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
3145 s->compressed_len-7*eof));
3146 }
3147
3148 /* ===========================================================================
3149 * Save the match info and tally the frequency counts. Return true if
3150 * the current block must be flushed.
3151 */
3152 int _tr_tally (s, dist, lc)
3153 deflate_state *s;
3154 unsigned dist; /* distance of matched string */
3155 unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
3156 {
3157 s->d_buf[s->last_lit] = (ush)dist;
3158 s->l_buf[s->last_lit++] = (uch)lc;
3159 if (dist == 0) {
3160 /* lc is the unmatched char */
3161 s->dyn_ltree[lc].Freq++;
3162 } else {
3163 s->matches++;
3164 /* Here, lc is the match length - MIN_MATCH */
3165 dist--; /* dist = match distance - 1 */
3166 Assert((ush)dist < (ush)MAX_DIST(s) &&
3167 (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
3168 (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
3169
3170 s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
3171 s->dyn_dtree[d_code(dist)].Freq++;
3172 }
3173
3174 #ifdef TRUNCATE_BLOCK
3175 /* Try to guess if it is profitable to stop the current block here */
3176 if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
3177 /* Compute an upper bound for the compressed length */
3178 ulg out_length = (ulg)s->last_lit*8L;
3179 ulg in_length = (ulg)((long)s->strstart - s->block_start);
3180 int dcode;
3181 for (dcode = 0; dcode < D_CODES; dcode++) {
3182 out_length += (ulg)s->dyn_dtree[dcode].Freq *
3183 (5L+extra_dbits[dcode]);
3184 }
3185 out_length >>= 3;
3186 Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
3187 s->last_lit, in_length, out_length,
3188 100L - out_length*100L/in_length));
3189 if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
3190 }
3191 #endif
3192 return (s->last_lit == s->lit_bufsize-1);
3193 /* We avoid equality with lit_bufsize because of wraparound at 64K
3194 * on 16 bit machines and because stored blocks are restricted to
3195 * 64K-1 bytes.
3196 */
3197 }
3198
3199 /* ===========================================================================
3200 * Send the block data compressed using the given Huffman trees
3201 */
3202 local void compress_block(s, ltree, dtree)
3203 deflate_state *s;
3204 ct_data *ltree; /* literal tree */
3205 ct_data *dtree; /* distance tree */
3206 {
3207 unsigned dist; /* distance of matched string */
3208 int lc; /* match length or unmatched char (if dist == 0) */
3209 unsigned lx = 0; /* running index in l_buf */
3210 unsigned code; /* the code to send */
3211 int extra; /* number of extra bits to send */
3212
3213 if (s->last_lit != 0) do {
3214 dist = s->d_buf[lx];
3215 lc = s->l_buf[lx++];
3216 if (dist == 0) {
3217 send_code(s, lc, ltree); /* send a literal byte */
3218 Tracecv(isgraph(lc), (stderr," '%c' ", lc));
3219 } else {
3220 /* Here, lc is the match length - MIN_MATCH */
3221 code = _length_code[lc];
3222 send_code(s, code+LITERALS+1, ltree); /* send the length code */
3223 extra = extra_lbits[code];
3224 if (extra != 0) {
3225 lc -= base_length[code];
3226 send_bits(s, lc, extra); /* send the extra length bits */
3227 }
3228 dist--; /* dist is now the match distance - 1 */
3229 code = d_code(dist);
3230 Assert (code < D_CODES, "bad d_code");
3231
3232 send_code(s, code, dtree); /* send the distance code */
3233 extra = extra_dbits[code];
3234 if (extra != 0) {
3235 dist -= base_dist[code];
3236 send_bits(s, dist, extra); /* send the extra distance bits */
3237 }
3238 } /* literal or match pair ? */
3239
3240 /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
3241 Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");
3242
3243 } while (lx < s->last_lit);
3244
3245 send_code(s, END_BLOCK, ltree);
3246 s->last_eob_len = ltree[END_BLOCK].Len;
3247 }
3248
3249 /* ===========================================================================
3250 * Set the data type to ASCII or BINARY, using a crude approximation:
3251 * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
3252 * IN assertion: the fields freq of dyn_ltree are set and the total of all
3253 * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
3254 */
3255 local void set_data_type(s)
3256 deflate_state *s;
3257 {
3258 int n = 0;
3259 unsigned ascii_freq = 0;
3260 unsigned bin_freq = 0;
3261 while (n < 7) bin_freq += s->dyn_ltree[n++].Freq;
3262 while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq;
3263 while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
3264 s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);
3265 }
3266
3267 /* ===========================================================================
3268 * Reverse the first len bits of a code, using straightforward code (a faster
3269 * method would use a table)
3270 * IN assertion: 1 <= len <= 15
3271 */
3272 local unsigned bi_reverse(code, len)
3273 unsigned code; /* the value to invert */
3274 int len; /* its bit length */
3275 {
3276 unsigned res = 0;
3277 do {
3278 res |= code & 1;
3279 code >>= 1, res <<= 1;
3280 } while (--len > 0);
3281 return res >> 1;
3282 }
3283
3284 /* ===========================================================================
3285 * Flush the bit buffer, keeping at most 7 bits in it.
3286 */
3287 local void bi_flush(s)
3288 deflate_state *s;
3289 {
3290 if (s->bi_valid == 16) {
3291 put_short(s, s->bi_buf);
3292 s->bi_buf = 0;
3293 s->bi_valid = 0;
3294 } else if (s->bi_valid >= 8) {
3295 put_byte(s, (Byte)s->bi_buf);
3296 s->bi_buf >>= 8;
3297 s->bi_valid -= 8;
3298 }
3299 }
3300
3301 /* ===========================================================================
3302 * Flush the bit buffer and align the output on a byte boundary
3303 */
3304 local void bi_windup(s)
3305 deflate_state *s;
3306 {
3307 if (s->bi_valid > 8) {
3308 put_short(s, s->bi_buf);
3309 } else if (s->bi_valid > 0) {
3310 put_byte(s, (Byte)s->bi_buf);
3311 }
3312 s->bi_buf = 0;
3313 s->bi_valid = 0;
3314 #ifdef DEBUG_ZLIB
3315 s->bits_sent = (s->bits_sent+7) & ~7;
3316 #endif
3317 }
3318
3319 /* ===========================================================================
3320 * Copy a stored block, storing first the length and its
3321 * one's complement if requested.
3322 */
3323 local void copy_block(s, buf, len, header)
3324 deflate_state *s;
3325 charf *buf; /* the input data */
3326 unsigned len; /* its length */
3327 int header; /* true if block header must be written */
3328 {
3329 bi_windup(s); /* align on byte boundary */
3330 s->last_eob_len = 8; /* enough lookahead for inflate */
3331
3332 if (header) {
3333 put_short(s, (ush)len);
3334 put_short(s, (ush)~len);
3335 #ifdef DEBUG_ZLIB
3336 s->bits_sent += 2*16;
3337 #endif
3338 }
3339 #ifdef DEBUG_ZLIB
3340 s->bits_sent += (ulg)len<<3;
3341 #endif
3342 /* bundle up the put_byte(s, *buf++) calls */
3343 zmemcpy(&s->pending_buf[s->pending], buf, len);
3344 s->pending += len;
3345 }
3346 /* --- trees.c */
3347
3348 /* +++ inflate.c */
3349
3350 /* inflate.c -- zlib interface to inflate modules
3351 * Copyright (C) 1995-2002 Mark Adler
3352 * For conditions of distribution and use, see copyright notice in zlib.h
3353 */
3354
3355 /* #include "zutil.h" */
3356
3357 /* +++ infblock.h */
3358
3359 /* infblock.h -- header to use infblock.c
3360 * Copyright (C) 1995-2002 Mark Adler
3361 * For conditions of distribution and use, see copyright notice in zlib.h
3362 */
3363
3364 /* WARNING: this file should *not* be used by applications. It is
3365 part of the implementation of the compression library and is
3366 subject to change. Applications should only use zlib.h.
3367 */
3368
3369 struct inflate_blocks_state;
3370 typedef struct inflate_blocks_state FAR inflate_blocks_statef;
3371
3372 extern inflate_blocks_statef * inflate_blocks_new __P((
3373 z_streamp z,
3374 check_func c, /* check function */
3375 uInt w)); /* window size */
3376
3377 extern int inflate_blocks __P((
3378 inflate_blocks_statef *,
3379 z_streamp ,
3380 int)); /* initial return code */
3381
3382 extern void inflate_blocks_reset __P((
3383 inflate_blocks_statef *,
3384 z_streamp ,
3385 uLongf *)); /* check value on output */
3386
3387 extern int inflate_blocks_free __P((
3388 inflate_blocks_statef *,
3389 z_streamp));
3390
3391 extern void inflate_set_dictionary __P((
3392 inflate_blocks_statef *s,
3393 const Bytef *d, /* dictionary */
3394 uInt n)); /* dictionary length */
3395
3396 extern int inflate_blocks_sync_point __P((
3397 inflate_blocks_statef *s));
3398 extern int inflate_addhistory __P((
3399 inflate_blocks_statef *,
3400 z_streamp));
3401
3402 extern int inflate_packet_flush __P((
3403 inflate_blocks_statef *));
3404
3405 /* --- infblock.h */
3406
3407 #ifndef NO_DUMMY_DECL
3408 struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
3409 #endif
3410
3411 typedef enum {
3412 METHOD, /* waiting for method byte */
3413 FLAG, /* waiting for flag byte */
3414 DICT4, /* four dictionary check bytes to go */
3415 DICT3, /* three dictionary check bytes to go */
3416 DICT2, /* two dictionary check bytes to go */
3417 DICT1, /* one dictionary check byte to go */
3418 DICT0, /* waiting for inflateSetDictionary */
3419 BLOCKS, /* decompressing blocks */
3420 CHECK4, /* four check bytes to go */
3421 CHECK3, /* three check bytes to go */
3422 CHECK2, /* two check bytes to go */
3423 CHECK1, /* one check byte to go */
3424 DONE, /* finished check, done */
3425 BAD} /* got an error--stay here */
3426 inflate_mode;
3427
3428 /* inflate private state */
3429 struct internal_state {
3430
3431 /* mode */
3432 inflate_mode mode; /* current inflate mode */
3433
3434 /* mode dependent information */
3435 union {
3436 uInt method; /* if FLAGS, method byte */
3437 struct {
3438 uLong was; /* computed check value */
3439 uLong need; /* stream check value */
3440 } check; /* if CHECK, check values to compare */
3441 uInt marker; /* if BAD, inflateSync's marker bytes count */
3442 } sub; /* submode */
3443
3444 /* mode independent information */
3445 int nowrap; /* flag for no wrapper */
3446 uInt wbits; /* log2(window size) (8..15, defaults to 15) */
3447 inflate_blocks_statef
3448 *blocks; /* current inflate_blocks state */
3449
3450 };
3451
3452
3453 int ZEXPORT inflateReset(z)
3454 z_streamp z;
3455 {
3456 if (z == Z_NULL || z->state == Z_NULL)
3457 return Z_STREAM_ERROR;
3458 z->total_in = z->total_out = 0;
3459 z->msg = Z_NULL;
3460 z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
3461 inflate_blocks_reset(z->state->blocks, z, Z_NULL);
3462 Tracev((stderr, "inflate: reset\n"));
3463 return Z_OK;
3464 }
3465
3466
3467 int ZEXPORT inflateEnd(z)
3468 z_streamp z;
3469 {
3470 if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
3471 return Z_STREAM_ERROR;
3472 if (z->state->blocks != Z_NULL)
3473 inflate_blocks_free(z->state->blocks, z);
3474 ZFREE(z, z->state);
3475 z->state = Z_NULL;
3476 Tracev((stderr, "inflate: end\n"));
3477 return Z_OK;
3478 }
3479
3480
3481 int ZEXPORT inflateInit2_(z, w, version, stream_size)
3482 z_streamp z;
3483 int w;
3484 const char *version;
3485 int stream_size;
3486 {
3487 if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
3488 stream_size != sizeof(z_stream))
3489 return Z_VERSION_ERROR;
3490
3491 /* initialize state */
3492 if (z == Z_NULL)
3493 return Z_STREAM_ERROR;
3494 z->msg = Z_NULL;
3495 #ifndef NO_ZCFUNCS
3496 if (z->zalloc == Z_NULL)
3497 {
3498 z->zalloc = zcalloc;
3499 z->opaque = (voidpf)0;
3500 }
3501 if (z->zfree == Z_NULL) z->zfree = zcfree;
3502 #endif
3503 if ((z->state = (struct internal_state FAR *)
3504 ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
3505 return Z_MEM_ERROR;
3506 z->state->blocks = Z_NULL;
3507
3508 /* handle undocumented nowrap option (no zlib header or check) */
3509 z->state->nowrap = 0;
3510 if (w < 0)
3511 {
3512 w = - w;
3513 z->state->nowrap = 1;
3514 }
3515
3516 /* set window size */
3517 if (w < 8 || w > 15)
3518 {
3519 inflateEnd(z);
3520 return Z_STREAM_ERROR;
3521 }
3522 z->state->wbits = (uInt)w;
3523
3524 /* create inflate_blocks state */
3525 if ((z->state->blocks =
3526 inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
3527 == Z_NULL)
3528 {
3529 inflateEnd(z);
3530 return Z_MEM_ERROR;
3531 }
3532 Tracev((stderr, "inflate: allocated\n"));
3533
3534 /* reset state */
3535 inflateReset(z);
3536 return Z_OK;
3537 }
3538
3539
3540 int ZEXPORT inflateInit_(z, version, stream_size)
3541 z_streamp z;
3542 const char *version;
3543 int stream_size;
3544 {
3545 return inflateInit2_(z, DEF_WBITS, version, stream_size);
3546 }
3547
3548
3549 #define NEEDBYTE {if(z->avail_in==0)goto empty;r=Z_OK;}
3550 #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
3551
3552 int ZEXPORT inflate(z, f)
3553 z_streamp z;
3554 int f;
3555 {
3556 int r, r2;
3557 uInt b;
3558
3559 if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
3560 return Z_STREAM_ERROR;
3561 r2 = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
3562 r = Z_BUF_ERROR;
3563 while (1) switch (z->state->mode)
3564 {
3565 case METHOD:
3566 NEEDBYTE
3567 if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
3568 {
3569 z->state->mode = BAD;
3570 z->msg = (char*)"unknown compression method";
3571 z->state->sub.marker = 5; /* can't try inflateSync */
3572 break;
3573 }
3574 if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
3575 {
3576 z->state->mode = BAD;
3577 z->msg = (char*)"invalid window size";
3578 z->state->sub.marker = 5; /* can't try inflateSync */
3579 break;
3580 }
3581 z->state->mode = FLAG;
3582 case FLAG:
3583 NEEDBYTE
3584 b = NEXTBYTE;
3585 if (((z->state->sub.method << 8) + b) % 31)
3586 {
3587 z->state->mode = BAD;
3588 z->msg = (char*)"incorrect header check";
3589 z->state->sub.marker = 5; /* can't try inflateSync */
3590 break;
3591 }
3592 Tracev((stderr, "inflate: zlib header ok\n"));
3593 if (!(b & PRESET_DICT))
3594 {
3595 z->state->mode = BLOCKS;
3596 break;
3597 }
3598 z->state->mode = DICT4;
3599 case DICT4:
3600 NEEDBYTE
3601 z->state->sub.check.need = (uLong)NEXTBYTE << 24;
3602 z->state->mode = DICT3;
3603 case DICT3:
3604 NEEDBYTE
3605 z->state->sub.check.need += (uLong)NEXTBYTE << 16;
3606 z->state->mode = DICT2;
3607 case DICT2:
3608 NEEDBYTE
3609 z->state->sub.check.need += (uLong)NEXTBYTE << 8;
3610 z->state->mode = DICT1;
3611 case DICT1:
3612 NEEDBYTE
3613 z->state->sub.check.need += (uLong)NEXTBYTE;
3614 z->adler = z->state->sub.check.need;
3615 z->state->mode = DICT0;
3616 return Z_NEED_DICT;
3617 case DICT0:
3618 z->state->mode = BAD;
3619 z->msg = (char*)"need dictionary";
3620 z->state->sub.marker = 0; /* can try inflateSync */
3621 return Z_STREAM_ERROR;
3622 case BLOCKS:
3623 r = inflate_blocks(z->state->blocks, z, r);
3624 if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
3625 r = inflate_packet_flush(z->state->blocks);
3626 if (r == Z_DATA_ERROR)
3627 {
3628 z->state->mode = BAD;
3629 z->state->sub.marker = 0; /* can try inflateSync */
3630 break;
3631 }
3632 if (r == Z_OK)
3633 r = r2;
3634 if (r != Z_STREAM_END)
3635 return r;
3636 r = r2;
3637 inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
3638 if (z->state->nowrap)
3639 {
3640 z->state->mode = DONE;
3641 break;
3642 }
3643 z->state->mode = CHECK4;
3644 case CHECK4:
3645 NEEDBYTE
3646 z->state->sub.check.need = (uLong)NEXTBYTE << 24;
3647 z->state->mode = CHECK3;
3648 case CHECK3:
3649 NEEDBYTE
3650 z->state->sub.check.need += (uLong)NEXTBYTE << 16;
3651 z->state->mode = CHECK2;
3652 case CHECK2:
3653 NEEDBYTE
3654 z->state->sub.check.need += (uLong)NEXTBYTE << 8;
3655 z->state->mode = CHECK1;
3656 case CHECK1:
3657 NEEDBYTE
3658 z->state->sub.check.need += (uLong)NEXTBYTE;
3659
3660 if (z->state->sub.check.was != z->state->sub.check.need)
3661 {
3662 z->state->mode = BAD;
3663 z->msg = (char*)"incorrect data check";
3664 z->state->sub.marker = 5; /* can't try inflateSync */
3665 break;
3666 }
3667 Tracev((stderr, "inflate: zlib check ok\n"));
3668 z->state->mode = DONE;
3669 case DONE:
3670 return Z_STREAM_END;
3671 case BAD:
3672 return Z_DATA_ERROR;
3673 default:
3674 return Z_STREAM_ERROR;
3675 }
3676 empty:
3677 if (f != Z_PACKET_FLUSH)
3678 return r;
3679 z->state->mode = BAD;
3680 z->msg = (char *)"need more for packet flush";
3681 z->state->sub.marker = 0;
3682 return Z_DATA_ERROR;
3683 }
3684
3685
3686 int ZEXPORT inflateSetDictionary(z, dictionary, dictLength)
3687 z_streamp z;
3688 const Bytef *dictionary;
3689 uInt dictLength;
3690 {
3691 uInt length = dictLength;
3692
3693 if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0)
3694 return Z_STREAM_ERROR;
3695
3696 if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR;
3697 z->adler = 1L;
3698
3699 if (length >= ((uInt)1<<z->state->wbits))
3700 {
3701 length = (1<<z->state->wbits)-1;
3702 dictionary += dictLength - length;
3703 }
3704 inflate_set_dictionary(z->state->blocks, dictionary, length);
3705 z->state->mode = BLOCKS;
3706 return Z_OK;
3707 }
3708
3709 /*
3710 * This subroutine adds the data at next_in/avail_in to the output history
3711 * without performing any output. The output buffer must be "caught up";
3712 * i.e. no pending output (hence s->read equals s->write), and the state must
3713 * be BLOCKS (i.e. we should be willing to see the start of a series of
3714 * BLOCKS). On exit, the output will also be caught up, and the checksum
3715 * will have been updated if need be.
3716 */
3717
3718 int inflateIncomp(z)
3719 z_stream *z;
3720 {
3721 if (z->state->mode != BLOCKS)
3722 return Z_DATA_ERROR;
3723 return inflate_addhistory(z->state->blocks, z);
3724 }
3725
3726 int ZEXPORT inflateSync(z)
3727 z_streamp z;
3728 {
3729 uInt n; /* number of bytes to look at */
3730 Bytef *p; /* pointer to bytes */
3731 uInt m; /* number of marker bytes found in a row */
3732 uLong r, w; /* temporaries to save total_in and total_out */
3733
3734 /* set up */
3735 if (z == Z_NULL || z->state == Z_NULL)
3736 return Z_STREAM_ERROR;
3737 if (z->state->mode != BAD)
3738 {
3739 z->state->mode = BAD;
3740 z->state->sub.marker = 0;
3741 }
3742 if ((n = z->avail_in) == 0)
3743 return Z_BUF_ERROR;
3744 p = z->next_in;
3745 m = z->state->sub.marker;
3746
3747 /* search */
3748 while (n && m < 4)
3749 {
3750 static const Byte mark[4] = {0, 0, 0xff, 0xff};
3751 if (*p == mark[m])
3752 m++;
3753 else if (*p)
3754 m = 0;
3755 else
3756 m = 4 - m;
3757 p++, n--;
3758 }
3759
3760 /* restore */
3761 z->total_in += p - z->next_in;
3762 z->next_in = p;
3763 z->avail_in = n;
3764 z->state->sub.marker = m;
3765
3766 /* return no joy or set up to restart on a new block */
3767 if (m != 4)
3768 return Z_DATA_ERROR;
3769 r = z->total_in; w = z->total_out;
3770 inflateReset(z);
3771 z->total_in = r; z->total_out = w;
3772 z->state->mode = BLOCKS;
3773 return Z_OK;
3774 }
3775
3776
3777 /* Returns true if inflate is currently at the end of a block generated
3778 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
3779 * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
3780 * but removes the length bytes of the resulting empty stored block. When
3781 * decompressing, PPP checks that at the end of input packet, inflate is
3782 * waiting for these length bytes.
3783 */
3784 int ZEXPORT inflateSyncPoint(z)
3785 z_streamp z;
3786 {
3787 if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
3788 return Z_STREAM_ERROR;
3789 return inflate_blocks_sync_point(z->state->blocks);
3790 }
3791 #undef NEEDBYTE
3792 #undef NEXTBYTE
3793 /* --- inflate.c */
3794
3795 /* +++ infblock.c */
3796
3797 /* infblock.c -- interpret and process block types to last block
3798 * Copyright (C) 1995-2002 Mark Adler
3799 * For conditions of distribution and use, see copyright notice in zlib.h
3800 */
3801
3802 /* #include "zutil.h" */
3803 /* #include "infblock.h" */
3804
3805 /* +++ inftrees.h */
3806
3807 /* inftrees.h -- header to use inftrees.c
3808 * Copyright (C) 1995-2002 Mark Adler
3809 * For conditions of distribution and use, see copyright notice in zlib.h
3810 */
3811
3812 /* WARNING: this file should *not* be used by applications. It is
3813 part of the implementation of the compression library and is
3814 subject to change. Applications should only use zlib.h.
3815 */
3816
3817 /* Huffman code lookup table entry--this entry is four bytes for machines
3818 that have 16-bit pointers (e.g. PC's in the small or medium model). */
3819
3820 typedef struct inflate_huft_s FAR inflate_huft;
3821
3822 struct inflate_huft_s {
3823 union {
3824 struct {
3825 Byte Exop; /* number of extra bits or operation */
3826 Byte Bits; /* number of bits in this code or subcode */
3827 } what;
3828 uInt pad; /* pad structure to a power of 2 (4 bytes for */
3829 } word; /* 16-bit, 8 bytes for 32-bit int's) */
3830 uInt base; /* literal, length base, distance base,
3831 or table offset */
3832 };
3833
3834 /* Maximum size of dynamic tree. The maximum found in a long but non-
3835 exhaustive search was 1004 huft structures (850 for length/literals
3836 and 154 for distances, the latter actually the result of an
3837 exhaustive search). The actual maximum is not known, but the
3838 value below is more than safe. */
3839 #define MANY 1440
3840
3841 extern int inflate_trees_bits __P((
3842 uIntf *, /* 19 code lengths */
3843 uIntf *, /* bits tree desired/actual depth */
3844 inflate_huft * FAR *, /* bits tree result */
3845 inflate_huft *, /* space for trees */
3846 z_streamp)); /* for messages */
3847
3848 extern int inflate_trees_dynamic __P((
3849 uInt, /* number of literal/length codes */
3850 uInt, /* number of distance codes */
3851 uIntf *, /* that many (total) code lengths */
3852 uIntf *, /* literal desired/actual bit depth */
3853 uIntf *, /* distance desired/actual bit depth */
3854 inflate_huft * FAR *, /* literal/length tree result */
3855 inflate_huft * FAR *, /* distance tree result */
3856 inflate_huft *, /* space for trees */
3857 z_streamp)); /* for messages */
3858
3859 extern int inflate_trees_fixed __P((
3860 uIntf *, /* literal desired/actual bit depth */
3861 uIntf *, /* distance desired/actual bit depth */
3862 inflate_huft * FAR *, /* literal/length tree result */
3863 inflate_huft * FAR *, /* distance tree result */
3864 z_streamp)); /* for memory allocation */
3865 /* --- inftrees.h */
3866
3867 /* +++ infcodes.h */
3868
3869 /* infcodes.h -- header to use infcodes.c
3870 * Copyright (C) 1995-2002 Mark Adler
3871 * For conditions of distribution and use, see copyright notice in zlib.h
3872 */
3873
3874 /* WARNING: this file should *not* be used by applications. It is
3875 part of the implementation of the compression library and is
3876 subject to change. Applications should only use zlib.h.
3877 */
3878
3879 struct inflate_codes_state;
3880 typedef struct inflate_codes_state FAR inflate_codes_statef;
3881
3882 extern inflate_codes_statef *inflate_codes_new __P((
3883 uInt, uInt,
3884 inflate_huft *, inflate_huft *,
3885 z_streamp ));
3886
3887 extern int inflate_codes __P((
3888 inflate_blocks_statef *,
3889 z_streamp ,
3890 int));
3891
3892 extern void inflate_codes_free __P((
3893 inflate_codes_statef *,
3894 z_streamp ));
3895
3896 /* --- infcodes.h */
3897
3898 /* +++ infutil.h */
3899
3900 /* infutil.h -- types and macros common to blocks and codes
3901 * Copyright (C) 1995-2002 Mark Adler
3902 * For conditions of distribution and use, see copyright notice in zlib.h
3903 */
3904
3905 /* WARNING: this file should *not* be used by applications. It is
3906 part of the implementation of the compression library and is
3907 subject to change. Applications should only use zlib.h.
3908 */
3909
3910 #ifndef _INFUTIL_H
3911 #define _INFUTIL_H
3912
3913 typedef enum {
3914 TYPE, /* get type bits (3, including end bit) */
3915 LENS, /* get lengths for stored */
3916 STORED, /* processing stored block */
3917 TABLE, /* get table lengths */
3918 BTREE, /* get bit lengths tree for a dynamic block */
3919 DTREE, /* get length, distance trees for a dynamic block */
3920 CODES, /* processing fixed or dynamic block */
3921 DRY, /* output remaining window bytes */
3922 DONEB, /* finished last block, done */
3923 BADB} /* got a data error--stuck here */
3924 inflate_block_mode;
3925
3926 /* inflate blocks semi-private state */
3927 struct inflate_blocks_state {
3928
3929 /* mode */
3930 inflate_block_mode mode; /* current inflate_block mode */
3931
3932 /* mode dependent information */
3933 union {
3934 uInt left; /* if STORED, bytes left to copy */
3935 struct {
3936 uInt table; /* table lengths (14 bits) */
3937 uInt index; /* index into blens (or border) */
3938 uIntf *blens; /* bit lengths of codes */
3939 uInt bb; /* bit length tree depth */
3940 inflate_huft *tb; /* bit length decoding tree */
3941 } trees; /* if DTREE, decoding info for trees */
3942 struct {
3943 inflate_codes_statef
3944 *codes;
3945 } decode; /* if CODES, current state */
3946 } sub; /* submode */
3947 uInt last; /* true if this block is the last block */
3948
3949 /* mode independent information */
3950 uInt bitk; /* bits in bit buffer */
3951 uLong bitb; /* bit buffer */
3952 inflate_huft *hufts; /* single malloc for tree space */
3953 Bytef *window; /* sliding window */
3954 Bytef *end; /* one byte after sliding window */
3955 Bytef *read; /* window read pointer */
3956 Bytef *write; /* window write pointer */
3957 check_func checkfn; /* check function */
3958 uLong check; /* check on output */
3959
3960 };
3961
3962
3963 /* defines for inflate input/output */
3964 /* update pointers and return */
3965 #define UPDBITS {s->bitb=b;s->bitk=k;}
3966 #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
3967 #define UPDOUT {s->write=q;}
3968 #define UPDATE {UPDBITS UPDIN UPDOUT}
3969 #define LEAVE {UPDATE return inflate_flush(s,z,r);}
3970 /* get bytes and bits */
3971 #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
3972 #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
3973 #define NEXTBYTE (n--,*p++)
3974 #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
3975 #define DUMPBITS(j) {b>>=(j);k-=(j);}
3976 /* output bytes */
3977 #define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
3978 #define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
3979 #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
3980 #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
3981 #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
3982 #define OUTBYTE(a) {*q++=(Byte)(a);m--;}
3983 /* load local pointers */
3984 #define LOAD {LOADIN LOADOUT}
3985
3986 /* masks for lower bits (size given to avoid silly warnings with Visual C++) */
3987 extern uInt inflate_mask[17];
3988
3989 /* copy as much as possible from the sliding window to the output area */
3990 extern int inflate_flush __P((
3991 inflate_blocks_statef *,
3992 z_streamp ,
3993 int));
3994
3995 #ifndef NO_DUMMY_DECL
3996 struct internal_state {int dummy;}; /* for buggy compilers */
3997 #endif
3998
3999 #endif
4000 /* --- infutil.h */
4001
4002 #ifndef NO_DUMMY_DECL
4003 struct inflate_codes_state {int dummy;}; /* for buggy compilers */
4004 #endif
4005
4006 /* simplify the use of the inflate_huft type with some defines */
4007 #define exop word.what.Exop
4008 #define bits word.what.Bits
4009
4010 /* Table for deflate from PKZIP's appnote.txt. */
4011 local const uInt border[] = { /* Order of the bit length code lengths */
4012 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
4013
4014 /*
4015 Notes beyond the 1.93a appnote.txt:
4016
4017 1. Distance pointers never point before the beginning of the output
4018 stream.
4019 2. Distance pointers can point back across blocks, up to 32k away.
4020 3. There is an implied maximum of 7 bits for the bit length table and
4021 15 bits for the actual data.
4022 4. If only one code exists, then it is encoded using one bit. (Zero
4023 would be more efficient, but perhaps a little confusing.) If two
4024 codes exist, they are coded using one bit each (0 and 1).
4025 5. There is no way of sending zero distance codes--a dummy must be
4026 sent if there are none. (History: a pre 2.0 version of PKZIP would
4027 store blocks with no distance codes, but this was discovered to be
4028 too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
4029 zero distance codes, which is sent as one code of zero bits in
4030 length.
4031 6. There are up to 286 literal/length codes. Code 256 represents the
4032 end-of-block. Note however that the static length tree defines
4033 288 codes just to fill out the Huffman codes. Codes 286 and 287
4034 cannot be used though, since there is no length base or extra bits
4035 defined for them. Similarily, there are up to 30 distance codes.
4036 However, static trees define 32 codes (all 5 bits) to fill out the
4037 Huffman codes, but the last two had better not show up in the data.
4038 7. Unzip can check dynamic Huffman blocks for complete code sets.
4039 The exception is that a single code would not be complete (see #4).
4040 8. The five bits following the block type is really the number of
4041 literal codes sent minus 257.
4042 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
4043 (1+6+6). Therefore, to output three times the length, you output
4044 three codes (1+1+1), whereas to output four times the same length,
4045 you only need two codes (1+3). Hmm.
4046 10. In the tree reconstruction algorithm, Code = Code + Increment
4047 only if BitLength(i) is not zero. (Pretty obvious.)
4048 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
4049 12. Note: length code 284 can represent 227-258, but length code 285
4050 really is 258. The last length deserves its own, short code
4051 since it gets used a lot in very redundant files. The length
4052 258 is special since 258 - 3 (the min match length) is 255.
4053 13. The literal/length and distance code bit lengths are read as a
4054 single stream of lengths. It is possible (and advantageous) for
4055 a repeat code (16, 17, or 18) to go across the boundary between
4056 the two sets of lengths.
4057 */
4058
4059
4060 void inflate_blocks_reset(s, z, c)
4061 inflate_blocks_statef *s;
4062 z_streamp z;
4063 uLongf *c;
4064 {
4065 if (c != Z_NULL)
4066 *c = s->check;
4067 if (s->mode == BTREE || s->mode == DTREE)
4068 ZFREE(z, s->sub.trees.blens);
4069 if (s->mode == CODES)
4070 inflate_codes_free(s->sub.decode.codes, z);
4071 s->mode = TYPE;
4072 s->bitk = 0;
4073 s->bitb = 0;
4074 s->read = s->write = s->window;
4075 if (s->checkfn != Z_NULL)
4076 z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
4077 Tracev((stderr, "inflate: blocks reset\n"));
4078 }
4079
4080
4081 inflate_blocks_statef *inflate_blocks_new(z, c, w)
4082 z_streamp z;
4083 check_func c;
4084 uInt w;
4085 {
4086 inflate_blocks_statef *s;
4087
4088 if ((s = (inflate_blocks_statef *)ZALLOC
4089 (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
4090 return s;
4091 if ((s->hufts =
4092 (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
4093 {
4094 ZFREE(z, s);
4095 return Z_NULL;
4096 }
4097 if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
4098 {
4099 ZFREE(z, s->hufts);
4100 ZFREE(z, s);
4101 return Z_NULL;
4102 }
4103 s->end = s->window + w;
4104 s->checkfn = c;
4105 s->mode = TYPE;
4106 Tracev((stderr, "inflate: blocks allocated\n"));
4107 inflate_blocks_reset(s, z, Z_NULL);
4108 return s;
4109 }
4110
4111
4112 int inflate_blocks(s, z, r)
4113 inflate_blocks_statef *s;
4114 z_streamp z;
4115 int r;
4116 {
4117 uInt t; /* temporary storage */
4118 uLong b; /* bit buffer */
4119 uInt k; /* bits in bit buffer */
4120 Bytef *p; /* input data pointer */
4121 uInt n; /* bytes available there */
4122 Bytef *q; /* output window write pointer */
4123 uInt m; /* bytes to end of window or read pointer */
4124
4125 /* copy input/output information to locals (UPDATE macro restores) */
4126 LOAD
4127
4128 /* process input based on current state */
4129 while (1) switch (s->mode)
4130 {
4131 case TYPE:
4132 NEEDBITS(3)
4133 t = (uInt)b & 7;
4134 s->last = t & 1;
4135 switch (t >> 1)
4136 {
4137 case 0: /* stored */
4138 Tracev((stderr, "inflate: stored block%s\n",
4139 s->last ? " (last)" : ""));
4140 DUMPBITS(3)
4141 t = k & 7; /* go to byte boundary */
4142 DUMPBITS(t)
4143 s->mode = LENS; /* get length of stored block */
4144 break;
4145 case 1: /* fixed */
4146 Tracev((stderr, "inflate: fixed codes block%s\n",
4147 s->last ? " (last)" : ""));
4148 {
4149 uInt bl, bd;
4150 inflate_huft *tl, *td;
4151
4152 inflate_trees_fixed(&bl, &bd, &tl, &td, z);
4153 s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
4154 if (s->sub.decode.codes == Z_NULL)
4155 {
4156 r = Z_MEM_ERROR;
4157 LEAVE
4158 }
4159 }
4160 DUMPBITS(3)
4161 s->mode = CODES;
4162 break;
4163 case 2: /* dynamic */
4164 Tracev((stderr, "inflate: dynamic codes block%s\n",
4165 s->last ? " (last)" : ""));
4166 DUMPBITS(3)
4167 s->mode = TABLE;
4168 break;
4169 case 3: /* illegal */
4170 DUMPBITS(3)
4171 s->mode = BADB;
4172 z->msg = (char*)"invalid block type";
4173 r = Z_DATA_ERROR;
4174 LEAVE
4175 }
4176 break;
4177 case LENS:
4178 NEEDBITS(32)
4179 if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
4180 {
4181 s->mode = BADB;
4182 z->msg = (char*)"invalid stored block lengths";
4183 r = Z_DATA_ERROR;
4184 LEAVE
4185 }
4186 s->sub.left = (uInt)b & 0xffff;
4187 b = k = 0; /* dump bits */
4188 Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
4189 s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
4190 break;
4191 case STORED:
4192 if (n == 0)
4193 LEAVE
4194 NEEDOUT
4195 t = s->sub.left;
4196 if (t > n) t = n;
4197 if (t > m) t = m;
4198 zmemcpy(q, p, t);
4199 p += t; n -= t;
4200 q += t; m -= t;
4201 if ((s->sub.left -= t) != 0)
4202 break;
4203 Tracev((stderr, "inflate: stored end, %lu total out\n",
4204 z->total_out + (q >= s->read ? q - s->read :
4205 (s->end - s->read) + (q - s->window))));
4206 s->mode = s->last ? DRY : TYPE;
4207 break;
4208 case TABLE:
4209 NEEDBITS(14)
4210 s->sub.trees.table = t = (uInt)b & 0x3fff;
4211 #ifndef PKZIP_BUG_WORKAROUND
4212 if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
4213 {
4214 s->mode = BADB;
4215 z->msg = (char*)"too many length or distance symbols";
4216 r = Z_DATA_ERROR;
4217 LEAVE
4218 }
4219 #endif
4220 t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
4221 if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
4222 {
4223 r = Z_MEM_ERROR;
4224 LEAVE
4225 }
4226 DUMPBITS(14)
4227 s->sub.trees.index = 0;
4228 Tracev((stderr, "inflate: table sizes ok\n"));
4229 s->mode = BTREE;
4230 case BTREE:
4231 while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
4232 {
4233 NEEDBITS(3)
4234 s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
4235 DUMPBITS(3)
4236 }
4237 while (s->sub.trees.index < 19)
4238 s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
4239 s->sub.trees.bb = 7;
4240 t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
4241 &s->sub.trees.tb, s->hufts, z);
4242 if (t != Z_OK)
4243 {
4244 r = t;
4245 if (r == Z_DATA_ERROR)
4246 {
4247 ZFREE(z, s->sub.trees.blens);
4248 s->mode = BADB;
4249 }
4250 LEAVE
4251 }
4252 s->sub.trees.index = 0;
4253 Tracev((stderr, "inflate: bits tree ok\n"));
4254 s->mode = DTREE;
4255 case DTREE:
4256 while (t = s->sub.trees.table,
4257 s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
4258 {
4259 inflate_huft *h;
4260 uInt i, j, c;
4261
4262 t = s->sub.trees.bb;
4263 NEEDBITS(t)
4264 h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
4265 t = h->bits;
4266 c = h->base;
4267 if (c < 16)
4268 {
4269 DUMPBITS(t)
4270 s->sub.trees.blens[s->sub.trees.index++] = c;
4271 }
4272 else /* c == 16..18 */
4273 {
4274 i = c == 18 ? 7 : c - 14;
4275 j = c == 18 ? 11 : 3;
4276 NEEDBITS(t + i)
4277 DUMPBITS(t)
4278 j += (uInt)b & inflate_mask[i];
4279 DUMPBITS(i)
4280 i = s->sub.trees.index;
4281 t = s->sub.trees.table;
4282 if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
4283 (c == 16 && i < 1))
4284 {
4285 ZFREE(z, s->sub.trees.blens);
4286 s->mode = BADB;
4287 z->msg = (char*)"invalid bit length repeat";
4288 r = Z_DATA_ERROR;
4289 LEAVE
4290 }
4291 c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
4292 do {
4293 s->sub.trees.blens[i++] = c;
4294 } while (--j);
4295 s->sub.trees.index = i;
4296 }
4297 }
4298 s->sub.trees.tb = Z_NULL;
4299 {
4300 uInt bl, bd;
4301 inflate_huft *tl, *td;
4302 inflate_codes_statef *c;
4303
4304 bl = 9; /* must be <= 9 for lookahead assumptions */
4305 bd = 6; /* must be <= 9 for lookahead assumptions */
4306 t = s->sub.trees.table;
4307 t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
4308 s->sub.trees.blens, &bl, &bd, &tl, &td,
4309 s->hufts, z);
4310 if (t != Z_OK)
4311 {
4312 if (t == (uInt)Z_DATA_ERROR)
4313 {
4314 ZFREE(z, s->sub.trees.blens);
4315 s->mode = BADB;
4316 }
4317 r = t;
4318 LEAVE
4319 }
4320 Tracev((stderr, "inflate: trees ok\n"));
4321 if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
4322 {
4323 r = Z_MEM_ERROR;
4324 LEAVE
4325 }
4326 s->sub.decode.codes = c;
4327 }
4328 ZFREE(z, s->sub.trees.blens);
4329 s->mode = CODES;
4330 case CODES:
4331 UPDATE
4332 if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
4333 return inflate_flush(s, z, r);
4334 r = Z_OK;
4335 inflate_codes_free(s->sub.decode.codes, z);
4336 LOAD
4337 Tracev((stderr, "inflate: codes end, %lu total out\n",
4338 z->total_out + (q >= s->read ? q - s->read :
4339 (s->end - s->read) + (q - s->window))));
4340 if (!s->last)
4341 {
4342 s->mode = TYPE;
4343 break;
4344 }
4345 s->mode = DRY;
4346 case DRY:
4347 FLUSH
4348 if (s->read != s->write)
4349 LEAVE
4350 s->mode = DONEB;
4351 case DONEB:
4352 r = Z_STREAM_END;
4353 LEAVE
4354 case BADB:
4355 r = Z_DATA_ERROR;
4356 LEAVE
4357 default:
4358 r = Z_STREAM_ERROR;
4359 LEAVE
4360 }
4361 }
4362
4363
4364 int inflate_blocks_free(s, z)
4365 inflate_blocks_statef *s;
4366 z_streamp z;
4367 {
4368 inflate_blocks_reset(s, z, Z_NULL);
4369 ZFREE(z, s->window);
4370 ZFREE(z, s->hufts);
4371 ZFREE(z, s);
4372 Tracev((stderr, "inflate: blocks freed\n"));
4373 return Z_OK;
4374 }
4375
4376
4377 void inflate_set_dictionary(s, d, n)
4378 inflate_blocks_statef *s;
4379 const Bytef *d;
4380 uInt n;
4381 {
4382 zmemcpy(s->window, d, n);
4383 s->read = s->write = s->window + n;
4384 }
4385
4386 /*
4387 * This subroutine adds the data at next_in/avail_in to the output history
4388 * without performing any output. The output buffer must be "caught up";
4389 * i.e. no pending output (hence s->read equals s->write), and the state must
4390 * be BLOCKS (i.e. we should be willing to see the start of a series of
4391 * BLOCKS). On exit, the output will also be caught up, and the checksum
4392 * will have been updated if need be.
4393 */
4394 int inflate_addhistory(s, z)
4395 inflate_blocks_statef *s;
4396 z_stream *z;
4397 {
4398 uLong b; /* bit buffer */ /* NOT USED HERE */
4399 uInt k; /* bits in bit buffer */ /* NOT USED HERE */
4400 uInt t; /* temporary storage */
4401 Bytef *p; /* input data pointer */
4402 uInt n; /* bytes available there */
4403 Bytef *q; /* output window write pointer */
4404 uInt m; /* bytes to end of window or read pointer */
4405
4406 if (s->read != s->write)
4407 return Z_STREAM_ERROR;
4408 if (s->mode != TYPE)
4409 return Z_DATA_ERROR;
4410
4411 /* we're ready to rock */
4412 LOAD
4413 /* while there is input ready, copy to output buffer, moving
4414 * pointers as needed.
4415 */
4416 while (n) {
4417 t = n; /* how many to do */
4418 /* is there room until end of buffer? */
4419 if (t > m) t = m;
4420 /* update check information */
4421 if (s->checkfn != Z_NULL)
4422 s->check = (*s->checkfn)(s->check, q, t);
4423 zmemcpy(q, p, t);
4424 q += t;
4425 p += t;
4426 n -= t;
4427 z->total_out += t;
4428 s->read = q; /* drag read pointer forward */
4429 /* WWRAP */ /* expand WWRAP macro by hand to handle s->read */
4430 if (q == s->end) {
4431 s->read = q = s->window;
4432 m = WAVAIL;
4433 }
4434 }
4435 UPDATE
4436 return Z_OK;
4437 }
4438
4439
4440 /*
4441 * At the end of a Deflate-compressed PPP packet, we expect to have seen
4442 * a `stored' block type value but not the (zero) length bytes.
4443 */
4444 int inflate_packet_flush(s)
4445 inflate_blocks_statef *s;
4446 {
4447 if (s->mode != LENS)
4448 return Z_DATA_ERROR;
4449 s->mode = TYPE;
4450 return Z_OK;
4451 }
4452
4453 /* Returns true if inflate is currently at the end of a block generated
4454 * by Z_SYNC_FLUSH or Z_FULL_FLUSH.
4455 * IN assertion: s != Z_NULL
4456 */
4457 int inflate_blocks_sync_point(s)
4458 inflate_blocks_statef *s;
4459 {
4460 return s->mode == LENS;
4461 }
4462 /* --- infblock.c */
4463
4464
4465 /* +++ inftrees.c */
4466
4467 /* inftrees.c -- generate Huffman trees for efficient decoding
4468 * Copyright (C) 1995-2002 Mark Adler
4469 * For conditions of distribution and use, see copyright notice in zlib.h
4470 */
4471
4472 /* #include "zutil.h" */
4473 /* #include "inftrees.h" */
4474
4475 #if !defined(BUILDFIXED) && !defined(STDC)
4476 # define BUILDFIXED /* non ANSI compilers may not accept inffixed.h */
4477 #endif
4478
4479 const char inflate_copyright[] =
4480 " inflate 1.1.4 Copyright 1995-2002 Mark Adler ";
4481 /*
4482 If you use the zlib library in a product, an acknowledgment is welcome
4483 in the documentation of your product. If for some reason you cannot
4484 include such an acknowledgment, I would appreciate that you keep this
4485 copyright string in the executable of your product.
4486 */
4487
4488 #ifndef NO_DUMMY_DECL
4489 struct internal_state {int dummy;}; /* for buggy compilers */
4490 #endif
4491
4492 /* simplify the use of the inflate_huft type with some defines */
4493 #define exop word.what.Exop
4494 #define bits word.what.Bits
4495
4496
4497 local int huft_build __P((
4498 uIntf *, /* code lengths in bits */
4499 uInt, /* number of codes */
4500 uInt, /* number of "simple" codes */
4501 const uIntf *, /* list of base values for non-simple codes */
4502 const uIntf *, /* list of extra bits for non-simple codes */
4503 inflate_huft * FAR*,/* result: starting table */
4504 uIntf *, /* maximum lookup bits (returns actual) */
4505 inflate_huft *, /* space for trees */
4506 uInt *, /* hufts used in space */
4507 uIntf * )); /* space for values */
4508
4509 /* Tables for deflate from PKZIP's appnote.txt. */
4510 local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
4511 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
4512 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
4513 /* see note #13 above about 258 */
4514 local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
4515 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
4516 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
4517 local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
4518 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
4519 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
4520 8193, 12289, 16385, 24577};
4521 local const uInt cpdext[30] = { /* Extra bits for distance codes */
4522 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
4523 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
4524 12, 12, 13, 13};
4525
4526 /*
4527 Huffman code decoding is performed using a multi-level table lookup.
4528 The fastest way to decode is to simply build a lookup table whose
4529 size is determined by the longest code. However, the time it takes
4530 to build this table can also be a factor if the data being decoded
4531 is not very long. The most common codes are necessarily the
4532 shortest codes, so those codes dominate the decoding time, and hence
4533 the speed. The idea is you can have a shorter table that decodes the
4534 shorter, more probable codes, and then point to subsidiary tables for
4535 the longer codes. The time it costs to decode the longer codes is
4536 then traded against the time it takes to make longer tables.
4537
4538 This results of this trade are in the variables lbits and dbits
4539 below. lbits is the number of bits the first level table for literal/
4540 length codes can decode in one step, and dbits is the same thing for
4541 the distance codes. Subsequent tables are also less than or equal to
4542 those sizes. These values may be adjusted either when all of the
4543 codes are shorter than that, in which case the longest code length in
4544 bits is used, or when the shortest code is *longer* than the requested
4545 table size, in which case the length of the shortest code in bits is
4546 used.
4547
4548 There are two different values for the two tables, since they code a
4549 different number of possibilities each. The literal/length table
4550 codes 286 possible values, or in a flat code, a little over eight
4551 bits. The distance table codes 30 possible values, or a little less
4552 than five bits, flat. The optimum values for speed end up being
4553 about one bit more than those, so lbits is 8+1 and dbits is 5+1.
4554 The optimum values may differ though from machine to machine, and
4555 possibly even between compilers. Your mileage may vary.
4556 */
4557
4558
4559 /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
4560 #define BMAX 15 /* maximum bit length of any code */
4561
4562 local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
4563 uIntf *b; /* code lengths in bits (all assumed <= BMAX) */
4564 uInt n; /* number of codes (assumed <= 288) */
4565 uInt s; /* number of simple-valued codes (0..s-1) */
4566 const uIntf *d; /* list of base values for non-simple codes */
4567 const uIntf *e; /* list of extra bits for non-simple codes */
4568 inflate_huft * FAR *t; /* result: starting table */
4569 uIntf *m; /* maximum lookup bits, returns actual */
4570 inflate_huft *hp; /* space for trees */
4571 uInt *hn; /* hufts used in space */
4572 uIntf *v; /* working area: values in order of bit length */
4573 /* Given a list of code lengths and a maximum table size, make a set of
4574 tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
4575 if the given code set is incomplete (the tables are still built in this
4576 case), or Z_DATA_ERROR if the input is invalid. */
4577 {
4578
4579 uInt a; /* counter for codes of length k */
4580 uInt c[BMAX+1]; /* bit length count table */
4581 uInt f; /* i repeats in table every f entries */
4582 int g; /* maximum code length */
4583 int h; /* table level */
4584 uInt i; /* counter, current code */
4585 uInt j; /* counter */
4586 int k; /* number of bits in current code */
4587 int l; /* bits per table (returned in m) */
4588 uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */
4589 uIntf *p; /* pointer into c[], b[], or v[] */
4590 inflate_huft *q; /* points to current table */
4591 struct inflate_huft_s r; /* table entry for structure assignment */
4592 inflate_huft *u[BMAX]; /* table stack */
4593 int w; /* bits before this table == (l * h) */
4594 uInt x[BMAX+1]; /* bit offsets, then code stack */
4595 uIntf *xp; /* pointer into x */
4596 int y; /* number of dummy codes added */
4597 uInt z; /* number of entries in current table */
4598
4599
4600 /* Generate counts for each bit length */
4601 p = c;
4602 #define C0 *p++ = 0;
4603 #define C2 C0 C0 C0 C0
4604 #define C4 C2 C2 C2 C2
4605 C4 /* clear c[]--assume BMAX+1 is 16 */
4606 p = b; i = n;
4607 do {
4608 c[*p++]++; /* assume all entries <= BMAX */
4609 } while (--i);
4610 if (c[0] == n) /* null input--all zero length codes */
4611 {
4612 *t = (inflate_huft *)Z_NULL;
4613 *m = 0;
4614 return Z_OK;
4615 }
4616
4617
4618 /* Find minimum and maximum length, bound *m by those */
4619 l = *m;
4620 for (j = 1; j <= BMAX; j++)
4621 if (c[j])
4622 break;
4623 k = j; /* minimum code length */
4624 if ((uInt)l < j)
4625 l = j;
4626 for (i = BMAX; i; i--)
4627 if (c[i])
4628 break;
4629 g = i; /* maximum code length */
4630 if ((uInt)l > i)
4631 l = i;
4632 *m = l;
4633
4634
4635 /* Adjust last length count to fill out codes, if needed */
4636 for (y = 1 << j; j < i; j++, y <<= 1)
4637 if ((y -= c[j]) < 0)
4638 return Z_DATA_ERROR;
4639 if ((y -= c[i]) < 0)
4640 return Z_DATA_ERROR;
4641 c[i] += y;
4642
4643
4644 /* Generate starting offsets into the value table for each length */
4645 x[1] = j = 0;
4646 p = c + 1; xp = x + 2;
4647 while (--i) { /* note that i == g from above */
4648 *xp++ = (j += *p++);
4649 }
4650
4651
4652 /* Make a table of values in order of bit lengths */
4653 p = b; i = 0;
4654 do {
4655 if ((j = *p++) != 0)
4656 v[x[j]++] = i;
4657 } while (++i < n);
4658 n = x[g]; /* set n to length of v */
4659
4660
4661 /* Generate the Huffman codes and for each, make the table entries */
4662 x[0] = i = 0; /* first Huffman code is zero */
4663 p = v; /* grab values in bit order */
4664 h = -1; /* no tables yet--level -1 */
4665 w = -l; /* bits decoded == (l * h) */
4666 u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */
4667 q = (inflate_huft *)Z_NULL; /* ditto */
4668 z = 0; /* ditto */
4669
4670 /* go through the bit lengths (k already is bits in shortest code) */
4671 for (; k <= g; k++)
4672 {
4673 a = c[k];
4674 while (a--)
4675 {
4676 /* here i is the Huffman code of length k bits for value *p */
4677 /* make tables up to required level */
4678 while (k > w + l)
4679 {
4680 h++;
4681 w += l; /* previous table always l bits */
4682
4683 /* compute minimum size table less than or equal to l bits */
4684 z = g - w;
4685 z = z > (uInt)l ? l : z; /* table size upper limit */
4686 if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
4687 { /* too few codes for k-w bit table */
4688 f -= a + 1; /* deduct codes from patterns left */
4689 xp = c + k;
4690 if (j < z)
4691 while (++j < z) /* try smaller tables up to z bits */
4692 {
4693 if ((f <<= 1) <= *++xp)
4694 break; /* enough codes to use up j bits */
4695 f -= *xp; /* else deduct codes from patterns */
4696 }
4697 }
4698 z = 1 << j; /* table entries for j-bit table */
4699
4700 /* allocate new table */
4701 if (*hn + z > MANY) /* (note: doesn't matter for fixed) */
4702 return Z_DATA_ERROR; /* overflow of MANY */
4703 u[h] = q = hp + *hn;
4704 *hn += z;
4705
4706 /* connect to last table, if there is one */
4707 if (h)
4708 {
4709 x[h] = i; /* save pattern for backing up */
4710 r.bits = (Byte)l; /* bits to dump before this table */
4711 r.exop = (Byte)j; /* bits in this table */
4712 j = i >> (w - l);
4713 r.base = (uInt)(q - u[h-1] - j); /* offset to this table */
4714 u[h-1][j] = r; /* connect to last table */
4715 }
4716 else
4717 *t = q; /* first table is returned result */
4718 }
4719
4720 /* set up table entry in r */
4721 r.bits = (Byte)(k - w);
4722 if (p >= v + n)
4723 r.exop = 128 + 64; /* out of values--invalid code */
4724 else if (*p < s)
4725 {
4726 r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */
4727 r.base = *p++; /* simple code is just the value */
4728 }
4729 else
4730 {
4731 r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
4732 r.base = d[*p++ - s];
4733 }
4734
4735 /* fill code-like entries with r */
4736 f = 1 << (k - w);
4737 for (j = i >> w; j < z; j += f)
4738 q[j] = r;
4739
4740 /* backwards increment the k-bit code i */
4741 for (j = 1 << (k - 1); i & j; j >>= 1)
4742 i ^= j;
4743 i ^= j;
4744
4745 /* backup over finished tables */
4746 mask = (1 << w) - 1; /* needed on HP, cc -O bug */
4747 while ((i & mask) != x[h])
4748 {
4749 h--; /* don't need to update q */
4750 w -= l;
4751 mask = (1 << w) - 1;
4752 }
4753 }
4754 }
4755
4756
4757 /* Return Z_BUF_ERROR if we were given an incomplete table */
4758 return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
4759 }
4760
4761
4762 int inflate_trees_bits(c, bb, tb, hp, z)
4763 uIntf *c; /* 19 code lengths */
4764 uIntf *bb; /* bits tree desired/actual depth */
4765 inflate_huft * FAR *tb; /* bits tree result */
4766 inflate_huft *hp; /* space for trees */
4767 z_streamp z; /* for messages */
4768 {
4769 int r;
4770 uInt hn = 0; /* hufts used in space */
4771 uIntf *v; /* work area for huft_build */
4772
4773 if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
4774 return Z_MEM_ERROR;
4775 r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
4776 tb, bb, hp, &hn, v);
4777 if (r == Z_DATA_ERROR)
4778 z->msg = (char*)"oversubscribed dynamic bit lengths tree";
4779 else if (r == Z_BUF_ERROR || *bb == 0)
4780 {
4781 z->msg = (char*)"incomplete dynamic bit lengths tree";
4782 r = Z_DATA_ERROR;
4783 }
4784 ZFREE(z, v);
4785 return r;
4786 }
4787
4788
4789 int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
4790 uInt nl; /* number of literal/length codes */
4791 uInt nd; /* number of distance codes */
4792 uIntf *c; /* that many (total) code lengths */
4793 uIntf *bl; /* literal desired/actual bit depth */
4794 uIntf *bd; /* distance desired/actual bit depth */
4795 inflate_huft * FAR *tl; /* literal/length tree result */
4796 inflate_huft * FAR *td; /* distance tree result */
4797 inflate_huft *hp; /* space for trees */
4798 z_streamp z; /* for messages */
4799 {
4800 int r;
4801 uInt hn = 0; /* hufts used in space */
4802 uIntf *v; /* work area for huft_build */
4803
4804 /* allocate work area */
4805 if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
4806 return Z_MEM_ERROR;
4807
4808 /* build literal/length tree */
4809 r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
4810 if (r != Z_OK || *bl == 0)
4811 {
4812 if (r == Z_DATA_ERROR)
4813 z->msg = (char*)"oversubscribed literal/length tree";
4814 else if (r != Z_MEM_ERROR)
4815 {
4816 z->msg = (char*)"incomplete literal/length tree";
4817 r = Z_DATA_ERROR;
4818 }
4819 ZFREE(z, v);
4820 return r;
4821 }
4822
4823 /* build distance tree */
4824 r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
4825 if (r != Z_OK || (*bd == 0 && nl > 257))
4826 {
4827 if (r == Z_DATA_ERROR)
4828 z->msg = (char*)"oversubscribed distance tree";
4829 else if (r == Z_BUF_ERROR) {
4830 #ifdef PKZIP_BUG_WORKAROUND
4831 r = Z_OK;
4832 }
4833 #else
4834 z->msg = (char*)"incomplete distance tree";
4835 r = Z_DATA_ERROR;
4836 }
4837 else if (r != Z_MEM_ERROR)
4838 {
4839 z->msg = (char*)"empty distance tree with lengths";
4840 r = Z_DATA_ERROR;
4841 }
4842 ZFREE(z, v);
4843 return r;
4844 #endif
4845 }
4846
4847 /* done */
4848 ZFREE(z, v);
4849 return Z_OK;
4850 }
4851
4852
4853 /* build fixed tables only once--keep them here */
4854 #ifdef BUILDFIXED
4855 local int fixed_built = 0;
4856 #define FIXEDH 544 /* number of hufts used by fixed tables */
4857 local inflate_huft fixed_mem[FIXEDH];
4858 local uInt fixed_bl;
4859 local uInt fixed_bd;
4860 local inflate_huft *fixed_tl;
4861 local inflate_huft *fixed_td;
4862 #else
4863
4864 /* +++ inffixed.h */
4865 /* inffixed.h -- table for decoding fixed codes
4866 * Generated automatically by the maketree.c program
4867 */
4868
4869 /* WARNING: this file should *not* be used by applications. It is
4870 part of the implementation of the compression library and is
4871 subject to change. Applications should only use zlib.h.
4872 */
4873
4874 local uInt fixed_bl = 9;
4875 local uInt fixed_bd = 5;
4876 local inflate_huft fixed_tl[] = {
4877 {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
4878 {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
4879 {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
4880 {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
4881 {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
4882 {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
4883 {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
4884 {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
4885 {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
4886 {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
4887 {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
4888 {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
4889 {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
4890 {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
4891 {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
4892 {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
4893 {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
4894 {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
4895 {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
4896 {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
4897 {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
4898 {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
4899 {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
4900 {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
4901 {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
4902 {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
4903 {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
4904 {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
4905 {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
4906 {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
4907 {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
4908 {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
4909 {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
4910 {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
4911 {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
4912 {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
4913 {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
4914 {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
4915 {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
4916 {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
4917 {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
4918 {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
4919 {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
4920 {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
4921 {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
4922 {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
4923 {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
4924 {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
4925 {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
4926 {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
4927 {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
4928 {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
4929 {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
4930 {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
4931 {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
4932 {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
4933 {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
4934 {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
4935 {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
4936 {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
4937 {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
4938 {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
4939 {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
4940 {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
4941 {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
4942 {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
4943 {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
4944 {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
4945 {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
4946 {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
4947 {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
4948 {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
4949 {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
4950 {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
4951 {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
4952 {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
4953 {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
4954 {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
4955 {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
4956 {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
4957 {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
4958 {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
4959 {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
4960 {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
4961 {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
4962 {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
4963 {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
4964 {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
4965 {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
4966 {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
4967 {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
4968 {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
4969 {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
4970 {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
4971 {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
4972 {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
4973 {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
4974 {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
4975 {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
4976 {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
4977 {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
4978 {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
4979 {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
4980 {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
4981 {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
4982 {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
4983 {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
4984 {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
4985 {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
4986 {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
4987 {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
4988 {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
4989 {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
4990 {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
4991 {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
4992 {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
4993 {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
4994 {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
4995 {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
4996 {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
4997 {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
4998 {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
4999 {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
5000 {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
5001 {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
5002 {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
5003 {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
5004 {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
5005 };
5006 local inflate_huft fixed_td[] = {
5007 {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
5008 {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
5009 {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
5010 {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
5011 {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
5012 {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
5013 {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
5014 {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
5015 };
5016 /* --- inffixed.h */
5017
5018 #endif
5019
5020
5021 int inflate_trees_fixed(bl, bd, tl, td, z)
5022 uIntf *bl; /* literal desired/actual bit depth */
5023 uIntf *bd; /* distance desired/actual bit depth */
5024 inflate_huft * FAR *tl; /* literal/length tree result */
5025 inflate_huft * FAR *td; /* distance tree result */
5026 z_streamp z; /* for memory allocation */
5027 {
5028 #ifdef BUILDFIXED
5029 /* build fixed tables if not already */
5030 if (!fixed_built)
5031 {
5032 int k; /* temporary variable */
5033 uInt f = 0; /* number of hufts used in fixed_mem */
5034 uIntf *c; /* length list for huft_build */
5035 uIntf *v; /* work area for huft_build */
5036
5037 /* allocate memory */
5038 if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
5039 return Z_MEM_ERROR;
5040 if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
5041 {
5042 ZFREE(z, c);
5043 return Z_MEM_ERROR;
5044 }
5045
5046 /* literal table */
5047 for (k = 0; k < 144; k++)
5048 c[k] = 8;
5049 for (; k < 256; k++)
5050 c[k] = 9;
5051 for (; k < 280; k++)
5052 c[k] = 7;
5053 for (; k < 288; k++)
5054 c[k] = 8;
5055 fixed_bl = 9;
5056 huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
5057 fixed_mem, &f, v);
5058
5059 /* distance table */
5060 for (k = 0; k < 30; k++)
5061 c[k] = 5;
5062 fixed_bd = 5;
5063 huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
5064 fixed_mem, &f, v);
5065
5066 /* done */
5067 ZFREE(z, v);
5068 ZFREE(z, c);
5069 fixed_built = 1;
5070 }
5071 #endif
5072 *bl = fixed_bl;
5073 *bd = fixed_bd;
5074 *tl = fixed_tl;
5075 *td = fixed_td;
5076 return Z_OK;
5077 }
5078 /* --- inftrees.c */
5079
5080 /* +++ infcodes.c */
5081
5082 /* infcodes.c -- process literals and length/distance pairs
5083 * Copyright (C) 1995-2002 Mark Adler
5084 * For conditions of distribution and use, see copyright notice in zlib.h
5085 */
5086
5087 /* #include "zutil.h" */
5088 /* #include "inftrees.h" */
5089 /* #include "infblock.h" */
5090 /* #include "infcodes.h" */
5091 /* #include "infutil.h" */
5092
5093 /* +++ inffast.h */
5094
5095 /* inffast.h -- header to use inffast.c
5096 * Copyright (C) 1995-2002 Mark Adler
5097 * For conditions of distribution and use, see copyright notice in zlib.h
5098 */
5099
5100 /* WARNING: this file should *not* be used by applications. It is
5101 part of the implementation of the compression library and is
5102 subject to change. Applications should only use zlib.h.
5103 */
5104
5105 extern int inflate_fast __P((
5106 uInt,
5107 uInt,
5108 inflate_huft *,
5109 inflate_huft *,
5110 inflate_blocks_statef *,
5111 z_streamp ));
5112 /* --- inffast.h */
5113
5114 /* simplify the use of the inflate_huft type with some defines */
5115 #define exop word.what.Exop
5116 #define bits word.what.Bits
5117
5118 typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
5119 START, /* x: set up for LEN */
5120 LEN, /* i: get length/literal/eob next */
5121 LENEXT, /* i: getting length extra (have base) */
5122 DIST, /* i: get distance next */
5123 DISTEXT, /* i: getting distance extra */
5124 COPY, /* o: copying bytes in window, waiting for space */
5125 LIT, /* o: got literal, waiting for output space */
5126 WASH, /* o: got eob, possibly still output waiting */
5127 END, /* x: got eob and all data flushed */
5128 BADCODE} /* x: got error */
5129 inflate_codes_mode;
5130
5131 /* inflate codes private state */
5132 struct inflate_codes_state {
5133
5134 /* mode */
5135 inflate_codes_mode mode; /* current inflate_codes mode */
5136
5137 /* mode dependent information */
5138 uInt len;
5139 union {
5140 struct {
5141 inflate_huft *tree; /* pointer into tree */
5142 uInt need; /* bits needed */
5143 } code; /* if LEN or DIST, where in tree */
5144 uInt lit; /* if LIT, literal */
5145 struct {
5146 uInt get; /* bits to get for extra */
5147 uInt dist; /* distance back to copy from */
5148 } copy; /* if EXT or COPY, where and how much */
5149 } sub; /* submode */
5150
5151 /* mode independent information */
5152 Byte lbits; /* ltree bits decoded per branch */
5153 Byte dbits; /* dtree bits decoder per branch */
5154 inflate_huft *ltree; /* literal/length/eob tree */
5155 inflate_huft *dtree; /* distance tree */
5156
5157 };
5158
5159
5160 inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
5161 uInt bl, bd;
5162 inflate_huft *tl;
5163 inflate_huft *td; /* need separate declaration for Borland C++ */
5164 z_streamp z;
5165 {
5166 inflate_codes_statef *c;
5167
5168 if ((c = (inflate_codes_statef *)
5169 ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
5170 {
5171 c->mode = START;
5172 c->lbits = (Byte)bl;
5173 c->dbits = (Byte)bd;
5174 c->ltree = tl;
5175 c->dtree = td;
5176 Tracev((stderr, "inflate: codes new\n"));
5177 }
5178 return c;
5179 }
5180
5181
5182 int inflate_codes(s, z, r)
5183 inflate_blocks_statef *s;
5184 z_streamp z;
5185 int r;
5186 {
5187 uInt j; /* temporary storage */
5188 inflate_huft *t; /* temporary pointer */
5189 uInt e; /* extra bits or operation */
5190 uLong b; /* bit buffer */
5191 uInt k; /* bits in bit buffer */
5192 Bytef *p; /* input data pointer */
5193 uInt n; /* bytes available there */
5194 Bytef *q; /* output window write pointer */
5195 uInt m; /* bytes to end of window or read pointer */
5196 Bytef *f; /* pointer to copy strings from */
5197 inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
5198
5199 /* copy input/output information to locals (UPDATE macro restores) */
5200 LOAD
5201
5202 /* process input and output based on current state */
5203 while (1) switch (c->mode)
5204 { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
5205 case START: /* x: set up for LEN */
5206 #ifndef SLOW
5207 if (m >= 258 && n >= 10)
5208 {
5209 UPDATE
5210 r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
5211 LOAD
5212 if (r != Z_OK)
5213 {
5214 c->mode = r == Z_STREAM_END ? WASH : BADCODE;
5215 break;
5216 }
5217 }
5218 #endif /* !SLOW */
5219 c->sub.code.need = c->lbits;
5220 c->sub.code.tree = c->ltree;
5221 c->mode = LEN;
5222 case LEN: /* i: get length/literal/eob next */
5223 j = c->sub.code.need;
5224 NEEDBITS(j)
5225 t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
5226 DUMPBITS(t->bits)
5227 e = (uInt)(t->exop);
5228 if (e == 0) /* literal */
5229 {
5230 c->sub.lit = t->base;
5231 Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
5232 "inflate: literal '%c'\n" :
5233 "inflate: literal 0x%02x\n", t->base));
5234 c->mode = LIT;
5235 break;
5236 }
5237 if (e & 16) /* length */
5238 {
5239 c->sub.copy.get = e & 15;
5240 c->len = t->base;
5241 c->mode = LENEXT;
5242 break;
5243 }
5244 if ((e & 64) == 0) /* next table */
5245 {
5246 c->sub.code.need = e;
5247 c->sub.code.tree = t + t->base;
5248 break;
5249 }
5250 if (e & 32) /* end of block */
5251 {
5252 Tracevv((stderr, "inflate: end of block\n"));
5253 c->mode = WASH;
5254 break;
5255 }
5256 c->mode = BADCODE; /* invalid code */
5257 z->msg = (char*)"invalid literal/length code";
5258 r = Z_DATA_ERROR;
5259 LEAVE
5260 case LENEXT: /* i: getting length extra (have base) */
5261 j = c->sub.copy.get;
5262 NEEDBITS(j)
5263 c->len += (uInt)b & inflate_mask[j];
5264 DUMPBITS(j)
5265 c->sub.code.need = c->dbits;
5266 c->sub.code.tree = c->dtree;
5267 Tracevv((stderr, "inflate: length %u\n", c->len));
5268 c->mode = DIST;
5269 case DIST: /* i: get distance next */
5270 j = c->sub.code.need;
5271 NEEDBITS(j)
5272 t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
5273 DUMPBITS(t->bits)
5274 e = (uInt)(t->exop);
5275 if (e & 16) /* distance */
5276 {
5277 c->sub.copy.get = e & 15;
5278 c->sub.copy.dist = t->base;
5279 c->mode = DISTEXT;
5280 break;
5281 }
5282 if ((e & 64) == 0) /* next table */
5283 {
5284 c->sub.code.need = e;
5285 c->sub.code.tree = t + t->base;
5286 break;
5287 }
5288 c->mode = BADCODE; /* invalid code */
5289 z->msg = (char*)"invalid distance code";
5290 r = Z_DATA_ERROR;
5291 LEAVE
5292 case DISTEXT: /* i: getting distance extra */
5293 j = c->sub.copy.get;
5294 NEEDBITS(j)
5295 c->sub.copy.dist += (uInt)b & inflate_mask[j];
5296 DUMPBITS(j)
5297 Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
5298 c->mode = COPY;
5299 case COPY: /* o: copying bytes in window, waiting for space */
5300 f = q - c->sub.copy.dist;
5301 while (f < s->window) /* modulo window size-"while" instead */
5302 f += s->end - s->window; /* of "if" handles invalid distances */
5303 while (c->len)
5304 {
5305 NEEDOUT
5306 OUTBYTE(*f++)
5307 if (f == s->end)
5308 f = s->window;
5309 c->len--;
5310 }
5311 c->mode = START;
5312 break;
5313 case LIT: /* o: got literal, waiting for output space */
5314 NEEDOUT
5315 OUTBYTE(c->sub.lit)
5316 c->mode = START;
5317 break;
5318 case WASH: /* o: got eob, possibly more output */
5319 if (k > 7) /* return unused byte, if any */
5320 {
5321 Assert(k < 16, "inflate_codes grabbed too many bytes")
5322 k -= 8;
5323 n++;
5324 p--; /* can always return one */
5325 }
5326 FLUSH
5327 if (s->read != s->write)
5328 LEAVE
5329 c->mode = END;
5330 case END:
5331 r = Z_STREAM_END;
5332 LEAVE
5333 case BADCODE: /* x: got error */
5334 r = Z_DATA_ERROR;
5335 LEAVE
5336 default:
5337 r = Z_STREAM_ERROR;
5338 LEAVE
5339 }
5340 #ifdef NEED_DUMMY_RETURN
5341 return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
5342 #endif
5343 }
5344
5345
5346 void inflate_codes_free(c, z)
5347 inflate_codes_statef *c;
5348 z_streamp z;
5349 {
5350 ZFREE(z, c);
5351 Tracev((stderr, "inflate: codes free\n"));
5352 }
5353 /* --- infcodes.c */
5354
5355 /* +++ infutil.c */
5356
5357 /* inflate_util.c -- data and routines common to blocks and codes
5358 * Copyright (C) 1995-2002 Mark Adler
5359 * For conditions of distribution and use, see copyright notice in zlib.h
5360 */
5361
5362 /* #include "zutil.h" */
5363 /* #include "infblock.h" */
5364 /* #include "inftrees.h" */
5365 /* #include "infcodes.h" */
5366 /* #include "infutil.h" */
5367
5368 #ifndef NO_DUMMY_DECL
5369 struct inflate_codes_state {int dummy;}; /* for buggy compilers */
5370 #endif
5371
5372 /* And'ing with mask[n] masks the lower n bits */
5373 uInt inflate_mask[17] = {
5374 0x0000,
5375 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
5376 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
5377 };
5378
5379
5380 /* copy as much as possible from the sliding window to the output area */
5381 int inflate_flush(s, z, r)
5382 inflate_blocks_statef *s;
5383 z_streamp z;
5384 int r;
5385 {
5386 uInt n;
5387 Bytef *p;
5388 Bytef *q;
5389
5390 /* local copies of source and destination pointers */
5391 p = z->next_out;
5392 q = s->read;
5393
5394 /* compute number of bytes to copy as far as end of window */
5395 n = (uInt)((q <= s->write ? s->write : s->end) - q);
5396 if (n > z->avail_out) n = z->avail_out;
5397 if (n && r == Z_BUF_ERROR) r = Z_OK;
5398
5399 /* update counters */
5400 z->avail_out -= n;
5401 z->total_out += n;
5402
5403 /* update check information */
5404 if (s->checkfn != Z_NULL)
5405 z->adler = s->check = (*s->checkfn)(s->check, q, n);
5406
5407 /* copy as far as end of window */
5408 if (p != Z_NULL) {
5409 zmemcpy(p, q, n);
5410 p += n;
5411 }
5412 q += n;
5413
5414 /* see if more to copy at beginning of window */
5415 if (q == s->end)
5416 {
5417 /* wrap pointers */
5418 q = s->window;
5419 if (s->write == s->end)
5420 s->write = s->window;
5421
5422 /* compute bytes to copy */
5423 n = (uInt)(s->write - q);
5424 if (n > z->avail_out) n = z->avail_out;
5425 if (n && r == Z_BUF_ERROR) r = Z_OK;
5426
5427 /* update counters */
5428 z->avail_out -= n;
5429 z->total_out += n;
5430
5431 /* update check information */
5432 if (s->checkfn != Z_NULL)
5433 z->adler = s->check = (*s->checkfn)(s->check, q, n);
5434
5435 /* copy */
5436 if (p != NULL) {
5437 zmemcpy(p, q, n);
5438 p += n;
5439 }
5440 q += n;
5441 }
5442
5443 /* update pointers */
5444 z->next_out = p;
5445 s->read = q;
5446
5447 /* done */
5448 return r;
5449 }
5450 /* --- infutil.c */
5451
5452 /* +++ inffast.c */
5453
5454 /* inffast.c -- process literals and length/distance pairs fast
5455 * Copyright (C) 1995-2002 Mark Adler
5456 * For conditions of distribution and use, see copyright notice in zlib.h
5457 */
5458
5459 /* #include "zutil.h" */
5460 /* #include "inftrees.h" */
5461 /* #include "infblock.h" */
5462 /* #include "infcodes.h" */
5463 /* #include "infutil.h" */
5464 /* #include "inffast.h" */
5465
5466 #ifndef NO_DUMMY_DECL
5467 struct inflate_codes_state {int dummy;}; /* for buggy compilers */
5468 #endif
5469
5470 /* simplify the use of the inflate_huft type with some defines */
5471 #define exop word.what.Exop
5472 #define bits word.what.Bits
5473
5474 /* macros for bit input with no checking and for returning unused bytes */
5475 #define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
5476 #define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
5477
5478 /* Called with number of bytes left to write in window at least 258
5479 (the maximum string length) and number of input bytes available
5480 at least ten. The ten bytes are six bytes for the longest length/
5481 distance pair plus four bytes for overloading the bit buffer. */
5482
5483 int inflate_fast(bl, bd, tl, td, s, z)
5484 uInt bl, bd;
5485 inflate_huft *tl;
5486 inflate_huft *td; /* need separate declaration for Borland C++ */
5487 inflate_blocks_statef *s;
5488 z_streamp z;
5489 {
5490 inflate_huft *t; /* temporary pointer */
5491 uInt e; /* extra bits or operation */
5492 uLong b; /* bit buffer */
5493 uInt k; /* bits in bit buffer */
5494 Bytef *p; /* input data pointer */
5495 uInt n; /* bytes available there */
5496 Bytef *q; /* output window write pointer */
5497 uInt m; /* bytes to end of window or read pointer */
5498 uInt ml; /* mask for literal/length tree */
5499 uInt md; /* mask for distance tree */
5500 uInt c; /* bytes to copy */
5501 uInt d; /* distance back to copy from */
5502 Bytef *r; /* copy source pointer */
5503
5504 /* load input, output, bit values */
5505 LOAD
5506
5507 /* initialize masks */
5508 ml = inflate_mask[bl];
5509 md = inflate_mask[bd];
5510
5511 /* do until not enough input or output space for fast loop */
5512 do { /* assume called with m >= 258 && n >= 10 */
5513 /* get literal/length code */
5514 GRABBITS(20) /* max bits for literal/length code */
5515 if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
5516 {
5517 DUMPBITS(t->bits)
5518 Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
5519 "inflate: * literal '%c'\n" :
5520 "inflate: * literal 0x%02x\n", t->base));
5521 *q++ = (Byte)t->base;
5522 m--;
5523 continue;
5524 }
5525 do {
5526 DUMPBITS(t->bits)
5527 if (e & 16)
5528 {
5529 /* get extra bits for length */
5530 e &= 15;
5531 c = t->base + ((uInt)b & inflate_mask[e]);
5532 DUMPBITS(e)
5533 Tracevv((stderr, "inflate: * length %u\n", c));
5534
5535 /* decode distance base of block to copy */
5536 GRABBITS(15); /* max bits for distance code */
5537 e = (t = td + ((uInt)b & md))->exop;
5538 do {
5539 DUMPBITS(t->bits)
5540 if (e & 16)
5541 {
5542 /* get extra bits to add to distance base */
5543 e &= 15;
5544 GRABBITS(e) /* get extra bits (up to 13) */
5545 d = t->base + ((uInt)b & inflate_mask[e]);
5546 DUMPBITS(e)
5547 Tracevv((stderr, "inflate: * distance %u\n", d));
5548
5549 /* do the copy */
5550 m -= c;
5551 r = q - d;
5552 if (r < s->window) /* wrap if needed */
5553 {
5554 do {
5555 r += s->end - s->window; /* force pointer in window */
5556 } while (r < s->window); /* covers invalid distances */
5557 e = s->end - r;
5558 if (c > e)
5559 {
5560 c -= e; /* wrapped copy */
5561 do {
5562 *q++ = *r++;
5563 } while (--e);
5564 r = s->window;
5565 do {
5566 *q++ = *r++;
5567 } while (--c);
5568 }
5569 else /* normal copy */
5570 {
5571 *q++ = *r++; c--;
5572 *q++ = *r++; c--;
5573 do {
5574 *q++ = *r++;
5575 } while (--c);
5576 }
5577 }
5578 else /* normal copy */
5579 {
5580 *q++ = *r++; c--;
5581 *q++ = *r++; c--;
5582 do {
5583 *q++ = *r++;
5584 } while (--c);
5585 }
5586 break;
5587 }
5588 else if ((e & 64) == 0)
5589 {
5590 t += t->base;
5591 e = (t += ((uInt)b & inflate_mask[e]))->exop;
5592 }
5593 else
5594 {
5595 z->msg = (char*)"invalid distance code";
5596 UNGRAB
5597 UPDATE
5598 return Z_DATA_ERROR;
5599 }
5600 } while (1);
5601 break;
5602 }
5603 if ((e & 64) == 0)
5604 {
5605 t += t->base;
5606 if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
5607 {
5608 DUMPBITS(t->bits)
5609 Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
5610 "inflate: * literal '%c'\n" :
5611 "inflate: * literal 0x%02x\n", t->base));
5612 *q++ = (Byte)t->base;
5613 m--;
5614 break;
5615 }
5616 }
5617 else if (e & 32)
5618 {
5619 Tracevv((stderr, "inflate: * end of block\n"));
5620 UNGRAB
5621 UPDATE
5622 return Z_STREAM_END;
5623 }
5624 else
5625 {
5626 z->msg = (char*)"invalid literal/length code";
5627 UNGRAB
5628 UPDATE
5629 return Z_DATA_ERROR;
5630 }
5631 } while (1);
5632 } while (m >= 258 && n >= 10);
5633
5634 /* not enough input or output--restore pointers and return */
5635 UNGRAB
5636 UPDATE
5637 return Z_OK;
5638 }
5639 /* --- inffast.c */
5640
5641 /* +++ zutil.c */
5642
5643 /* zutil.c -- target dependent utility functions for the compression library
5644 * Copyright (C) 1995-2002 Jean-loup Gailly.
5645 * For conditions of distribution and use, see copyright notice in zlib.h
5646 */
5647
5648 /* @(#) Id */
5649
5650 #ifdef DEBUG_ZLIB
5651 #include <stdio.h>
5652 #endif
5653
5654 /* #include "zutil.h" */
5655
5656 #ifndef NO_DUMMY_DECL
5657 struct internal_state {int dummy;}; /* for buggy compilers */
5658 #endif
5659
5660 #ifndef STDC
5661 extern void exit __P((int));
5662 #endif
5663
5664 const char *z_errmsg[10] = {
5665 "need dictionary", /* Z_NEED_DICT 2 */
5666 "stream end", /* Z_STREAM_END 1 */
5667 "", /* Z_OK 0 */
5668 "file error", /* Z_ERRNO (-1) */
5669 "stream error", /* Z_STREAM_ERROR (-2) */
5670 "data error", /* Z_DATA_ERROR (-3) */
5671 "insufficient memory", /* Z_MEM_ERROR (-4) */
5672 "buffer error", /* Z_BUF_ERROR (-5) */
5673 "incompatible version",/* Z_VERSION_ERROR (-6) */
5674 ""};
5675
5676
5677 const char * ZEXPORT zlibVersion()
5678 {
5679 return ZLIB_VERSION;
5680 }
5681
5682 #ifdef DEBUG_ZLIB
5683
5684 # ifndef verbose
5685 # define verbose 0
5686 # endif
5687 int z_verbose = verbose;
5688
5689 void z_error (m)
5690 char *m;
5691 {
5692 fprintf(stderr, "%s\n", m);
5693 exit(1);
5694 }
5695 #endif
5696
5697 /* exported to allow conversion of error code to string for compress() and
5698 * uncompress()
5699 */
5700 const char * ZEXPORT zError(err)
5701 int err;
5702 {
5703 return ERR_MSG(err);
5704 }
5705
5706
5707 #ifndef HAVE_MEMCPY
5708
5709 void zmemcpy(dest, source, len)
5710 Bytef* dest;
5711 const Bytef* source;
5712 uInt len;
5713 {
5714 if (len == 0) return;
5715 do {
5716 *dest++ = *source++; /* ??? to be unrolled */
5717 } while (--len != 0);
5718 }
5719
5720 int zmemcmp(s1, s2, len)
5721 const Bytef* s1;
5722 const Bytef* s2;
5723 uInt len;
5724 {
5725 uInt j;
5726
5727 for (j = 0; j < len; j++) {
5728 if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
5729 }
5730 return 0;
5731 }
5732
5733 void zmemzero(dest, len)
5734 Bytef* dest;
5735 uInt len;
5736 {
5737 if (len == 0) return;
5738 do {
5739 *dest++ = 0; /* ??? to be unrolled */
5740 } while (--len != 0);
5741 }
5742 #endif
5743
5744 #ifdef __TURBOC__
5745 #if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
5746 /* Small and medium model in Turbo C are for now limited to near allocation
5747 * with reduced MAX_WBITS and MAX_MEM_LEVEL
5748 */
5749 # define MY_ZCALLOC
5750
5751 /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
5752 * and farmalloc(64K) returns a pointer with an offset of 8, so we
5753 * must fix the pointer. Warning: the pointer must be put back to its
5754 * original form in order to free it, use zcfree().
5755 */
5756
5757 #define MAX_PTR 10
5758 /* 10*64K = 640K */
5759
5760 local int next_ptr = 0;
5761
5762 typedef struct ptr_table_s {
5763 voidpf org_ptr;
5764 voidpf new_ptr;
5765 } ptr_table;
5766
5767 local ptr_table table[MAX_PTR];
5768 /* This table is used to remember the original form of pointers
5769 * to large buffers (64K). Such pointers are normalized with a zero offset.
5770 * Since MSDOS is not a preemptive multitasking OS, this table is not
5771 * protected from concurrent access. This hack doesn't work anyway on
5772 * a protected system like OS/2. Use Microsoft C instead.
5773 */
5774
5775 voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
5776 {
5777 voidpf buf = opaque; /* just to make some compilers happy */
5778 ulg bsize = (ulg)items*size;
5779
5780 /* If we allocate less than 65520 bytes, we assume that farmalloc
5781 * will return a usable pointer which doesn't have to be normalized.
5782 */
5783 if (bsize < 65520L) {
5784 buf = farmalloc(bsize);
5785 if (*(ush*)&buf != 0) return buf;
5786 } else {
5787 buf = farmalloc(bsize + 16L);
5788 }
5789 if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
5790 table[next_ptr].org_ptr = buf;
5791
5792 /* Normalize the pointer to seg:0 */
5793 *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
5794 *(ush*)&buf = 0;
5795 table[next_ptr++].new_ptr = buf;
5796 return buf;
5797 }
5798
5799 void zcfree (voidpf opaque, voidpf ptr)
5800 {
5801 int n;
5802 if (*(ush*)&ptr != 0) { /* object < 64K */
5803 farfree(ptr);
5804 return;
5805 }
5806 /* Find the original pointer */
5807 for (n = 0; n < next_ptr; n++) {
5808 if (ptr != table[n].new_ptr) continue;
5809
5810 farfree(table[n].org_ptr);
5811 while (++n < next_ptr) {
5812 table[n-1] = table[n];
5813 }
5814 next_ptr--;
5815 return;
5816 }
5817 ptr = opaque; /* just to make some compilers happy */
5818 Assert(0, "zcfree: ptr not found");
5819 }
5820 #endif
5821 #endif /* __TURBOC__ */
5822
5823
5824 #if defined(M_I86) && !defined(__32BIT__)
5825 /* Microsoft C in 16-bit mode */
5826
5827 # define MY_ZCALLOC
5828
5829 #if (!defined(_MSC_VER) || (_MSC_VER <= 600))
5830 # define _halloc halloc
5831 # define _hfree hfree
5832 #endif
5833
5834 voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
5835 {
5836 if (opaque) opaque = 0; /* to make compiler happy */
5837 return _halloc((long)items, size);
5838 }
5839
5840 void zcfree (voidpf opaque, voidpf ptr)
5841 {
5842 if (opaque) opaque = 0; /* to make compiler happy */
5843 _hfree(ptr);
5844 }
5845
5846 #endif /* MSC */
5847
5848
5849 #ifndef MY_ZCALLOC /* Any system without a special alloc function */
5850
5851 #ifndef STDC
5852 extern voidp calloc __P((uInt items, uInt size));
5853 extern void free __P((voidpf ptr));
5854 #endif
5855
5856 voidpf zcalloc (opaque, items, size)
5857 voidpf opaque;
5858 unsigned items;
5859 unsigned size;
5860 {
5861 if (opaque) items += size - size; /* make compiler happy */
5862 return (voidpf)calloc(items, size);
5863 }
5864
5865 void zcfree (opaque, ptr)
5866 voidpf opaque;
5867 voidpf ptr;
5868 {
5869 free(ptr);
5870 if (opaque) return; /* make compiler happy */
5871 }
5872
5873 #endif /* MY_ZCALLOC */
5874 /* --- zutil.c */
5875
5876 /* +++ adler32.c */
5877 /* adler32.c -- compute the Adler-32 checksum of a data stream
5878 * Copyright (C) 1995-2002 Mark Adler
5879 * For conditions of distribution and use, see copyright notice in zlib.h
5880 */
5881
5882 /* @(#) $Id: zlib.c,v 1.10.4.2 2002/03/21 19:32:37 he Exp $ */
5883
5884 /* #include "zlib.h" */
5885
5886 #define BASE 65521L /* largest prime smaller than 65536 */
5887 #define NMAX 5552
5888 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
5889
5890 #define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
5891 #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
5892 #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
5893 #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
5894 #define DO16(buf) DO8(buf,0); DO8(buf,8);
5895
5896 /* ========================================================================= */
5897 uLong ZEXPORT adler32(adler, buf, len)
5898 uLong adler;
5899 const Bytef *buf;
5900 uInt len;
5901 {
5902 unsigned long s1 = adler & 0xffff;
5903 unsigned long s2 = (adler >> 16) & 0xffff;
5904 int k;
5905
5906 if (buf == Z_NULL) return 1L;
5907
5908 while (len > 0) {
5909 k = len < NMAX ? len : NMAX;
5910 len -= k;
5911 while (k >= 16) {
5912 DO16(buf);
5913 buf += 16;
5914 k -= 16;
5915 }
5916 if (k != 0) do {
5917 s1 += *buf++;
5918 s2 += s1;
5919 } while (--k);
5920 s1 %= BASE;
5921 s2 %= BASE;
5922 }
5923 return (s2 << 16) | s1;
5924 }
5925 /* --- adler32.c */
5926
5927