Linux-2.6.12-rc2
[linux-flexiantxendom0-natty.git] / arch / ppc64 / boot / zlib.c
1 /*
2  * This file is derived from various .h and .c files from the zlib-0.95
3  * distribution by Jean-loup Gailly and Mark Adler, with some additions
4  * by Paul Mackerras to aid in implementing Deflate compression and
5  * decompression for PPP packets.  See zlib.h for conditions of
6  * distribution and use.
7  *
8  * Changes that have been made include:
9  * - changed functions not used outside this file to "local"
10  * - added minCompression parameter to deflateInit2
11  * - added Z_PACKET_FLUSH (see zlib.h for details)
12  * - added inflateIncomp
13  *
14   Copyright (C) 1995 Jean-loup Gailly and Mark Adler
15
16   This software is provided 'as-is', without any express or implied
17   warranty.  In no event will the authors be held liable for any damages
18   arising from the use of this software.
19
20   Permission is granted to anyone to use this software for any purpose,
21   including commercial applications, and to alter it and redistribute it
22   freely, subject to the following restrictions:
23
24   1. The origin of this software must not be misrepresented; you must not
25      claim that you wrote the original software. If you use this software
26      in a product, an acknowledgment in the product documentation would be
27      appreciated but is not required.
28   2. Altered source versions must be plainly marked as such, and must not be
29      misrepresented as being the original software.
30   3. This notice may not be removed or altered from any source distribution.
31
32   Jean-loup Gailly        Mark Adler
33   gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
34
35  *
36  * 
37  */
38
39 /*+++++*/
40 /* zutil.h -- internal interface and configuration of the compression library
41  * Copyright (C) 1995 Jean-loup Gailly.
42  * For conditions of distribution and use, see copyright notice in zlib.h
43  */
44
45 /* WARNING: this file should *not* be used by applications. It is
46    part of the implementation of the compression library and is
47    subject to change. Applications should only use zlib.h.
48  */
49
50 /* From: zutil.h,v 1.9 1995/05/03 17:27:12 jloup Exp */
51
52 #define _Z_UTIL_H
53
54 #include "zlib.h"
55
56 #ifndef local
57 #  define local static
58 #endif
59 /* compile with -Dlocal if your debugger can't find static symbols */
60
61 #define FAR
62
63 typedef unsigned char  uch;
64 typedef uch FAR uchf;
65 typedef unsigned short ush;
66 typedef ush FAR ushf;
67 typedef unsigned long  ulg;
68
69 extern char *z_errmsg[]; /* indexed by 1-zlib_error */
70
71 #define ERR_RETURN(strm,err) return (strm->msg=z_errmsg[1-err], err)
72 /* To be used only when the state is known to be valid */
73
74 #ifndef NULL
75 #define NULL    ((void *) 0)
76 #endif
77
78         /* common constants */
79
80 #define DEFLATED   8
81
82 #ifndef DEF_WBITS
83 #  define DEF_WBITS MAX_WBITS
84 #endif
85 /* default windowBits for decompression. MAX_WBITS is for compression only */
86
87 #if MAX_MEM_LEVEL >= 8
88 #  define DEF_MEM_LEVEL 8
89 #else
90 #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
91 #endif
92 /* default memLevel */
93
94 #define STORED_BLOCK 0
95 #define STATIC_TREES 1
96 #define DYN_TREES    2
97 /* The three kinds of block type */
98
99 #define MIN_MATCH  3
100 #define MAX_MATCH  258
101 /* The minimum and maximum match lengths */
102
103          /* functions */
104
105 extern void *memcpy(void *, const void *, unsigned long);
106 #define zmemcpy memcpy
107
108 /* Diagnostic functions */
109 #ifdef DEBUG_ZLIB
110 #  include <stdio.h>
111 #  ifndef verbose
112 #    define verbose 0
113 #  endif
114 #  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
115 #  define Trace(x) fprintf x
116 #  define Tracev(x) {if (verbose) fprintf x ;}
117 #  define Tracevv(x) {if (verbose>1) fprintf x ;}
118 #  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
119 #  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
120 #else
121 #  define Assert(cond,msg)
122 #  define Trace(x)
123 #  define Tracev(x)
124 #  define Tracevv(x)
125 #  define Tracec(c,x)
126 #  define Tracecv(c,x)
127 #endif
128
129
130 typedef uLong (*check_func) OF((uLong check, Bytef *buf, uInt len));
131
132 /* voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); */
133 /* void   zcfree  OF((voidpf opaque, voidpf ptr)); */
134
135 #define ZALLOC(strm, items, size) \
136            (*((strm)->zalloc))((strm)->opaque, (items), (size))
137 #define ZFREE(strm, addr, size) \
138            (*((strm)->zfree))((strm)->opaque, (voidpf)(addr), (size))
139 #define TRY_FREE(s, p, n) {if (p) ZFREE(s, p, n);}
140
141 /* deflate.h -- internal compression state
142  * Copyright (C) 1995 Jean-loup Gailly
143  * For conditions of distribution and use, see copyright notice in zlib.h 
144  */
145
146 /* WARNING: this file should *not* be used by applications. It is
147    part of the implementation of the compression library and is
148    subject to change. Applications should only use zlib.h.
149  */
150
151 /*+++++*/
152 /* infblock.h -- header to use infblock.c
153  * Copyright (C) 1995 Mark Adler
154  * For conditions of distribution and use, see copyright notice in zlib.h 
155  */
156
157 /* WARNING: this file should *not* be used by applications. It is
158    part of the implementation of the compression library and is
159    subject to change. Applications should only use zlib.h.
160  */
161
162 struct inflate_blocks_state;
163 typedef struct inflate_blocks_state FAR inflate_blocks_statef;
164
165 local inflate_blocks_statef * inflate_blocks_new OF((
166     z_stream *z,
167     check_func c,               /* check function */
168     uInt w));                   /* window size */
169
170 local int inflate_blocks OF((
171     inflate_blocks_statef *,
172     z_stream *,
173     int));                      /* initial return code */
174
175 local void inflate_blocks_reset OF((
176     inflate_blocks_statef *,
177     z_stream *,
178     uLongf *));                  /* check value on output */
179
180 local int inflate_blocks_free OF((
181     inflate_blocks_statef *,
182     z_stream *,
183     uLongf *));                  /* check value on output */
184
185 local int inflate_addhistory OF((
186     inflate_blocks_statef *,
187     z_stream *));
188
189 local int inflate_packet_flush OF((
190     inflate_blocks_statef *));
191
192 /*+++++*/
193 /* inftrees.h -- header to use inftrees.c
194  * Copyright (C) 1995 Mark Adler
195  * For conditions of distribution and use, see copyright notice in zlib.h 
196  */
197
198 /* WARNING: this file should *not* be used by applications. It is
199    part of the implementation of the compression library and is
200    subject to change. Applications should only use zlib.h.
201  */
202
203 /* Huffman code lookup table entry--this entry is four bytes for machines
204    that have 16-bit pointers (e.g. PC's in the small or medium model). */
205
206 typedef struct inflate_huft_s FAR inflate_huft;
207
208 struct inflate_huft_s {
209   union {
210     struct {
211       Byte Exop;        /* number of extra bits or operation */
212       Byte Bits;        /* number of bits in this code or subcode */
213     } what;
214     uInt Nalloc;        /* number of these allocated here */
215     Bytef *pad;         /* pad structure to a power of 2 (4 bytes for */
216   } word;               /*  16-bit, 8 bytes for 32-bit machines) */
217   union {
218     uInt Base;          /* literal, length base, or distance base */
219     inflate_huft *Next; /* pointer to next level of table */
220   } more;
221 };
222
223 #ifdef DEBUG_ZLIB
224   local uInt inflate_hufts;
225 #endif
226
227 local int inflate_trees_bits OF((
228     uIntf *,                    /* 19 code lengths */
229     uIntf *,                    /* bits tree desired/actual depth */
230     inflate_huft * FAR *,       /* bits tree result */
231     z_stream *));               /* for zalloc, zfree functions */
232
233 local int inflate_trees_dynamic OF((
234     uInt,                       /* number of literal/length codes */
235     uInt,                       /* number of distance codes */
236     uIntf *,                    /* that many (total) code lengths */
237     uIntf *,                    /* literal desired/actual bit depth */
238     uIntf *,                    /* distance desired/actual bit depth */
239     inflate_huft * FAR *,       /* literal/length tree result */
240     inflate_huft * FAR *,       /* distance tree result */
241     z_stream *));               /* for zalloc, zfree functions */
242
243 local int inflate_trees_fixed OF((
244     uIntf *,                    /* literal desired/actual bit depth */
245     uIntf *,                    /* distance desired/actual bit depth */
246     inflate_huft * FAR *,       /* literal/length tree result */
247     inflate_huft * FAR *));     /* distance tree result */
248
249 local int inflate_trees_free OF((
250     inflate_huft *,             /* tables to free */
251     z_stream *));               /* for zfree function */
252
253
254 /*+++++*/
255 /* infcodes.h -- header to use infcodes.c
256  * Copyright (C) 1995 Mark Adler
257  * For conditions of distribution and use, see copyright notice in zlib.h 
258  */
259
260 /* WARNING: this file should *not* be used by applications. It is
261    part of the implementation of the compression library and is
262    subject to change. Applications should only use zlib.h.
263  */
264
265 struct inflate_codes_state;
266 typedef struct inflate_codes_state FAR inflate_codes_statef;
267
268 local inflate_codes_statef *inflate_codes_new OF((
269     uInt, uInt,
270     inflate_huft *, inflate_huft *,
271     z_stream *));
272
273 local int inflate_codes OF((
274     inflate_blocks_statef *,
275     z_stream *,
276     int));
277
278 local void inflate_codes_free OF((
279     inflate_codes_statef *,
280     z_stream *));
281
282
283 /*+++++*/
284 /* inflate.c -- zlib interface to inflate modules
285  * Copyright (C) 1995 Mark Adler
286  * For conditions of distribution and use, see copyright notice in zlib.h 
287  */
288
289 /* inflate private state */
290 struct internal_state {
291
292   /* mode */
293   enum {
294       METHOD,   /* waiting for method byte */
295       FLAG,     /* waiting for flag byte */
296       BLOCKS,   /* decompressing blocks */
297       CHECK4,   /* four check bytes to go */
298       CHECK3,   /* three check bytes to go */
299       CHECK2,   /* two check bytes to go */
300       CHECK1,   /* one check byte to go */
301       DONE,     /* finished check, done */
302       BAD}      /* got an error--stay here */
303     mode;               /* current inflate mode */
304
305   /* mode dependent information */
306   union {
307     uInt method;        /* if FLAGS, method byte */
308     struct {
309       uLong was;                /* computed check value */
310       uLong need;               /* stream check value */
311     } check;            /* if CHECK, check values to compare */
312     uInt marker;        /* if BAD, inflateSync's marker bytes count */
313   } sub;        /* submode */
314
315   /* mode independent information */
316   int  nowrap;          /* flag for no wrapper */
317   uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
318   inflate_blocks_statef 
319     *blocks;            /* current inflate_blocks state */
320
321 };
322
323
324 int inflateReset(
325         z_stream *z
326 )
327 {
328   uLong c;
329
330   if (z == Z_NULL || z->state == Z_NULL)
331     return Z_STREAM_ERROR;
332   z->total_in = z->total_out = 0;
333   z->msg = Z_NULL;
334   z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
335   inflate_blocks_reset(z->state->blocks, z, &c);
336   Trace((stderr, "inflate: reset\n"));
337   return Z_OK;
338 }
339
340
341 int inflateEnd(
342         z_stream *z
343 )
344 {
345   uLong c;
346
347   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
348     return Z_STREAM_ERROR;
349   if (z->state->blocks != Z_NULL)
350     inflate_blocks_free(z->state->blocks, z, &c);
351   ZFREE(z, z->state, sizeof(struct internal_state));
352   z->state = Z_NULL;
353   Trace((stderr, "inflate: end\n"));
354   return Z_OK;
355 }
356
357
358 int inflateInit2(
359         z_stream *z,
360         int w
361 )
362 {
363   /* initialize state */
364   if (z == Z_NULL)
365     return Z_STREAM_ERROR;
366 /*  if (z->zalloc == Z_NULL) z->zalloc = zcalloc; */
367 /*  if (z->zfree == Z_NULL) z->zfree = zcfree; */
368   if ((z->state = (struct internal_state FAR *)
369        ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
370     return Z_MEM_ERROR;
371   z->state->blocks = Z_NULL;
372
373   /* handle undocumented nowrap option (no zlib header or check) */
374   z->state->nowrap = 0;
375   if (w < 0)
376   {
377     w = - w;
378     z->state->nowrap = 1;
379   }
380
381   /* set window size */
382   if (w < 8 || w > 15)
383   {
384     inflateEnd(z);
385     return Z_STREAM_ERROR;
386   }
387   z->state->wbits = (uInt)w;
388
389   /* create inflate_blocks state */
390   if ((z->state->blocks =
391        inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, 1 << w))
392       == Z_NULL)
393   {
394     inflateEnd(z);
395     return Z_MEM_ERROR;
396   }
397   Trace((stderr, "inflate: allocated\n"));
398
399   /* reset state */
400   inflateReset(z);
401   return Z_OK;
402 }
403
404
405 int inflateInit(
406         z_stream *z
407 )
408 {
409   return inflateInit2(z, DEF_WBITS);
410 }
411
412
413 #define NEEDBYTE {if(z->avail_in==0)goto empty;r=Z_OK;}
414 #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
415
416 int inflate(
417         z_stream *z,
418         int f   
419 )
420 {
421   int r;
422   uInt b;
423
424   if (z == Z_NULL || z->next_in == Z_NULL)
425     return Z_STREAM_ERROR;
426   r = Z_BUF_ERROR;
427   while (1) switch (z->state->mode)
428   {
429     case METHOD:
430       NEEDBYTE
431       if (((z->state->sub.method = NEXTBYTE) & 0xf) != DEFLATED)
432       {
433         z->state->mode = BAD;
434         z->msg = "unknown compression method";
435         z->state->sub.marker = 5;       /* can't try inflateSync */
436         break;
437       }
438       if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
439       {
440         z->state->mode = BAD;
441         z->msg = "invalid window size";
442         z->state->sub.marker = 5;       /* can't try inflateSync */
443         break;
444       }
445       z->state->mode = FLAG;
446     case FLAG:
447       NEEDBYTE
448       if ((b = NEXTBYTE) & 0x20)
449       {
450         z->state->mode = BAD;
451         z->msg = "invalid reserved bit";
452         z->state->sub.marker = 5;       /* can't try inflateSync */
453         break;
454       }
455       if (((z->state->sub.method << 8) + b) % 31)
456       {
457         z->state->mode = BAD;
458         z->msg = "incorrect header check";
459         z->state->sub.marker = 5;       /* can't try inflateSync */
460         break;
461       }
462       Trace((stderr, "inflate: zlib header ok\n"));
463       z->state->mode = BLOCKS;
464     case BLOCKS:
465       r = inflate_blocks(z->state->blocks, z, r);
466       if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
467           r = inflate_packet_flush(z->state->blocks);
468       if (r == Z_DATA_ERROR)
469       {
470         z->state->mode = BAD;
471         z->state->sub.marker = 0;       /* can try inflateSync */
472         break;
473       }
474       if (r != Z_STREAM_END)
475         return r;
476       r = Z_OK;
477       inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
478       if (z->state->nowrap)
479       {
480         z->state->mode = DONE;
481         break;
482       }
483       z->state->mode = CHECK4;
484     case CHECK4:
485       NEEDBYTE
486       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
487       z->state->mode = CHECK3;
488     case CHECK3:
489       NEEDBYTE
490       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
491       z->state->mode = CHECK2;
492     case CHECK2:
493       NEEDBYTE
494       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
495       z->state->mode = CHECK1;
496     case CHECK1:
497       NEEDBYTE
498       z->state->sub.check.need += (uLong)NEXTBYTE;
499
500       if (z->state->sub.check.was != z->state->sub.check.need)
501       {
502         z->state->mode = BAD;
503         z->msg = "incorrect data check";
504         z->state->sub.marker = 5;       /* can't try inflateSync */
505         break;
506       }
507       Trace((stderr, "inflate: zlib check ok\n"));
508       z->state->mode = DONE;
509     case DONE:
510       return Z_STREAM_END;
511     case BAD:
512       return Z_DATA_ERROR;
513     default:
514       return Z_STREAM_ERROR;
515   }
516
517  empty:
518   if (f != Z_PACKET_FLUSH)
519     return r;
520   z->state->mode = BAD;
521   z->state->sub.marker = 0;       /* can try inflateSync */
522   return Z_DATA_ERROR;
523 }
524
525 /*
526  * This subroutine adds the data at next_in/avail_in to the output history
527  * without performing any output.  The output buffer must be "caught up";
528  * i.e. no pending output (hence s->read equals s->write), and the state must
529  * be BLOCKS (i.e. we should be willing to see the start of a series of
530  * BLOCKS).  On exit, the output will also be caught up, and the checksum
531  * will have been updated if need be.
532  */
533
534 int inflateIncomp(
535         z_stream *z
536 )
537 {
538     if (z->state->mode != BLOCKS)
539         return Z_DATA_ERROR;
540     return inflate_addhistory(z->state->blocks, z);
541 }
542
543
544 int inflateSync(
545         z_stream *z
546 )
547 {
548   uInt n;       /* number of bytes to look at */
549   Bytef *p;     /* pointer to bytes */
550   uInt m;       /* number of marker bytes found in a row */
551   uLong r, w;   /* temporaries to save total_in and total_out */
552
553   /* set up */
554   if (z == Z_NULL || z->state == Z_NULL)
555     return Z_STREAM_ERROR;
556   if (z->state->mode != BAD)
557   {
558     z->state->mode = BAD;
559     z->state->sub.marker = 0;
560   }
561   if ((n = z->avail_in) == 0)
562     return Z_BUF_ERROR;
563   p = z->next_in;
564   m = z->state->sub.marker;
565
566   /* search */
567   while (n && m < 4)
568   {
569     if (*p == (Byte)(m < 2 ? 0 : 0xff))
570       m++;
571     else if (*p)
572       m = 0;
573     else
574       m = 4 - m;
575     p++, n--;
576   }
577
578   /* restore */
579   z->total_in += p - z->next_in;
580   z->next_in = p;
581   z->avail_in = n;
582   z->state->sub.marker = m;
583
584   /* return no joy or set up to restart on a new block */
585   if (m != 4)
586     return Z_DATA_ERROR;
587   r = z->total_in;  w = z->total_out;
588   inflateReset(z);
589   z->total_in = r;  z->total_out = w;
590   z->state->mode = BLOCKS;
591   return Z_OK;
592 }
593
594 #undef NEEDBYTE
595 #undef NEXTBYTE
596
597 /*+++++*/
598 /* infutil.h -- types and macros common to blocks and codes
599  * Copyright (C) 1995 Mark Adler
600  * For conditions of distribution and use, see copyright notice in zlib.h 
601  */
602
603 /* WARNING: this file should *not* be used by applications. It is
604    part of the implementation of the compression library and is
605    subject to change. Applications should only use zlib.h.
606  */
607
608 /* inflate blocks semi-private state */
609 struct inflate_blocks_state {
610
611   /* mode */
612   enum {
613       TYPE,     /* get type bits (3, including end bit) */
614       LENS,     /* get lengths for stored */
615       STORED,   /* processing stored block */
616       TABLE,    /* get table lengths */
617       BTREE,    /* get bit lengths tree for a dynamic block */
618       DTREE,    /* get length, distance trees for a dynamic block */
619       CODES,    /* processing fixed or dynamic block */
620       DRY,      /* output remaining window bytes */
621       DONEB,     /* finished last block, done */
622       BADB}      /* got a data error--stuck here */
623     mode;               /* current inflate_block mode */
624
625   /* mode dependent information */
626   union {
627     uInt left;          /* if STORED, bytes left to copy */
628     struct {
629       uInt table;               /* table lengths (14 bits) */
630       uInt index;               /* index into blens (or border) */
631       uIntf *blens;             /* bit lengths of codes */
632       uInt bb;                  /* bit length tree depth */
633       inflate_huft *tb;         /* bit length decoding tree */
634       int nblens;               /* # elements allocated at blens */
635     } trees;            /* if DTREE, decoding info for trees */
636     struct {
637       inflate_huft *tl, *td;    /* trees to free */
638       inflate_codes_statef 
639          *codes;
640     } decode;           /* if CODES, current state */
641   } sub;                /* submode */
642   uInt last;            /* true if this block is the last block */
643
644   /* mode independent information */
645   uInt bitk;            /* bits in bit buffer */
646   uLong bitb;           /* bit buffer */
647   Bytef *window;        /* sliding window */
648   Bytef *end;           /* one byte after sliding window */
649   Bytef *read;          /* window read pointer */
650   Bytef *write;         /* window write pointer */
651   check_func checkfn;   /* check function */
652   uLong check;          /* check on output */
653
654 };
655
656
657 /* defines for inflate input/output */
658 /*   update pointers and return */
659 #define UPDBITS {s->bitb=b;s->bitk=k;}
660 #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
661 #define UPDOUT {s->write=q;}
662 #define UPDATE {UPDBITS UPDIN UPDOUT}
663 #define LEAVE {UPDATE return inflate_flush(s,z,r);}
664 /*   get bytes and bits */
665 #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
666 #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
667 #define NEXTBYTE (n--,*p++)
668 #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
669 #define DUMPBITS(j) {b>>=(j);k-=(j);}
670 /*   output bytes */
671 #define WAVAIL (q<s->read?s->read-q-1:s->end-q)
672 #define LOADOUT {q=s->write;m=WAVAIL;}
673 #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=WAVAIL;}}
674 #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
675 #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
676 #define OUTBYTE(a) {*q++=(Byte)(a);m--;}
677 /*   load local pointers */
678 #define LOAD {LOADIN LOADOUT}
679
680 /* And'ing with mask[n] masks the lower n bits */
681 local uInt inflate_mask[] = {
682     0x0000,
683     0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
684     0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
685 };
686
687 /* copy as much as possible from the sliding window to the output area */
688 local int inflate_flush OF((
689     inflate_blocks_statef *,
690     z_stream *,
691     int));
692
693 /*+++++*/
694 /* inffast.h -- header to use inffast.c
695  * Copyright (C) 1995 Mark Adler
696  * For conditions of distribution and use, see copyright notice in zlib.h 
697  */
698
699 /* WARNING: this file should *not* be used by applications. It is
700    part of the implementation of the compression library and is
701    subject to change. Applications should only use zlib.h.
702  */
703
704 local int inflate_fast OF((
705     uInt,
706     uInt,
707     inflate_huft *,
708     inflate_huft *,
709     inflate_blocks_statef *,
710     z_stream *));
711
712
713 /*+++++*/
714 /* infblock.c -- interpret and process block types to last block
715  * Copyright (C) 1995 Mark Adler
716  * For conditions of distribution and use, see copyright notice in zlib.h 
717  */
718
719 /* Table for deflate from PKZIP's appnote.txt. */
720 local uInt border[] = { /* Order of the bit length code lengths */
721         16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
722
723 /*
724    Notes beyond the 1.93a appnote.txt:
725
726    1. Distance pointers never point before the beginning of the output
727       stream.
728    2. Distance pointers can point back across blocks, up to 32k away.
729    3. There is an implied maximum of 7 bits for the bit length table and
730       15 bits for the actual data.
731    4. If only one code exists, then it is encoded using one bit.  (Zero
732       would be more efficient, but perhaps a little confusing.)  If two
733       codes exist, they are coded using one bit each (0 and 1).
734    5. There is no way of sending zero distance codes--a dummy must be
735       sent if there are none.  (History: a pre 2.0 version of PKZIP would
736       store blocks with no distance codes, but this was discovered to be
737       too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
738       zero distance codes, which is sent as one code of zero bits in
739       length.
740    6. There are up to 286 literal/length codes.  Code 256 represents the
741       end-of-block.  Note however that the static length tree defines
742       288 codes just to fill out the Huffman codes.  Codes 286 and 287
743       cannot be used though, since there is no length base or extra bits
744       defined for them.  Similarily, there are up to 30 distance codes.
745       However, static trees define 32 codes (all 5 bits) to fill out the
746       Huffman codes, but the last two had better not show up in the data.
747    7. Unzip can check dynamic Huffman blocks for complete code sets.
748       The exception is that a single code would not be complete (see #4).
749    8. The five bits following the block type is really the number of
750       literal codes sent minus 257.
751    9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
752       (1+6+6).  Therefore, to output three times the length, you output
753       three codes (1+1+1), whereas to output four times the same length,
754       you only need two codes (1+3).  Hmm.
755   10. In the tree reconstruction algorithm, Code = Code + Increment
756       only if BitLength(i) is not zero.  (Pretty obvious.)
757   11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
758   12. Note: length code 284 can represent 227-258, but length code 285
759       really is 258.  The last length deserves its own, short code
760       since it gets used a lot in very redundant files.  The length
761       258 is special since 258 - 3 (the min match length) is 255.
762   13. The literal/length and distance code bit lengths are read as a
763       single stream of lengths.  It is possible (and advantageous) for
764       a repeat code (16, 17, or 18) to go across the boundary between
765       the two sets of lengths.
766  */
767
768
769 local void inflate_blocks_reset(
770         inflate_blocks_statef *s,
771         z_stream *z,
772         uLongf *c
773 )
774 {
775   if (s->checkfn != Z_NULL)
776     *c = s->check;
777   if (s->mode == BTREE || s->mode == DTREE)
778     ZFREE(z, s->sub.trees.blens, s->sub.trees.nblens * sizeof(uInt));
779   if (s->mode == CODES)
780   {
781     inflate_codes_free(s->sub.decode.codes, z);
782     inflate_trees_free(s->sub.decode.td, z);
783     inflate_trees_free(s->sub.decode.tl, z);
784   }
785   s->mode = TYPE;
786   s->bitk = 0;
787   s->bitb = 0;
788   s->read = s->write = s->window;
789   if (s->checkfn != Z_NULL)
790     s->check = (*s->checkfn)(0L, Z_NULL, 0);
791   Trace((stderr, "inflate:   blocks reset\n"));
792 }
793
794
795 local inflate_blocks_statef *inflate_blocks_new(
796         z_stream *z,
797         check_func c,
798         uInt w
799 )
800 {
801   inflate_blocks_statef *s;
802
803   if ((s = (inflate_blocks_statef *)ZALLOC
804        (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
805     return s;
806   if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
807   {
808     ZFREE(z, s, sizeof(struct inflate_blocks_state));
809     return Z_NULL;
810   }
811   s->end = s->window + w;
812   s->checkfn = c;
813   s->mode = TYPE;
814   Trace((stderr, "inflate:   blocks allocated\n"));
815   inflate_blocks_reset(s, z, &s->check);
816   return s;
817 }
818
819
820 local int inflate_blocks(
821         inflate_blocks_statef *s,
822         z_stream *z,
823         int r
824 )
825 {
826   uInt t;               /* temporary storage */
827   uLong b;              /* bit buffer */
828   uInt k;               /* bits in bit buffer */
829   Bytef *p;             /* input data pointer */
830   uInt n;               /* bytes available there */
831   Bytef *q;             /* output window write pointer */
832   uInt m;               /* bytes to end of window or read pointer */
833
834   /* copy input/output information to locals (UPDATE macro restores) */
835   LOAD
836
837   /* process input based on current state */
838   while (1) switch (s->mode)
839   {
840     case TYPE:
841       NEEDBITS(3)
842       t = (uInt)b & 7;
843       s->last = t & 1;
844       switch (t >> 1)
845       {
846         case 0:                         /* stored */
847           Trace((stderr, "inflate:     stored block%s\n",
848                  s->last ? " (last)" : ""));
849           DUMPBITS(3)
850           t = k & 7;                    /* go to byte boundary */
851           DUMPBITS(t)
852           s->mode = LENS;               /* get length of stored block */
853           break;
854         case 1:                         /* fixed */
855           Trace((stderr, "inflate:     fixed codes block%s\n",
856                  s->last ? " (last)" : ""));
857           {
858             uInt bl, bd;
859             inflate_huft *tl, *td;
860
861             inflate_trees_fixed(&bl, &bd, &tl, &td);
862             s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
863             if (s->sub.decode.codes == Z_NULL)
864             {
865               r = Z_MEM_ERROR;
866               LEAVE
867             }
868             s->sub.decode.tl = Z_NULL;  /* don't try to free these */
869             s->sub.decode.td = Z_NULL;
870           }
871           DUMPBITS(3)
872           s->mode = CODES;
873           break;
874         case 2:                         /* dynamic */
875           Trace((stderr, "inflate:     dynamic codes block%s\n",
876                  s->last ? " (last)" : ""));
877           DUMPBITS(3)
878           s->mode = TABLE;
879           break;
880         case 3:                         /* illegal */
881           DUMPBITS(3)
882           s->mode = BADB;
883           z->msg = "invalid block type";
884           r = Z_DATA_ERROR;
885           LEAVE
886       }
887       break;
888     case LENS:
889       NEEDBITS(32)
890       if (((~b) >> 16) != (b & 0xffff))
891       {
892         s->mode = BADB;
893         z->msg = "invalid stored block lengths";
894         r = Z_DATA_ERROR;
895         LEAVE
896       }
897       s->sub.left = (uInt)b & 0xffff;
898       b = k = 0;                      /* dump bits */
899       Tracev((stderr, "inflate:       stored length %u\n", s->sub.left));
900       s->mode = s->sub.left ? STORED : TYPE;
901       break;
902     case STORED:
903       if (n == 0)
904         LEAVE
905       NEEDOUT
906       t = s->sub.left;
907       if (t > n) t = n;
908       if (t > m) t = m;
909       zmemcpy(q, p, t);
910       p += t;  n -= t;
911       q += t;  m -= t;
912       if ((s->sub.left -= t) != 0)
913         break;
914       Tracev((stderr, "inflate:       stored end, %lu total out\n",
915               z->total_out + (q >= s->read ? q - s->read :
916               (s->end - s->read) + (q - s->window))));
917       s->mode = s->last ? DRY : TYPE;
918       break;
919     case TABLE:
920       NEEDBITS(14)
921       s->sub.trees.table = t = (uInt)b & 0x3fff;
922 #ifndef PKZIP_BUG_WORKAROUND
923       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
924       {
925         s->mode = BADB;
926         z->msg = "too many length or distance symbols";
927         r = Z_DATA_ERROR;
928         LEAVE
929       }
930 #endif
931       t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
932       if (t < 19)
933         t = 19;
934       if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
935       {
936         r = Z_MEM_ERROR;
937         LEAVE
938       }
939       s->sub.trees.nblens = t;
940       DUMPBITS(14)
941       s->sub.trees.index = 0;
942       Tracev((stderr, "inflate:       table sizes ok\n"));
943       s->mode = BTREE;
944     case BTREE:
945       while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
946       {
947         NEEDBITS(3)
948         s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
949         DUMPBITS(3)
950       }
951       while (s->sub.trees.index < 19)
952         s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
953       s->sub.trees.bb = 7;
954       t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
955                              &s->sub.trees.tb, z);
956       if (t != Z_OK)
957       {
958         r = t;
959         if (r == Z_DATA_ERROR)
960           s->mode = BADB;
961         LEAVE
962       }
963       s->sub.trees.index = 0;
964       Tracev((stderr, "inflate:       bits tree ok\n"));
965       s->mode = DTREE;
966     case DTREE:
967       while (t = s->sub.trees.table,
968              s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
969       {
970         inflate_huft *h;
971         uInt i, j, c;
972
973         t = s->sub.trees.bb;
974         NEEDBITS(t)
975         h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
976         t = h->word.what.Bits;
977         c = h->more.Base;
978         if (c < 16)
979         {
980           DUMPBITS(t)
981           s->sub.trees.blens[s->sub.trees.index++] = c;
982         }
983         else /* c == 16..18 */
984         {
985           i = c == 18 ? 7 : c - 14;
986           j = c == 18 ? 11 : 3;
987           NEEDBITS(t + i)
988           DUMPBITS(t)
989           j += (uInt)b & inflate_mask[i];
990           DUMPBITS(i)
991           i = s->sub.trees.index;
992           t = s->sub.trees.table;
993           if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
994               (c == 16 && i < 1))
995           {
996             s->mode = BADB;
997             z->msg = "invalid bit length repeat";
998             r = Z_DATA_ERROR;
999             LEAVE
1000           }
1001           c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
1002           do {
1003             s->sub.trees.blens[i++] = c;
1004           } while (--j);
1005           s->sub.trees.index = i;
1006         }
1007       }
1008       inflate_trees_free(s->sub.trees.tb, z);
1009       s->sub.trees.tb = Z_NULL;
1010       {
1011         uInt bl, bd;
1012         inflate_huft *tl, *td;
1013         inflate_codes_statef *c;
1014
1015         bl = 9;         /* must be <= 9 for lookahead assumptions */
1016         bd = 6;         /* must be <= 9 for lookahead assumptions */
1017         t = s->sub.trees.table;
1018         t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
1019                                   s->sub.trees.blens, &bl, &bd, &tl, &td, z);
1020         if (t != Z_OK)
1021         {
1022           if (t == (uInt)Z_DATA_ERROR)
1023             s->mode = BADB;
1024           r = t;
1025           LEAVE
1026         }
1027         Tracev((stderr, "inflate:       trees ok\n"));
1028         if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
1029         {
1030           inflate_trees_free(td, z);
1031           inflate_trees_free(tl, z);
1032           r = Z_MEM_ERROR;
1033           LEAVE
1034         }
1035         ZFREE(z, s->sub.trees.blens, s->sub.trees.nblens * sizeof(uInt));
1036         s->sub.decode.codes = c;
1037         s->sub.decode.tl = tl;
1038         s->sub.decode.td = td;
1039       }
1040       s->mode = CODES;
1041     case CODES:
1042       UPDATE
1043       if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
1044         return inflate_flush(s, z, r);
1045       r = Z_OK;
1046       inflate_codes_free(s->sub.decode.codes, z);
1047       inflate_trees_free(s->sub.decode.td, z);
1048       inflate_trees_free(s->sub.decode.tl, z);
1049       LOAD
1050       Tracev((stderr, "inflate:       codes end, %lu total out\n",
1051               z->total_out + (q >= s->read ? q - s->read :
1052               (s->end - s->read) + (q - s->window))));
1053       if (!s->last)
1054       {
1055         s->mode = TYPE;
1056         break;
1057       }
1058       if (k > 7)              /* return unused byte, if any */
1059       {
1060         Assert(k < 16, "inflate_codes grabbed too many bytes")
1061         k -= 8;
1062         n++;
1063         p--;                    /* can always return one */
1064       }
1065       s->mode = DRY;
1066     case DRY:
1067       FLUSH
1068       if (s->read != s->write)
1069         LEAVE
1070       s->mode = DONEB;
1071     case DONEB:
1072       r = Z_STREAM_END;
1073       LEAVE
1074     case BADB:
1075       r = Z_DATA_ERROR;
1076       LEAVE
1077     default:
1078       r = Z_STREAM_ERROR;
1079       LEAVE
1080   }
1081 }
1082
1083
1084 local int inflate_blocks_free(
1085         inflate_blocks_statef *s,
1086         z_stream *z,
1087         uLongf *c
1088 )
1089 {
1090   inflate_blocks_reset(s, z, c);
1091   ZFREE(z, s->window, s->end - s->window);
1092   ZFREE(z, s, sizeof(struct inflate_blocks_state));
1093   Trace((stderr, "inflate:   blocks freed\n"));
1094   return Z_OK;
1095 }
1096
1097 /*
1098  * This subroutine adds the data at next_in/avail_in to the output history
1099  * without performing any output.  The output buffer must be "caught up";
1100  * i.e. no pending output (hence s->read equals s->write), and the state must
1101  * be BLOCKS (i.e. we should be willing to see the start of a series of
1102  * BLOCKS).  On exit, the output will also be caught up, and the checksum
1103  * will have been updated if need be.
1104  */
1105 local int inflate_addhistory(
1106         inflate_blocks_statef *s,
1107         z_stream *z
1108 )
1109 {
1110     uLong b;              /* bit buffer */  /* NOT USED HERE */
1111     uInt k;               /* bits in bit buffer */ /* NOT USED HERE */
1112     uInt t;               /* temporary storage */
1113     Bytef *p;             /* input data pointer */
1114     uInt n;               /* bytes available there */
1115     Bytef *q;             /* output window write pointer */
1116     uInt m;               /* bytes to end of window or read pointer */
1117
1118     if (s->read != s->write)
1119         return Z_STREAM_ERROR;
1120     if (s->mode != TYPE)
1121         return Z_DATA_ERROR;
1122
1123     /* we're ready to rock */
1124     LOAD
1125     /* while there is input ready, copy to output buffer, moving
1126      * pointers as needed.
1127      */
1128     while (n) {
1129         t = n;  /* how many to do */
1130         /* is there room until end of buffer? */
1131         if (t > m) t = m;
1132         /* update check information */
1133         if (s->checkfn != Z_NULL)
1134             s->check = (*s->checkfn)(s->check, q, t);
1135         zmemcpy(q, p, t);
1136         q += t;
1137         p += t;
1138         n -= t;
1139         z->total_out += t;
1140         s->read = q;    /* drag read pointer forward */
1141 /*      WRAP  */        /* expand WRAP macro by hand to handle s->read */
1142         if (q == s->end) {
1143             s->read = q = s->window;
1144             m = WAVAIL;
1145         }
1146     }
1147     UPDATE
1148     return Z_OK;
1149 }
1150
1151
1152 /*
1153  * At the end of a Deflate-compressed PPP packet, we expect to have seen
1154  * a `stored' block type value but not the (zero) length bytes.
1155  */
1156 local int inflate_packet_flush(
1157         inflate_blocks_statef *s
1158 )
1159 {
1160     if (s->mode != LENS)
1161         return Z_DATA_ERROR;
1162     s->mode = TYPE;
1163     return Z_OK;
1164 }
1165
1166
1167 /*+++++*/
1168 /* inftrees.c -- generate Huffman trees for efficient decoding
1169  * Copyright (C) 1995 Mark Adler
1170  * For conditions of distribution and use, see copyright notice in zlib.h 
1171  */
1172
1173 /* simplify the use of the inflate_huft type with some defines */
1174 #define base more.Base
1175 #define next more.Next
1176 #define exop word.what.Exop
1177 #define bits word.what.Bits
1178
1179
1180 local int huft_build OF((
1181     uIntf *,            /* code lengths in bits */
1182     uInt,               /* number of codes */
1183     uInt,               /* number of "simple" codes */
1184     uIntf *,            /* list of base values for non-simple codes */
1185     uIntf *,            /* list of extra bits for non-simple codes */
1186     inflate_huft * FAR*,/* result: starting table */
1187     uIntf *,            /* maximum lookup bits (returns actual) */
1188     z_stream *));       /* for zalloc function */
1189
1190 local voidpf falloc OF((
1191     voidpf,             /* opaque pointer (not used) */
1192     uInt,               /* number of items */
1193     uInt));             /* size of item */
1194
1195 local void ffree OF((
1196     voidpf q,           /* opaque pointer (not used) */
1197     voidpf p,           /* what to free (not used) */
1198     uInt n));           /* number of bytes (not used) */
1199
1200 /* Tables for deflate from PKZIP's appnote.txt. */
1201 local uInt cplens[] = { /* Copy lengths for literal codes 257..285 */
1202         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
1203         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
1204         /* actually lengths - 2; also see note #13 above about 258 */
1205 local uInt cplext[] = { /* Extra bits for literal codes 257..285 */
1206         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
1207         3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 192, 192}; /* 192==invalid */
1208 local uInt cpdist[] = { /* Copy offsets for distance codes 0..29 */
1209         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
1210         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
1211         8193, 12289, 16385, 24577};
1212 local uInt cpdext[] = { /* Extra bits for distance codes */
1213         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
1214         7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
1215         12, 12, 13, 13};
1216
1217 /*
1218    Huffman code decoding is performed using a multi-level table lookup.
1219    The fastest way to decode is to simply build a lookup table whose
1220    size is determined by the longest code.  However, the time it takes
1221    to build this table can also be a factor if the data being decoded
1222    is not very long.  The most common codes are necessarily the
1223    shortest codes, so those codes dominate the decoding time, and hence
1224    the speed.  The idea is you can have a shorter table that decodes the
1225    shorter, more probable codes, and then point to subsidiary tables for
1226    the longer codes.  The time it costs to decode the longer codes is
1227    then traded against the time it takes to make longer tables.
1228
1229    This results of this trade are in the variables lbits and dbits
1230    below.  lbits is the number of bits the first level table for literal/
1231    length codes can decode in one step, and dbits is the same thing for
1232    the distance codes.  Subsequent tables are also less than or equal to
1233    those sizes.  These values may be adjusted either when all of the
1234    codes are shorter than that, in which case the longest code length in
1235    bits is used, or when the shortest code is *longer* than the requested
1236    table size, in which case the length of the shortest code in bits is
1237    used.
1238
1239    There are two different values for the two tables, since they code a
1240    different number of possibilities each.  The literal/length table
1241    codes 286 possible values, or in a flat code, a little over eight
1242    bits.  The distance table codes 30 possible values, or a little less
1243    than five bits, flat.  The optimum values for speed end up being
1244    about one bit more than those, so lbits is 8+1 and dbits is 5+1.
1245    The optimum values may differ though from machine to machine, and
1246    possibly even between compilers.  Your mileage may vary.
1247  */
1248
1249
1250 /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
1251 #define BMAX 15         /* maximum bit length of any code */
1252 #define N_MAX 288       /* maximum number of codes in any set */
1253
1254 #ifdef DEBUG_ZLIB
1255   uInt inflate_hufts;
1256 #endif
1257
1258 local int huft_build(
1259         uIntf *b,               /* code lengths in bits (all assumed <= BMAX) */
1260         uInt n,                 /* number of codes (assumed <= N_MAX) */
1261         uInt s,                 /* number of simple-valued codes (0..s-1) */
1262         uIntf *d,               /* list of base values for non-simple codes */
1263         uIntf *e,               /* list of extra bits for non-simple codes */
1264         inflate_huft * FAR *t,  /* result: starting table */
1265         uIntf *m,               /* maximum lookup bits, returns actual */
1266         z_stream *zs            /* for zalloc function */
1267 )
1268 /* Given a list of code lengths and a maximum table size, make a set of
1269    tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
1270    if the given code set is incomplete (the tables are still built in this
1271    case), Z_DATA_ERROR if the input is invalid (all zero length codes or an
1272    over-subscribed set of lengths), or Z_MEM_ERROR if not enough memory. */
1273 {
1274
1275   uInt a;                       /* counter for codes of length k */
1276   uInt c[BMAX+1];               /* bit length count table */
1277   uInt f;                       /* i repeats in table every f entries */
1278   int g;                        /* maximum code length */
1279   int h;                        /* table level */
1280   register uInt i;              /* counter, current code */
1281   register uInt j;              /* counter */
1282   register int k;               /* number of bits in current code */
1283   int l;                        /* bits per table (returned in m) */
1284   register uIntf *p;            /* pointer into c[], b[], or v[] */
1285   inflate_huft *q;              /* points to current table */
1286   struct inflate_huft_s r;      /* table entry for structure assignment */
1287   inflate_huft *u[BMAX];        /* table stack */
1288   uInt v[N_MAX];                /* values in order of bit length */
1289   register int w;               /* bits before this table == (l * h) */
1290   uInt x[BMAX+1];               /* bit offsets, then code stack */
1291   uIntf *xp;                    /* pointer into x */
1292   int y;                        /* number of dummy codes added */
1293   uInt z;                       /* number of entries in current table */
1294
1295
1296   /* Generate counts for each bit length */
1297   p = c;
1298 #define C0 *p++ = 0;
1299 #define C2 C0 C0 C0 C0
1300 #define C4 C2 C2 C2 C2
1301   C4                            /* clear c[]--assume BMAX+1 is 16 */
1302   p = b;  i = n;
1303   do {
1304     c[*p++]++;                  /* assume all entries <= BMAX */
1305   } while (--i);
1306   if (c[0] == n)                /* null input--all zero length codes */
1307   {
1308     *t = (inflate_huft *)Z_NULL;
1309     *m = 0;
1310     return Z_OK;
1311   }
1312
1313
1314   /* Find minimum and maximum length, bound *m by those */
1315   l = *m;
1316   for (j = 1; j <= BMAX; j++)
1317     if (c[j])
1318       break;
1319   k = j;                        /* minimum code length */
1320   if ((uInt)l < j)
1321     l = j;
1322   for (i = BMAX; i; i--)
1323     if (c[i])
1324       break;
1325   g = i;                        /* maximum code length */
1326   if ((uInt)l > i)
1327     l = i;
1328   *m = l;
1329
1330
1331   /* Adjust last length count to fill out codes, if needed */
1332   for (y = 1 << j; j < i; j++, y <<= 1)
1333     if ((y -= c[j]) < 0)
1334       return Z_DATA_ERROR;
1335   if ((y -= c[i]) < 0)
1336     return Z_DATA_ERROR;
1337   c[i] += y;
1338
1339
1340   /* Generate starting offsets into the value table for each length */
1341   x[1] = j = 0;
1342   p = c + 1;  xp = x + 2;
1343   while (--i) {                 /* note that i == g from above */
1344     *xp++ = (j += *p++);
1345   }
1346
1347
1348   /* Make a table of values in order of bit lengths */
1349   p = b;  i = 0;
1350   do {
1351     if ((j = *p++) != 0)
1352       v[x[j]++] = i;
1353   } while (++i < n);
1354
1355
1356   /* Generate the Huffman codes and for each, make the table entries */
1357   x[0] = i = 0;                 /* first Huffman code is zero */
1358   p = v;                        /* grab values in bit order */
1359   h = -1;                       /* no tables yet--level -1 */
1360   w = -l;                       /* bits decoded == (l * h) */
1361   u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
1362   q = (inflate_huft *)Z_NULL;   /* ditto */
1363   z = 0;                        /* ditto */
1364
1365   /* go through the bit lengths (k already is bits in shortest code) */
1366   for (; k <= g; k++)
1367   {
1368     a = c[k];
1369     while (a--)
1370     {
1371       /* here i is the Huffman code of length k bits for value *p */
1372       /* make tables up to required level */
1373       while (k > w + l)
1374       {
1375         h++;
1376         w += l;                 /* previous table always l bits */
1377
1378         /* compute minimum size table less than or equal to l bits */
1379         z = (z = g - w) > (uInt)l ? l : z;      /* table size upper limit */
1380         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
1381         {                       /* too few codes for k-w bit table */
1382           f -= a + 1;           /* deduct codes from patterns left */
1383           xp = c + k;
1384           if (j < z)
1385             while (++j < z)     /* try smaller tables up to z bits */
1386             {
1387               if ((f <<= 1) <= *++xp)
1388                 break;          /* enough codes to use up j bits */
1389               f -= *xp;         /* else deduct codes from patterns */
1390             }
1391         }
1392         z = 1 << j;             /* table entries for j-bit table */
1393
1394         /* allocate and link in new table */
1395         if ((q = (inflate_huft *)ZALLOC
1396              (zs,z + 1,sizeof(inflate_huft))) == Z_NULL)
1397         {
1398           if (h)
1399             inflate_trees_free(u[0], zs);
1400           return Z_MEM_ERROR;   /* not enough memory */
1401         }
1402         q->word.Nalloc = z + 1;
1403 #ifdef DEBUG_ZLIB
1404         inflate_hufts += z + 1;
1405 #endif
1406         *t = q + 1;             /* link to list for huft_free() */
1407         *(t = &(q->next)) = Z_NULL;
1408         u[h] = ++q;             /* table starts after link */
1409
1410         /* connect to last table, if there is one */
1411         if (h)
1412         {
1413           x[h] = i;             /* save pattern for backing up */
1414           r.bits = (Byte)l;     /* bits to dump before this table */
1415           r.exop = (Byte)j;     /* bits in this table */
1416           r.next = q;           /* pointer to this table */
1417           j = i >> (w - l);     /* (get around Turbo C bug) */
1418           u[h-1][j] = r;        /* connect to last table */
1419         }
1420       }
1421
1422       /* set up table entry in r */
1423       r.bits = (Byte)(k - w);
1424       if (p >= v + n)
1425         r.exop = 128 + 64;      /* out of values--invalid code */
1426       else if (*p < s)
1427       {
1428         r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
1429         r.base = *p++;          /* simple code is just the value */
1430       }
1431       else
1432       {
1433         r.exop = (Byte)e[*p - s] + 16 + 64; /* non-simple--look up in lists */
1434         r.base = d[*p++ - s];
1435       }
1436
1437       /* fill code-like entries with r */
1438       f = 1 << (k - w);
1439       for (j = i >> w; j < z; j += f)
1440         q[j] = r;
1441
1442       /* backwards increment the k-bit code i */
1443       for (j = 1 << (k - 1); i & j; j >>= 1)
1444         i ^= j;
1445       i ^= j;
1446
1447       /* backup over finished tables */
1448       while ((i & ((1 << w) - 1)) != x[h])
1449       {
1450         h--;                    /* don't need to update q */
1451         w -= l;
1452       }
1453     }
1454   }
1455
1456
1457   /* Return Z_BUF_ERROR if we were given an incomplete table */
1458   return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
1459 }
1460
1461
1462 local int inflate_trees_bits(
1463         uIntf *c,               /* 19 code lengths */
1464         uIntf *bb,              /* bits tree desired/actual depth */
1465         inflate_huft * FAR *tb, /* bits tree result */
1466         z_stream *z             /* for zfree function */
1467 )
1468 {
1469   int r;
1470
1471   r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, tb, bb, z);
1472   if (r == Z_DATA_ERROR)
1473     z->msg = "oversubscribed dynamic bit lengths tree";
1474   else if (r == Z_BUF_ERROR)
1475   {
1476     inflate_trees_free(*tb, z);
1477     z->msg = "incomplete dynamic bit lengths tree";
1478     r = Z_DATA_ERROR;
1479   }
1480   return r;
1481 }
1482
1483
1484 local int inflate_trees_dynamic(
1485         uInt nl,                /* number of literal/length codes */
1486         uInt nd,                /* number of distance codes */
1487         uIntf *c,               /* that many (total) code lengths */
1488         uIntf *bl,              /* literal desired/actual bit depth */
1489         uIntf *bd,              /* distance desired/actual bit depth */
1490         inflate_huft * FAR *tl, /* literal/length tree result */
1491         inflate_huft * FAR *td, /* distance tree result */
1492         z_stream *z             /* for zfree function */
1493 )
1494 {
1495   int r;
1496
1497   /* build literal/length tree */
1498   if ((r = huft_build(c, nl, 257, cplens, cplext, tl, bl, z)) != Z_OK)
1499   {
1500     if (r == Z_DATA_ERROR)
1501       z->msg = "oversubscribed literal/length tree";
1502     else if (r == Z_BUF_ERROR)
1503     {
1504       inflate_trees_free(*tl, z);
1505       z->msg = "incomplete literal/length tree";
1506       r = Z_DATA_ERROR;
1507     }
1508     return r;
1509   }
1510
1511   /* build distance tree */
1512   if ((r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, z)) != Z_OK)
1513   {
1514     if (r == Z_DATA_ERROR)
1515       z->msg = "oversubscribed literal/length tree";
1516     else if (r == Z_BUF_ERROR) {
1517 #ifdef PKZIP_BUG_WORKAROUND
1518       r = Z_OK;
1519     }
1520 #else
1521       inflate_trees_free(*td, z);
1522       z->msg = "incomplete literal/length tree";
1523       r = Z_DATA_ERROR;
1524     }
1525     inflate_trees_free(*tl, z);
1526     return r;
1527 #endif
1528   }
1529
1530   /* done */
1531   return Z_OK;
1532 }
1533
1534
1535 /* build fixed tables only once--keep them here */
1536 local int fixed_lock = 0;
1537 local int fixed_built = 0;
1538 #define FIXEDH 530      /* number of hufts used by fixed tables */
1539 local uInt fixed_left = FIXEDH;
1540 local inflate_huft fixed_mem[FIXEDH];
1541 local uInt fixed_bl;
1542 local uInt fixed_bd;
1543 local inflate_huft *fixed_tl;
1544 local inflate_huft *fixed_td;
1545
1546
1547 local voidpf falloc(
1548         voidpf q,       /* opaque pointer (not used) */
1549         uInt n,         /* number of items */
1550         uInt s          /* size of item */
1551 )
1552 {
1553   Assert(s == sizeof(inflate_huft) && n <= fixed_left,
1554          "inflate_trees falloc overflow");
1555   if (q) s++; /* to make some compilers happy */
1556   fixed_left -= n;
1557   return (voidpf)(fixed_mem + fixed_left);
1558 }
1559
1560
1561 local void ffree(
1562         voidpf q,
1563         voidpf p,
1564         uInt n
1565 )
1566 {
1567   Assert(0, "inflate_trees ffree called!");
1568   if (q) q = p; /* to make some compilers happy */
1569 }
1570
1571
1572 local int inflate_trees_fixed(
1573         uIntf *bl,               /* literal desired/actual bit depth */
1574         uIntf *bd,               /* distance desired/actual bit depth */
1575         inflate_huft * FAR *tl,  /* literal/length tree result */
1576         inflate_huft * FAR *td   /* distance tree result */
1577 )
1578 {
1579   /* build fixed tables if not built already--lock out other instances */
1580   while (++fixed_lock > 1)
1581     fixed_lock--;
1582   if (!fixed_built)
1583   {
1584     int k;              /* temporary variable */
1585     unsigned c[288];    /* length list for huft_build */
1586     z_stream z;         /* for falloc function */
1587
1588     /* set up fake z_stream for memory routines */
1589     z.zalloc = falloc;
1590     z.zfree = ffree;
1591     z.opaque = Z_NULL;
1592
1593     /* literal table */
1594     for (k = 0; k < 144; k++)
1595       c[k] = 8;
1596     for (; k < 256; k++)
1597       c[k] = 9;
1598     for (; k < 280; k++)
1599       c[k] = 7;
1600     for (; k < 288; k++)
1601       c[k] = 8;
1602     fixed_bl = 7;
1603     huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, &z);
1604
1605     /* distance table */
1606     for (k = 0; k < 30; k++)
1607       c[k] = 5;
1608     fixed_bd = 5;
1609     huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, &z);
1610
1611     /* done */
1612     fixed_built = 1;
1613   }
1614   fixed_lock--;
1615   *bl = fixed_bl;
1616   *bd = fixed_bd;
1617   *tl = fixed_tl;
1618   *td = fixed_td;
1619   return Z_OK;
1620 }
1621
1622
1623 local int inflate_trees_free(
1624         inflate_huft *t,        /* table to free */
1625         z_stream *z             /* for zfree function */
1626 )
1627 /* Free the malloc'ed tables built by huft_build(), which makes a linked
1628    list of the tables it made, with the links in a dummy first entry of
1629    each table. */
1630 {
1631   register inflate_huft *p, *q;
1632
1633   /* Go through linked list, freeing from the malloced (t[-1]) address. */
1634   p = t;
1635   while (p != Z_NULL)
1636   {
1637     q = (--p)->next;
1638     ZFREE(z, p, p->word.Nalloc * sizeof(inflate_huft));
1639     p = q;
1640   } 
1641   return Z_OK;
1642 }
1643
1644 /*+++++*/
1645 /* infcodes.c -- process literals and length/distance pairs
1646  * Copyright (C) 1995 Mark Adler
1647  * For conditions of distribution and use, see copyright notice in zlib.h 
1648  */
1649
1650 /* simplify the use of the inflate_huft type with some defines */
1651 #define base more.Base
1652 #define next more.Next
1653 #define exop word.what.Exop
1654 #define bits word.what.Bits
1655
1656 /* inflate codes private state */
1657 struct inflate_codes_state {
1658
1659   /* mode */
1660   enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
1661       START,    /* x: set up for LEN */
1662       LEN,      /* i: get length/literal/eob next */
1663       LENEXT,   /* i: getting length extra (have base) */
1664       DIST,     /* i: get distance next */
1665       DISTEXT,  /* i: getting distance extra */
1666       COPY,     /* o: copying bytes in window, waiting for space */
1667       LIT,      /* o: got literal, waiting for output space */
1668       WASH,     /* o: got eob, possibly still output waiting */
1669       END,      /* x: got eob and all data flushed */
1670       BADCODE}  /* x: got error */
1671     mode;               /* current inflate_codes mode */
1672
1673   /* mode dependent information */
1674   uInt len;
1675   union {
1676     struct {
1677       inflate_huft *tree;       /* pointer into tree */
1678       uInt need;                /* bits needed */
1679     } code;             /* if LEN or DIST, where in tree */
1680     uInt lit;           /* if LIT, literal */
1681     struct {
1682       uInt get;                 /* bits to get for extra */
1683       uInt dist;                /* distance back to copy from */
1684     } copy;             /* if EXT or COPY, where and how much */
1685   } sub;                /* submode */
1686
1687   /* mode independent information */
1688   Byte lbits;           /* ltree bits decoded per branch */
1689   Byte dbits;           /* dtree bits decoder per branch */
1690   inflate_huft *ltree;          /* literal/length/eob tree */
1691   inflate_huft *dtree;          /* distance tree */
1692
1693 };
1694
1695
1696 local inflate_codes_statef *inflate_codes_new(
1697         uInt bl,
1698         uInt bd,
1699         inflate_huft *tl,
1700         inflate_huft *td,
1701         z_stream *z
1702 )
1703 {
1704   inflate_codes_statef *c;
1705
1706   if ((c = (inflate_codes_statef *)
1707        ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
1708   {
1709     c->mode = START;
1710     c->lbits = (Byte)bl;
1711     c->dbits = (Byte)bd;
1712     c->ltree = tl;
1713     c->dtree = td;
1714     Tracev((stderr, "inflate:       codes new\n"));
1715   }
1716   return c;
1717 }
1718
1719
1720 local int inflate_codes(
1721         inflate_blocks_statef *s,
1722         z_stream *z,
1723         int r
1724 )
1725 {
1726   uInt j;               /* temporary storage */
1727   inflate_huft *t;      /* temporary pointer */
1728   uInt e;               /* extra bits or operation */
1729   uLong b;              /* bit buffer */
1730   uInt k;               /* bits in bit buffer */
1731   Bytef *p;             /* input data pointer */
1732   uInt n;               /* bytes available there */
1733   Bytef *q;             /* output window write pointer */
1734   uInt m;               /* bytes to end of window or read pointer */
1735   Bytef *f;             /* pointer to copy strings from */
1736   inflate_codes_statef *c = s->sub.decode.codes;  /* codes state */
1737
1738   /* copy input/output information to locals (UPDATE macro restores) */
1739   LOAD
1740
1741   /* process input and output based on current state */
1742   while (1) switch (c->mode)
1743   {             /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
1744     case START:         /* x: set up for LEN */
1745 #ifndef SLOW
1746       if (m >= 258 && n >= 10)
1747       {
1748         UPDATE
1749         r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
1750         LOAD
1751         if (r != Z_OK)
1752         {
1753           c->mode = r == Z_STREAM_END ? WASH : BADCODE;
1754           break;
1755         }
1756       }
1757 #endif /* !SLOW */
1758       c->sub.code.need = c->lbits;
1759       c->sub.code.tree = c->ltree;
1760       c->mode = LEN;
1761     case LEN:           /* i: get length/literal/eob next */
1762       j = c->sub.code.need;
1763       NEEDBITS(j)
1764       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
1765       DUMPBITS(t->bits)
1766       e = (uInt)(t->exop);
1767       if (e == 0)               /* literal */
1768       {
1769         c->sub.lit = t->base;
1770         Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
1771                  "inflate:         literal '%c'\n" :
1772                  "inflate:         literal 0x%02x\n", t->base));
1773         c->mode = LIT;
1774         break;
1775       }
1776       if (e & 16)               /* length */
1777       {
1778         c->sub.copy.get = e & 15;
1779         c->len = t->base;
1780         c->mode = LENEXT;
1781         break;
1782       }
1783       if ((e & 64) == 0)        /* next table */
1784       {
1785         c->sub.code.need = e;
1786         c->sub.code.tree = t->next;
1787         break;
1788       }
1789       if (e & 32)               /* end of block */
1790       {
1791         Tracevv((stderr, "inflate:         end of block\n"));
1792         c->mode = WASH;
1793         break;
1794       }
1795       c->mode = BADCODE;        /* invalid code */
1796       z->msg = "invalid literal/length code";
1797       r = Z_DATA_ERROR;
1798       LEAVE
1799     case LENEXT:        /* i: getting length extra (have base) */
1800       j = c->sub.copy.get;
1801       NEEDBITS(j)
1802       c->len += (uInt)b & inflate_mask[j];
1803       DUMPBITS(j)
1804       c->sub.code.need = c->dbits;
1805       c->sub.code.tree = c->dtree;
1806       Tracevv((stderr, "inflate:         length %u\n", c->len));
1807       c->mode = DIST;
1808     case DIST:          /* i: get distance next */
1809       j = c->sub.code.need;
1810       NEEDBITS(j)
1811       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
1812       DUMPBITS(t->bits)
1813       e = (uInt)(t->exop);
1814       if (e & 16)               /* distance */
1815       {
1816         c->sub.copy.get = e & 15;
1817         c->sub.copy.dist = t->base;
1818         c->mode = DISTEXT;
1819         break;
1820       }
1821       if ((e & 64) == 0)        /* next table */
1822       {
1823         c->sub.code.need = e;
1824         c->sub.code.tree = t->next;
1825         break;
1826       }
1827       c->mode = BADCODE;        /* invalid code */
1828       z->msg = "invalid distance code";
1829       r = Z_DATA_ERROR;
1830       LEAVE
1831     case DISTEXT:       /* i: getting distance extra */
1832       j = c->sub.copy.get;
1833       NEEDBITS(j)
1834       c->sub.copy.dist += (uInt)b & inflate_mask[j];
1835       DUMPBITS(j)
1836       Tracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
1837       c->mode = COPY;
1838     case COPY:          /* o: copying bytes in window, waiting for space */
1839 #ifndef __TURBOC__ /* Turbo C bug for following expression */
1840       f = (uInt)(q - s->window) < c->sub.copy.dist ?
1841           s->end - (c->sub.copy.dist - (q - s->window)) :
1842           q - c->sub.copy.dist;
1843 #else
1844       f = q - c->sub.copy.dist;
1845       if ((uInt)(q - s->window) < c->sub.copy.dist)
1846         f = s->end - (c->sub.copy.dist - (q - s->window));
1847 #endif
1848       while (c->len)
1849       {
1850         NEEDOUT
1851         OUTBYTE(*f++)
1852         if (f == s->end)
1853           f = s->window;
1854         c->len--;
1855       }
1856       c->mode = START;
1857       break;
1858     case LIT:           /* o: got literal, waiting for output space */
1859       NEEDOUT
1860       OUTBYTE(c->sub.lit)
1861       c->mode = START;
1862       break;
1863     case WASH:          /* o: got eob, possibly more output */
1864       FLUSH
1865       if (s->read != s->write)
1866         LEAVE
1867       c->mode = END;
1868     case END:
1869       r = Z_STREAM_END;
1870       LEAVE
1871     case BADCODE:       /* x: got error */
1872       r = Z_DATA_ERROR;
1873       LEAVE
1874     default:
1875       r = Z_STREAM_ERROR;
1876       LEAVE
1877   }
1878 }
1879
1880
1881 local void inflate_codes_free(
1882         inflate_codes_statef *c,
1883         z_stream *z
1884 )
1885 {
1886   ZFREE(z, c, sizeof(struct inflate_codes_state));
1887   Tracev((stderr, "inflate:       codes free\n"));
1888 }
1889
1890 /*+++++*/
1891 /* inflate_util.c -- data and routines common to blocks and codes
1892  * Copyright (C) 1995 Mark Adler
1893  * For conditions of distribution and use, see copyright notice in zlib.h 
1894  */
1895
1896 /* copy as much as possible from the sliding window to the output area */
1897 local int inflate_flush(
1898         inflate_blocks_statef *s,
1899         z_stream *z,
1900         int r
1901 )
1902 {
1903   uInt n;
1904   Bytef *p, *q;
1905
1906   /* local copies of source and destination pointers */
1907   p = z->next_out;
1908   q = s->read;
1909
1910   /* compute number of bytes to copy as far as end of window */
1911   n = (uInt)((q <= s->write ? s->write : s->end) - q);
1912   if (n > z->avail_out) n = z->avail_out;
1913   if (n && r == Z_BUF_ERROR) r = Z_OK;
1914
1915   /* update counters */
1916   z->avail_out -= n;
1917   z->total_out += n;
1918
1919   /* update check information */
1920   if (s->checkfn != Z_NULL)
1921     s->check = (*s->checkfn)(s->check, q, n);
1922
1923   /* copy as far as end of window */
1924   zmemcpy(p, q, n);
1925   p += n;
1926   q += n;
1927
1928   /* see if more to copy at beginning of window */
1929   if (q == s->end)
1930   {
1931     /* wrap pointers */
1932     q = s->window;
1933     if (s->write == s->end)
1934       s->write = s->window;
1935
1936     /* compute bytes to copy */
1937     n = (uInt)(s->write - q);
1938     if (n > z->avail_out) n = z->avail_out;
1939     if (n && r == Z_BUF_ERROR) r = Z_OK;
1940
1941     /* update counters */
1942     z->avail_out -= n;
1943     z->total_out += n;
1944
1945     /* update check information */
1946     if (s->checkfn != Z_NULL)
1947       s->check = (*s->checkfn)(s->check, q, n);
1948
1949     /* copy */
1950     zmemcpy(p, q, n);
1951     p += n;
1952     q += n;
1953   }
1954
1955   /* update pointers */
1956   z->next_out = p;
1957   s->read = q;
1958
1959   /* done */
1960   return r;
1961 }
1962
1963
1964 /*+++++*/
1965 /* inffast.c -- process literals and length/distance pairs fast
1966  * Copyright (C) 1995 Mark Adler
1967  * For conditions of distribution and use, see copyright notice in zlib.h 
1968  */
1969
1970 /* simplify the use of the inflate_huft type with some defines */
1971 #define base more.Base
1972 #define next more.Next
1973 #define exop word.what.Exop
1974 #define bits word.what.Bits
1975
1976 /* macros for bit input with no checking and for returning unused bytes */
1977 #define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
1978 #define UNGRAB {n+=(c=k>>3);p-=c;k&=7;}
1979
1980 /* Called with number of bytes left to write in window at least 258
1981    (the maximum string length) and number of input bytes available
1982    at least ten.  The ten bytes are six bytes for the longest length/
1983    distance pair plus four bytes for overloading the bit buffer. */
1984
1985 local int inflate_fast(
1986         uInt bl,
1987         uInt bd,
1988         inflate_huft *tl,
1989         inflate_huft *td,
1990         inflate_blocks_statef *s,
1991         z_stream *z
1992 )
1993 {
1994   inflate_huft *t;      /* temporary pointer */
1995   uInt e;               /* extra bits or operation */
1996   uLong b;              /* bit buffer */
1997   uInt k;               /* bits in bit buffer */
1998   Bytef *p;             /* input data pointer */
1999   uInt n;               /* bytes available there */
2000   Bytef *q;             /* output window write pointer */
2001   uInt m;               /* bytes to end of window or read pointer */
2002   uInt ml;              /* mask for literal/length tree */
2003   uInt md;              /* mask for distance tree */
2004   uInt c;               /* bytes to copy */
2005   uInt d;               /* distance back to copy from */
2006   Bytef *r;             /* copy source pointer */
2007
2008   /* load input, output, bit values */
2009   LOAD
2010
2011   /* initialize masks */
2012   ml = inflate_mask[bl];
2013   md = inflate_mask[bd];
2014
2015   /* do until not enough input or output space for fast loop */
2016   do {                          /* assume called with m >= 258 && n >= 10 */
2017     /* get literal/length code */
2018     GRABBITS(20)                /* max bits for literal/length code */
2019     if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
2020     {
2021       DUMPBITS(t->bits)
2022       Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
2023                 "inflate:         * literal '%c'\n" :
2024                 "inflate:         * literal 0x%02x\n", t->base));
2025       *q++ = (Byte)t->base;
2026       m--;
2027       continue;
2028     }
2029     do {
2030       DUMPBITS(t->bits)
2031       if (e & 16)
2032       {
2033         /* get extra bits for length */
2034         e &= 15;
2035         c = t->base + ((uInt)b & inflate_mask[e]);
2036         DUMPBITS(e)
2037         Tracevv((stderr, "inflate:         * length %u\n", c));
2038
2039         /* decode distance base of block to copy */
2040         GRABBITS(15);           /* max bits for distance code */
2041         e = (t = td + ((uInt)b & md))->exop;
2042         do {
2043           DUMPBITS(t->bits)
2044           if (e & 16)
2045           {
2046             /* get extra bits to add to distance base */
2047             e &= 15;
2048             GRABBITS(e)         /* get extra bits (up to 13) */
2049             d = t->base + ((uInt)b & inflate_mask[e]);
2050             DUMPBITS(e)
2051             Tracevv((stderr, "inflate:         * distance %u\n", d));
2052
2053             /* do the copy */
2054             m -= c;
2055             if ((uInt)(q - s->window) >= d)     /* offset before dest */
2056             {                                   /*  just copy */
2057               r = q - d;
2058               *q++ = *r++;  c--;        /* minimum count is three, */
2059               *q++ = *r++;  c--;        /*  so unroll loop a little */
2060             }
2061             else                        /* else offset after destination */
2062             {
2063               e = d - (q - s->window);  /* bytes from offset to end */
2064               r = s->end - e;           /* pointer to offset */
2065               if (c > e)                /* if source crosses, */
2066               {
2067                 c -= e;                 /* copy to end of window */
2068                 do {
2069                   *q++ = *r++;
2070                 } while (--e);
2071                 r = s->window;          /* copy rest from start of window */
2072               }
2073             }
2074             do {                        /* copy all or what's left */
2075               *q++ = *r++;
2076             } while (--c);
2077             break;
2078           }
2079           else if ((e & 64) == 0)
2080             e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop;
2081           else
2082           {
2083             z->msg = "invalid distance code";
2084             UNGRAB
2085             UPDATE
2086             return Z_DATA_ERROR;
2087           }
2088         } while (1);
2089         break;
2090       }
2091       if ((e & 64) == 0)
2092       {
2093         if ((e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop) == 0)
2094         {
2095           DUMPBITS(t->bits)
2096           Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
2097                     "inflate:         * literal '%c'\n" :
2098                     "inflate:         * literal 0x%02x\n", t->base));
2099           *q++ = (Byte)t->base;
2100           m--;
2101           break;
2102         }
2103       }
2104       else if (e & 32)
2105       {
2106         Tracevv((stderr, "inflate:         * end of block\n"));
2107         UNGRAB
2108         UPDATE
2109         return Z_STREAM_END;
2110       }
2111       else
2112       {
2113         z->msg = "invalid literal/length code";
2114         UNGRAB
2115         UPDATE
2116         return Z_DATA_ERROR;
2117       }
2118     } while (1);
2119   } while (m >= 258 && n >= 10);
2120
2121   /* not enough input or output--restore pointers and return */
2122   UNGRAB
2123   UPDATE
2124   return Z_OK;
2125 }
2126
2127
2128 /*+++++*/
2129 /* zutil.c -- target dependent utility functions for the compression library
2130  * Copyright (C) 1995 Jean-loup Gailly.
2131  * For conditions of distribution and use, see copyright notice in zlib.h 
2132  */
2133
2134 /* From: zutil.c,v 1.8 1995/05/03 17:27:12 jloup Exp */
2135
2136 char *zlib_version = ZLIB_VERSION;
2137
2138 char *z_errmsg[] = {
2139 "stream end",          /* Z_STREAM_END    1 */
2140 "",                    /* Z_OK            0 */
2141 "file error",          /* Z_ERRNO        (-1) */
2142 "stream error",        /* Z_STREAM_ERROR (-2) */
2143 "data error",          /* Z_DATA_ERROR   (-3) */
2144 "insufficient memory", /* Z_MEM_ERROR    (-4) */
2145 "buffer error",        /* Z_BUF_ERROR    (-5) */
2146 ""};
2147
2148
2149 /*+++++*/
2150 /* adler32.c -- compute the Adler-32 checksum of a data stream
2151  * Copyright (C) 1995 Mark Adler
2152  * For conditions of distribution and use, see copyright notice in zlib.h 
2153  */
2154
2155 /* From: adler32.c,v 1.6 1995/05/03 17:27:08 jloup Exp */
2156
2157 #define BASE 65521L /* largest prime smaller than 65536 */
2158 #define NMAX 5552
2159 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
2160
2161 #define DO1(buf)  {s1 += *buf++; s2 += s1;}
2162 #define DO2(buf)  DO1(buf); DO1(buf);
2163 #define DO4(buf)  DO2(buf); DO2(buf);
2164 #define DO8(buf)  DO4(buf); DO4(buf);
2165 #define DO16(buf) DO8(buf); DO8(buf);
2166
2167 /* ========================================================================= */
2168 uLong adler32(
2169         uLong adler,
2170         Bytef *buf,
2171         uInt len
2172 )
2173 {
2174     unsigned long s1 = adler & 0xffff;
2175     unsigned long s2 = (adler >> 16) & 0xffff;
2176     int k;
2177
2178     if (buf == Z_NULL) return 1L;
2179
2180     while (len > 0) {
2181         k = len < NMAX ? len : NMAX;
2182         len -= k;
2183         while (k >= 16) {
2184             DO16(buf);
2185             k -= 16;
2186         }
2187         if (k != 0) do {
2188             DO1(buf);
2189         } while (--k);
2190         s1 %= BASE;
2191         s2 %= BASE;
2192     }
2193     return (s2 << 16) | s1;
2194 }