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