kernel/acpi: Sync acpi_pci_link with FreeBSD.
[dragonfly.git] / contrib / zlib-1.2 / inflate.c
1 /* inflate.c -- zlib decompression
2  * Copyright (C) 1995-2012 Mark Adler
3  * For conditions of distribution and use, see copyright notice in zlib.h
4  */
5
6 /*
7  * Change history:
8  *
9  * 1.2.beta0    24 Nov 2002
10  * - First version -- complete rewrite of inflate to simplify code, avoid
11  *   creation of window when not needed, minimize use of window when it is
12  *   needed, make inffast.c even faster, implement gzip decoding, and to
13  *   improve code readability and style over the previous zlib inflate code
14  *
15  * 1.2.beta1    25 Nov 2002
16  * - Use pointers for available input and output checking in inffast.c
17  * - Remove input and output counters in inffast.c
18  * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
19  * - Remove unnecessary second byte pull from length extra in inffast.c
20  * - Unroll direct copy to three copies per loop in inffast.c
21  *
22  * 1.2.beta2    4 Dec 2002
23  * - Change external routine names to reduce potential conflicts
24  * - Correct filename to inffixed.h for fixed tables in inflate.c
25  * - Make hbuf[] unsigned char to match parameter type in inflate.c
26  * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
27  *   to avoid negation problem on Alphas (64 bit) in inflate.c
28  *
29  * 1.2.beta3    22 Dec 2002
30  * - Add comments on state->bits assertion in inffast.c
31  * - Add comments on op field in inftrees.h
32  * - Fix bug in reuse of allocated window after inflateReset()
33  * - Remove bit fields--back to byte structure for speed
34  * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
35  * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
36  * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
37  * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
38  * - Use local copies of stream next and avail values, as well as local bit
39  *   buffer and bit count in inflate()--for speed when inflate_fast() not used
40  *
41  * 1.2.beta4    1 Jan 2003
42  * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
43  * - Move a comment on output buffer sizes from inffast.c to inflate.c
44  * - Add comments in inffast.c to introduce the inflate_fast() routine
45  * - Rearrange window copies in inflate_fast() for speed and simplification
46  * - Unroll last copy for window match in inflate_fast()
47  * - Use local copies of window variables in inflate_fast() for speed
48  * - Pull out common wnext == 0 case for speed in inflate_fast()
49  * - Make op and len in inflate_fast() unsigned for consistency
50  * - Add FAR to lcode and dcode declarations in inflate_fast()
51  * - Simplified bad distance check in inflate_fast()
52  * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
53  *   source file infback.c to provide a call-back interface to inflate for
54  *   programs like gzip and unzip -- uses window as output buffer to avoid
55  *   window copying
56  *
57  * 1.2.beta5    1 Jan 2003
58  * - Improved inflateBack() interface to allow the caller to provide initial
59  *   input in strm.
60  * - Fixed stored blocks bug in inflateBack()
61  *
62  * 1.2.beta6    4 Jan 2003
63  * - Added comments in inffast.c on effectiveness of POSTINC
64  * - Typecasting all around to reduce compiler warnings
65  * - Changed loops from while (1) or do {} while (1) to for (;;), again to
66  *   make compilers happy
67  * - Changed type of window in inflateBackInit() to unsigned char *
68  *
69  * 1.2.beta7    27 Jan 2003
70  * - Changed many types to unsigned or unsigned short to avoid warnings
71  * - Added inflateCopy() function
72  *
73  * 1.2.0        9 Mar 2003
74  * - Changed inflateBack() interface to provide separate opaque descriptors
75  *   for the in() and out() functions
76  * - Changed inflateBack() argument and in_func typedef to swap the length
77  *   and buffer address return values for the input function
78  * - Check next_in and next_out for Z_NULL on entry to inflate()
79  *
80  * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
81  */
82
83 #include "zutil.h"
84 #include "inftrees.h"
85 #include "inflate.h"
86 #include "inffast.h"
87
88 #ifdef MAKEFIXED
89 #  ifndef BUILDFIXED
90 #    define BUILDFIXED
91 #  endif
92 #endif
93
94 /* function prototypes */
95 local void fixedtables OF((struct inflate_state FAR *state));
96 local int updatewindow OF((z_streamp strm, unsigned out));
97 #ifdef BUILDFIXED
98    void makefixed OF((void));
99 #endif
100 local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
101                               unsigned len));
102
103 int ZEXPORT inflateResetKeep(strm)
104 z_streamp strm;
105 {
106     struct inflate_state FAR *state;
107
108     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
109     state = (struct inflate_state FAR *)strm->state;
110     strm->total_in = strm->total_out = state->total = 0;
111     strm->msg = Z_NULL;
112     if (state->wrap)        /* to support ill-conceived Java test suite */
113         strm->adler = state->wrap & 1;
114     state->mode = HEAD;
115     state->last = 0;
116     state->havedict = 0;
117     state->dmax = 32768U;
118     state->head = Z_NULL;
119     state->hold = 0;
120     state->bits = 0;
121     state->lencode = state->distcode = state->next = state->codes;
122     state->sane = 1;
123     state->back = -1;
124     Tracev((stderr, "inflate: reset\n"));
125     return Z_OK;
126 }
127
128 int ZEXPORT inflateReset(strm)
129 z_streamp strm;
130 {
131     struct inflate_state FAR *state;
132
133     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
134     state = (struct inflate_state FAR *)strm->state;
135     state->wsize = 0;
136     state->whave = 0;
137     state->wnext = 0;
138     return inflateResetKeep(strm);
139 }
140
141 int ZEXPORT inflateReset2(strm, windowBits)
142 z_streamp strm;
143 int windowBits;
144 {
145     int wrap;
146     struct inflate_state FAR *state;
147
148     /* get the state */
149     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
150     state = (struct inflate_state FAR *)strm->state;
151
152     /* extract wrap request from windowBits parameter */
153     if (windowBits < 0) {
154         wrap = 0;
155         windowBits = -windowBits;
156     }
157     else {
158         wrap = (windowBits >> 4) + 1;
159 #ifdef GUNZIP
160         if (windowBits < 48)
161             windowBits &= 15;
162 #endif
163     }
164
165     /* set number of window bits, free window if different */
166     if (windowBits && (windowBits < 8 || windowBits > 15))
167         return Z_STREAM_ERROR;
168     if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
169         ZFREE(strm, state->window);
170         state->window = Z_NULL;
171     }
172
173     /* update state and reset the rest of it */
174     state->wrap = wrap;
175     state->wbits = (unsigned)windowBits;
176     return inflateReset(strm);
177 }
178
179 int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
180 z_streamp strm;
181 int windowBits;
182 const char *version;
183 int stream_size;
184 {
185     int ret;
186     struct inflate_state FAR *state;
187
188     if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
189         stream_size != (int)(sizeof(z_stream)))
190         return Z_VERSION_ERROR;
191     if (strm == Z_NULL) return Z_STREAM_ERROR;
192     strm->msg = Z_NULL;                 /* in case we return an error */
193     if (strm->zalloc == (alloc_func)0) {
194 #ifdef Z_SOLO
195         return Z_STREAM_ERROR;
196 #else
197         strm->zalloc = zcalloc;
198         strm->opaque = (voidpf)0;
199 #endif
200     }
201     if (strm->zfree == (free_func)0)
202 #ifdef Z_SOLO
203         return Z_STREAM_ERROR;
204 #else
205         strm->zfree = zcfree;
206 #endif
207     state = (struct inflate_state FAR *)
208             ZALLOC(strm, 1, sizeof(struct inflate_state));
209     if (state == Z_NULL) return Z_MEM_ERROR;
210     Tracev((stderr, "inflate: allocated\n"));
211     strm->state = (struct internal_state FAR *)state;
212     state->window = Z_NULL;
213     ret = inflateReset2(strm, windowBits);
214     if (ret != Z_OK) {
215         ZFREE(strm, state);
216         strm->state = Z_NULL;
217     }
218     return ret;
219 }
220
221 int ZEXPORT inflateInit_(strm, version, stream_size)
222 z_streamp strm;
223 const char *version;
224 int stream_size;
225 {
226     return inflateInit2_(strm, DEF_WBITS, version, stream_size);
227 }
228
229 int ZEXPORT inflatePrime(strm, bits, value)
230 z_streamp strm;
231 int bits;
232 int value;
233 {
234     struct inflate_state FAR *state;
235
236     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
237     state = (struct inflate_state FAR *)strm->state;
238     if (bits < 0) {
239         state->hold = 0;
240         state->bits = 0;
241         return Z_OK;
242     }
243     if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
244     value &= (1L << bits) - 1;
245     state->hold += value << state->bits;
246     state->bits += bits;
247     return Z_OK;
248 }
249
250 /*
251    Return state with length and distance decoding tables and index sizes set to
252    fixed code decoding.  Normally this returns fixed tables from inffixed.h.
253    If BUILDFIXED is defined, then instead this routine builds the tables the
254    first time it's called, and returns those tables the first time and
255    thereafter.  This reduces the size of the code by about 2K bytes, in
256    exchange for a little execution time.  However, BUILDFIXED should not be
257    used for threaded applications, since the rewriting of the tables and virgin
258    may not be thread-safe.
259  */
260 local void fixedtables(state)
261 struct inflate_state FAR *state;
262 {
263 #ifdef BUILDFIXED
264     static int virgin = 1;
265     static code *lenfix, *distfix;
266     static code fixed[544];
267
268     /* build fixed huffman tables if first call (may not be thread safe) */
269     if (virgin) {
270         unsigned sym, bits;
271         static code *next;
272
273         /* literal/length table */
274         sym = 0;
275         while (sym < 144) state->lens[sym++] = 8;
276         while (sym < 256) state->lens[sym++] = 9;
277         while (sym < 280) state->lens[sym++] = 7;
278         while (sym < 288) state->lens[sym++] = 8;
279         next = fixed;
280         lenfix = next;
281         bits = 9;
282         inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
283
284         /* distance table */
285         sym = 0;
286         while (sym < 32) state->lens[sym++] = 5;
287         distfix = next;
288         bits = 5;
289         inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
290
291         /* do this just once */
292         virgin = 0;
293     }
294 #else /* !BUILDFIXED */
295 #   include "inffixed.h"
296 #endif /* BUILDFIXED */
297     state->lencode = lenfix;
298     state->lenbits = 9;
299     state->distcode = distfix;
300     state->distbits = 5;
301 }
302
303 #ifdef MAKEFIXED
304 #include <stdio.h>
305
306 /*
307    Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
308    defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
309    those tables to stdout, which would be piped to inffixed.h.  A small program
310    can simply call makefixed to do this:
311
312     void makefixed(void);
313
314     int main(void)
315     {
316         makefixed();
317         return 0;
318     }
319
320    Then that can be linked with zlib built with MAKEFIXED defined and run:
321
322     a.out > inffixed.h
323  */
324 void makefixed()
325 {
326     unsigned low, size;
327     struct inflate_state state;
328
329     fixedtables(&state);
330     puts("    /* inffixed.h -- table for decoding fixed codes");
331     puts("     * Generated automatically by makefixed().");
332     puts("     */");
333     puts("");
334     puts("    /* WARNING: this file should *not* be used by applications.");
335     puts("       It is part of the implementation of this library and is");
336     puts("       subject to change. Applications should only use zlib.h.");
337     puts("     */");
338     puts("");
339     size = 1U << 9;
340     printf("    static const code lenfix[%u] = {", size);
341     low = 0;
342     for (;;) {
343         if ((low % 7) == 0) printf("\n        ");
344         printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
345                state.lencode[low].bits, state.lencode[low].val);
346         if (++low == size) break;
347         putchar(',');
348     }
349     puts("\n    };");
350     size = 1U << 5;
351     printf("\n    static const code distfix[%u] = {", size);
352     low = 0;
353     for (;;) {
354         if ((low % 6) == 0) printf("\n        ");
355         printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
356                state.distcode[low].val);
357         if (++low == size) break;
358         putchar(',');
359     }
360     puts("\n    };");
361 }
362 #endif /* MAKEFIXED */
363
364 /*
365    Update the window with the last wsize (normally 32K) bytes written before
366    returning.  If window does not exist yet, create it.  This is only called
367    when a window is already in use, or when output has been written during this
368    inflate call, but the end of the deflate stream has not been reached yet.
369    It is also called to create a window for dictionary data when a dictionary
370    is loaded.
371
372    Providing output buffers larger than 32K to inflate() should provide a speed
373    advantage, since only the last 32K of output is copied to the sliding window
374    upon return from inflate(), and since all distances after the first 32K of
375    output will fall in the output data, making match copies simpler and faster.
376    The advantage may be dependent on the size of the processor's data caches.
377  */
378 local int updatewindow(strm, out)
379 z_streamp strm;
380 unsigned out;
381 {
382     struct inflate_state FAR *state;
383     unsigned copy, dist;
384
385     state = (struct inflate_state FAR *)strm->state;
386
387     /* if it hasn't been done already, allocate space for the window */
388     if (state->window == Z_NULL) {
389         state->window = (unsigned char FAR *)
390                         ZALLOC(strm, 1U << state->wbits,
391                                sizeof(unsigned char));
392         if (state->window == Z_NULL) return 1;
393     }
394
395     /* if window not in use yet, initialize */
396     if (state->wsize == 0) {
397         state->wsize = 1U << state->wbits;
398         state->wnext = 0;
399         state->whave = 0;
400     }
401
402     /* copy state->wsize or less output bytes into the circular window */
403     copy = out - strm->avail_out;
404     if (copy >= state->wsize) {
405         zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
406         state->wnext = 0;
407         state->whave = state->wsize;
408     }
409     else {
410         dist = state->wsize - state->wnext;
411         if (dist > copy) dist = copy;
412         zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);
413         copy -= dist;
414         if (copy) {
415             zmemcpy(state->window, strm->next_out - copy, copy);
416             state->wnext = copy;
417             state->whave = state->wsize;
418         }
419         else {
420             state->wnext += dist;
421             if (state->wnext == state->wsize) state->wnext = 0;
422             if (state->whave < state->wsize) state->whave += dist;
423         }
424     }
425     return 0;
426 }
427
428 /* Macros for inflate(): */
429
430 /* check function to use adler32() for zlib or crc32() for gzip */
431 #ifdef GUNZIP
432 #  define UPDATE(check, buf, len) \
433     (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
434 #else
435 #  define UPDATE(check, buf, len) adler32(check, buf, len)
436 #endif
437
438 /* check macros for header crc */
439 #ifdef GUNZIP
440 #  define CRC2(check, word) \
441     do { \
442         hbuf[0] = (unsigned char)(word); \
443         hbuf[1] = (unsigned char)((word) >> 8); \
444         check = crc32(check, hbuf, 2); \
445     } while (0)
446
447 #  define CRC4(check, word) \
448     do { \
449         hbuf[0] = (unsigned char)(word); \
450         hbuf[1] = (unsigned char)((word) >> 8); \
451         hbuf[2] = (unsigned char)((word) >> 16); \
452         hbuf[3] = (unsigned char)((word) >> 24); \
453         check = crc32(check, hbuf, 4); \
454     } while (0)
455 #endif
456
457 /* Load registers with state in inflate() for speed */
458 #define LOAD() \
459     do { \
460         put = strm->next_out; \
461         left = strm->avail_out; \
462         next = strm->next_in; \
463         have = strm->avail_in; \
464         hold = state->hold; \
465         bits = state->bits; \
466     } while (0)
467
468 /* Restore state from registers in inflate() */
469 #define RESTORE() \
470     do { \
471         strm->next_out = put; \
472         strm->avail_out = left; \
473         strm->next_in = next; \
474         strm->avail_in = have; \
475         state->hold = hold; \
476         state->bits = bits; \
477     } while (0)
478
479 /* Clear the input bit accumulator */
480 #define INITBITS() \
481     do { \
482         hold = 0; \
483         bits = 0; \
484     } while (0)
485
486 /* Get a byte of input into the bit accumulator, or return from inflate()
487    if there is no input available. */
488 #define PULLBYTE() \
489     do { \
490         if (have == 0) goto inf_leave; \
491         have--; \
492         hold += (unsigned long)(*next++) << bits; \
493         bits += 8; \
494     } while (0)
495
496 /* Assure that there are at least n bits in the bit accumulator.  If there is
497    not enough available input to do that, then return from inflate(). */
498 #define NEEDBITS(n) \
499     do { \
500         while (bits < (unsigned)(n)) \
501             PULLBYTE(); \
502     } while (0)
503
504 /* Return the low n bits of the bit accumulator (n < 16) */
505 #define BITS(n) \
506     ((unsigned)hold & ((1U << (n)) - 1))
507
508 /* Remove n bits from the bit accumulator */
509 #define DROPBITS(n) \
510     do { \
511         hold >>= (n); \
512         bits -= (unsigned)(n); \
513     } while (0)
514
515 /* Remove zero to seven bits as needed to go to a byte boundary */
516 #define BYTEBITS() \
517     do { \
518         hold >>= bits & 7; \
519         bits -= bits & 7; \
520     } while (0)
521
522 /*
523    inflate() uses a state machine to process as much input data and generate as
524    much output data as possible before returning.  The state machine is
525    structured roughly as follows:
526
527     for (;;) switch (state) {
528     ...
529     case STATEn:
530         if (not enough input data or output space to make progress)
531             return;
532         ... make progress ...
533         state = STATEm;
534         break;
535     ...
536     }
537
538    so when inflate() is called again, the same case is attempted again, and
539    if the appropriate resources are provided, the machine proceeds to the
540    next state.  The NEEDBITS() macro is usually the way the state evaluates
541    whether it can proceed or should return.  NEEDBITS() does the return if
542    the requested bits are not available.  The typical use of the BITS macros
543    is:
544
545         NEEDBITS(n);
546         ... do something with BITS(n) ...
547         DROPBITS(n);
548
549    where NEEDBITS(n) either returns from inflate() if there isn't enough
550    input left to load n bits into the accumulator, or it continues.  BITS(n)
551    gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
552    the low n bits off the accumulator.  INITBITS() clears the accumulator
553    and sets the number of available bits to zero.  BYTEBITS() discards just
554    enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
555    and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
556
557    NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
558    if there is no input available.  The decoding of variable length codes uses
559    PULLBYTE() directly in order to pull just enough bytes to decode the next
560    code, and no more.
561
562    Some states loop until they get enough input, making sure that enough
563    state information is maintained to continue the loop where it left off
564    if NEEDBITS() returns in the loop.  For example, want, need, and keep
565    would all have to actually be part of the saved state in case NEEDBITS()
566    returns:
567
568     case STATEw:
569         while (want < need) {
570             NEEDBITS(n);
571             keep[want++] = BITS(n);
572             DROPBITS(n);
573         }
574         state = STATEx;
575     case STATEx:
576
577    As shown above, if the next state is also the next case, then the break
578    is omitted.
579
580    A state may also return if there is not enough output space available to
581    complete that state.  Those states are copying stored data, writing a
582    literal byte, and copying a matching string.
583
584    When returning, a "goto inf_leave" is used to update the total counters,
585    update the check value, and determine whether any progress has been made
586    during that inflate() call in order to return the proper return code.
587    Progress is defined as a change in either strm->avail_in or strm->avail_out.
588    When there is a window, goto inf_leave will update the window with the last
589    output written.  If a goto inf_leave occurs in the middle of decompression
590    and there is no window currently, goto inf_leave will create one and copy
591    output to the window for the next call of inflate().
592
593    In this implementation, the flush parameter of inflate() only affects the
594    return code (per zlib.h).  inflate() always writes as much as possible to
595    strm->next_out, given the space available and the provided input--the effect
596    documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
597    the allocation of and copying into a sliding window until necessary, which
598    provides the effect documented in zlib.h for Z_FINISH when the entire input
599    stream available.  So the only thing the flush parameter actually does is:
600    when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
601    will return Z_BUF_ERROR if it has not reached the end of the stream.
602  */
603
604 int ZEXPORT inflate(strm, flush)
605 z_streamp strm;
606 int flush;
607 {
608     struct inflate_state FAR *state;
609     unsigned char FAR *next;    /* next input */
610     unsigned char FAR *put;     /* next output */
611     unsigned have, left;        /* available input and output */
612     unsigned long hold;         /* bit buffer */
613     unsigned bits;              /* bits in bit buffer */
614     unsigned in, out;           /* save starting available input and output */
615     unsigned copy;              /* number of stored or match bytes to copy */
616     unsigned char FAR *from;    /* where to copy match bytes from */
617     code here;                  /* current decoding table entry */
618     code last;                  /* parent table entry */
619     unsigned len;               /* length to copy for repeats, bits to drop */
620     int ret;                    /* return code */
621 #ifdef GUNZIP
622     unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
623 #endif
624     static const unsigned short order[19] = /* permutation of code lengths */
625         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
626
627     if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
628         (strm->next_in == Z_NULL && strm->avail_in != 0))
629         return Z_STREAM_ERROR;
630
631     state = (struct inflate_state FAR *)strm->state;
632     if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
633     LOAD();
634     in = have;
635     out = left;
636     ret = Z_OK;
637     for (;;)
638         switch (state->mode) {
639         case HEAD:
640             if (state->wrap == 0) {
641                 state->mode = TYPEDO;
642                 break;
643             }
644             NEEDBITS(16);
645 #ifdef GUNZIP
646             if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
647                 state->check = crc32(0L, Z_NULL, 0);
648                 CRC2(state->check, hold);
649                 INITBITS();
650                 state->mode = FLAGS;
651                 break;
652             }
653             state->flags = 0;           /* expect zlib header */
654             if (state->head != Z_NULL)
655                 state->head->done = -1;
656             if (!(state->wrap & 1) ||   /* check if zlib header allowed */
657 #else
658             if (
659 #endif
660                 ((BITS(8) << 8) + (hold >> 8)) % 31) {
661                 strm->msg = (char *)"incorrect header check";
662                 state->mode = BAD;
663                 break;
664             }
665             if (BITS(4) != Z_DEFLATED) {
666                 strm->msg = (char *)"unknown compression method";
667                 state->mode = BAD;
668                 break;
669             }
670             DROPBITS(4);
671             len = BITS(4) + 8;
672             if (state->wbits == 0)
673                 state->wbits = len;
674             else if (len > state->wbits) {
675                 strm->msg = (char *)"invalid window size";
676                 state->mode = BAD;
677                 break;
678             }
679             state->dmax = 1U << len;
680             Tracev((stderr, "inflate:   zlib header ok\n"));
681             strm->adler = state->check = adler32(0L, Z_NULL, 0);
682             state->mode = hold & 0x200 ? DICTID : TYPE;
683             INITBITS();
684             break;
685 #ifdef GUNZIP
686         case FLAGS:
687             NEEDBITS(16);
688             state->flags = (int)(hold);
689             if ((state->flags & 0xff) != Z_DEFLATED) {
690                 strm->msg = (char *)"unknown compression method";
691                 state->mode = BAD;
692                 break;
693             }
694             if (state->flags & 0xe000) {
695                 strm->msg = (char *)"unknown header flags set";
696                 state->mode = BAD;
697                 break;
698             }
699             if (state->head != Z_NULL)
700                 state->head->text = (int)((hold >> 8) & 1);
701             if (state->flags & 0x0200) CRC2(state->check, hold);
702             INITBITS();
703             state->mode = TIME;
704         case TIME:
705             NEEDBITS(32);
706             if (state->head != Z_NULL)
707                 state->head->time = hold;
708             if (state->flags & 0x0200) CRC4(state->check, hold);
709             INITBITS();
710             state->mode = OS;
711         case OS:
712             NEEDBITS(16);
713             if (state->head != Z_NULL) {
714                 state->head->xflags = (int)(hold & 0xff);
715                 state->head->os = (int)(hold >> 8);
716             }
717             if (state->flags & 0x0200) CRC2(state->check, hold);
718             INITBITS();
719             state->mode = EXLEN;
720         case EXLEN:
721             if (state->flags & 0x0400) {
722                 NEEDBITS(16);
723                 state->length = (unsigned)(hold);
724                 if (state->head != Z_NULL)
725                     state->head->extra_len = (unsigned)hold;
726                 if (state->flags & 0x0200) CRC2(state->check, hold);
727                 INITBITS();
728             }
729             else if (state->head != Z_NULL)
730                 state->head->extra = Z_NULL;
731             state->mode = EXTRA;
732         case EXTRA:
733             if (state->flags & 0x0400) {
734                 copy = state->length;
735                 if (copy > have) copy = have;
736                 if (copy) {
737                     if (state->head != Z_NULL &&
738                         state->head->extra != Z_NULL) {
739                         len = state->head->extra_len - state->length;
740                         zmemcpy(state->head->extra + len, next,
741                                 len + copy > state->head->extra_max ?
742                                 state->head->extra_max - len : copy);
743                     }
744                     if (state->flags & 0x0200)
745                         state->check = crc32(state->check, next, copy);
746                     have -= copy;
747                     next += copy;
748                     state->length -= copy;
749                 }
750                 if (state->length) goto inf_leave;
751             }
752             state->length = 0;
753             state->mode = NAME;
754         case NAME:
755             if (state->flags & 0x0800) {
756                 if (have == 0) goto inf_leave;
757                 copy = 0;
758                 do {
759                     len = (unsigned)(next[copy++]);
760                     if (state->head != Z_NULL &&
761                             state->head->name != Z_NULL &&
762                             state->length < state->head->name_max)
763                         state->head->name[state->length++] = len;
764                 } while (len && copy < have);
765                 if (state->flags & 0x0200)
766                     state->check = crc32(state->check, next, copy);
767                 have -= copy;
768                 next += copy;
769                 if (len) goto inf_leave;
770             }
771             else if (state->head != Z_NULL)
772                 state->head->name = Z_NULL;
773             state->length = 0;
774             state->mode = COMMENT;
775         case COMMENT:
776             if (state->flags & 0x1000) {
777                 if (have == 0) goto inf_leave;
778                 copy = 0;
779                 do {
780                     len = (unsigned)(next[copy++]);
781                     if (state->head != Z_NULL &&
782                             state->head->comment != Z_NULL &&
783                             state->length < state->head->comm_max)
784                         state->head->comment[state->length++] = len;
785                 } while (len && copy < have);
786                 if (state->flags & 0x0200)
787                     state->check = crc32(state->check, next, copy);
788                 have -= copy;
789                 next += copy;
790                 if (len) goto inf_leave;
791             }
792             else if (state->head != Z_NULL)
793                 state->head->comment = Z_NULL;
794             state->mode = HCRC;
795         case HCRC:
796             if (state->flags & 0x0200) {
797                 NEEDBITS(16);
798                 if (hold != (state->check & 0xffff)) {
799                     strm->msg = (char *)"header crc mismatch";
800                     state->mode = BAD;
801                     break;
802                 }
803                 INITBITS();
804             }
805             if (state->head != Z_NULL) {
806                 state->head->hcrc = (int)((state->flags >> 9) & 1);
807                 state->head->done = 1;
808             }
809             strm->adler = state->check = crc32(0L, Z_NULL, 0);
810             state->mode = TYPE;
811             break;
812 #endif
813         case DICTID:
814             NEEDBITS(32);
815             strm->adler = state->check = ZSWAP32(hold);
816             INITBITS();
817             state->mode = DICT;
818         case DICT:
819             if (state->havedict == 0) {
820                 RESTORE();
821                 return Z_NEED_DICT;
822             }
823             strm->adler = state->check = adler32(0L, Z_NULL, 0);
824             state->mode = TYPE;
825         case TYPE:
826             if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
827         case TYPEDO:
828             if (state->last) {
829                 BYTEBITS();
830                 state->mode = CHECK;
831                 break;
832             }
833             NEEDBITS(3);
834             state->last = BITS(1);
835             DROPBITS(1);
836             switch (BITS(2)) {
837             case 0:                             /* stored block */
838                 Tracev((stderr, "inflate:     stored block%s\n",
839                         state->last ? " (last)" : ""));
840                 state->mode = STORED;
841                 break;
842             case 1:                             /* fixed block */
843                 fixedtables(state);
844                 Tracev((stderr, "inflate:     fixed codes block%s\n",
845                         state->last ? " (last)" : ""));
846                 state->mode = LEN_;             /* decode codes */
847                 if (flush == Z_TREES) {
848                     DROPBITS(2);
849                     goto inf_leave;
850                 }
851                 break;
852             case 2:                             /* dynamic block */
853                 Tracev((stderr, "inflate:     dynamic codes block%s\n",
854                         state->last ? " (last)" : ""));
855                 state->mode = TABLE;
856                 break;
857             case 3:
858                 strm->msg = (char *)"invalid block type";
859                 state->mode = BAD;
860             }
861             DROPBITS(2);
862             break;
863         case STORED:
864             BYTEBITS();                         /* go to byte boundary */
865             NEEDBITS(32);
866             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
867                 strm->msg = (char *)"invalid stored block lengths";
868                 state->mode = BAD;
869                 break;
870             }
871             state->length = (unsigned)hold & 0xffff;
872             Tracev((stderr, "inflate:       stored length %u\n",
873                     state->length));
874             INITBITS();
875             state->mode = COPY_;
876             if (flush == Z_TREES) goto inf_leave;
877         case COPY_:
878             state->mode = COPY;
879         case COPY:
880             copy = state->length;
881             if (copy) {
882                 if (copy > have) copy = have;
883                 if (copy > left) copy = left;
884                 if (copy == 0) goto inf_leave;
885                 zmemcpy(put, next, copy);
886                 have -= copy;
887                 next += copy;
888                 left -= copy;
889                 put += copy;
890                 state->length -= copy;
891                 break;
892             }
893             Tracev((stderr, "inflate:       stored end\n"));
894             state->mode = TYPE;
895             break;
896         case TABLE:
897             NEEDBITS(14);
898             state->nlen = BITS(5) + 257;
899             DROPBITS(5);
900             state->ndist = BITS(5) + 1;
901             DROPBITS(5);
902             state->ncode = BITS(4) + 4;
903             DROPBITS(4);
904 #ifndef PKZIP_BUG_WORKAROUND
905             if (state->nlen > 286 || state->ndist > 30) {
906                 strm->msg = (char *)"too many length or distance symbols";
907                 state->mode = BAD;
908                 break;
909             }
910 #endif
911             Tracev((stderr, "inflate:       table sizes ok\n"));
912             state->have = 0;
913             state->mode = LENLENS;
914         case LENLENS:
915             while (state->have < state->ncode) {
916                 NEEDBITS(3);
917                 state->lens[order[state->have++]] = (unsigned short)BITS(3);
918                 DROPBITS(3);
919             }
920             while (state->have < 19)
921                 state->lens[order[state->have++]] = 0;
922             state->next = state->codes;
923             state->lencode = (code const FAR *)(state->next);
924             state->lenbits = 7;
925             ret = inflate_table(CODES, state->lens, 19, &(state->next),
926                                 &(state->lenbits), state->work);
927             if (ret) {
928                 strm->msg = (char *)"invalid code lengths set";
929                 state->mode = BAD;
930                 break;
931             }
932             Tracev((stderr, "inflate:       code lengths ok\n"));
933             state->have = 0;
934             state->mode = CODELENS;
935         case CODELENS:
936             while (state->have < state->nlen + state->ndist) {
937                 for (;;) {
938                     here = state->lencode[BITS(state->lenbits)];
939                     if ((unsigned)(here.bits) <= bits) break;
940                     PULLBYTE();
941                 }
942                 if (here.val < 16) {
943                     DROPBITS(here.bits);
944                     state->lens[state->have++] = here.val;
945                 }
946                 else {
947                     if (here.val == 16) {
948                         NEEDBITS(here.bits + 2);
949                         DROPBITS(here.bits);
950                         if (state->have == 0) {
951                             strm->msg = (char *)"invalid bit length repeat";
952                             state->mode = BAD;
953                             break;
954                         }
955                         len = state->lens[state->have - 1];
956                         copy = 3 + BITS(2);
957                         DROPBITS(2);
958                     }
959                     else if (here.val == 17) {
960                         NEEDBITS(here.bits + 3);
961                         DROPBITS(here.bits);
962                         len = 0;
963                         copy = 3 + BITS(3);
964                         DROPBITS(3);
965                     }
966                     else {
967                         NEEDBITS(here.bits + 7);
968                         DROPBITS(here.bits);
969                         len = 0;
970                         copy = 11 + BITS(7);
971                         DROPBITS(7);
972                     }
973                     if (state->have + copy > state->nlen + state->ndist) {
974                         strm->msg = (char *)"invalid bit length repeat";
975                         state->mode = BAD;
976                         break;
977                     }
978                     while (copy--)
979                         state->lens[state->have++] = (unsigned short)len;
980                 }
981             }
982
983             /* handle error breaks in while */
984             if (state->mode == BAD) break;
985
986             /* check for end-of-block code (better have one) */
987             if (state->lens[256] == 0) {
988                 strm->msg = (char *)"invalid code -- missing end-of-block";
989                 state->mode = BAD;
990                 break;
991             }
992
993             /* build code tables -- note: do not change the lenbits or distbits
994                values here (9 and 6) without reading the comments in inftrees.h
995                concerning the ENOUGH constants, which depend on those values */
996             state->next = state->codes;
997             state->lencode = (code const FAR *)(state->next);
998             state->lenbits = 9;
999             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
1000                                 &(state->lenbits), state->work);
1001             if (ret) {
1002                 strm->msg = (char *)"invalid literal/lengths set";
1003                 state->mode = BAD;
1004                 break;
1005             }
1006             state->distcode = (code const FAR *)(state->next);
1007             state->distbits = 6;
1008             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
1009                             &(state->next), &(state->distbits), state->work);
1010             if (ret) {
1011                 strm->msg = (char *)"invalid distances set";
1012                 state->mode = BAD;
1013                 break;
1014             }
1015             Tracev((stderr, "inflate:       codes ok\n"));
1016             state->mode = LEN_;
1017             if (flush == Z_TREES) goto inf_leave;
1018         case LEN_:
1019             state->mode = LEN;
1020         case LEN:
1021             if (have >= 6 && left >= 258) {
1022                 RESTORE();
1023                 inflate_fast(strm, out);
1024                 LOAD();
1025                 if (state->mode == TYPE)
1026                     state->back = -1;
1027                 break;
1028             }
1029             state->back = 0;
1030             for (;;) {
1031                 here = state->lencode[BITS(state->lenbits)];
1032                 if ((unsigned)(here.bits) <= bits) break;
1033                 PULLBYTE();
1034             }
1035             if (here.op && (here.op & 0xf0) == 0) {
1036                 last = here;
1037                 for (;;) {
1038                     here = state->lencode[last.val +
1039                             (BITS(last.bits + last.op) >> last.bits)];
1040                     if ((unsigned)(last.bits + here.bits) <= bits) break;
1041                     PULLBYTE();
1042                 }
1043                 DROPBITS(last.bits);
1044                 state->back += last.bits;
1045             }
1046             DROPBITS(here.bits);
1047             state->back += here.bits;
1048             state->length = (unsigned)here.val;
1049             if ((int)(here.op) == 0) {
1050                 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
1051                         "inflate:         literal '%c'\n" :
1052                         "inflate:         literal 0x%02x\n", here.val));
1053                 state->mode = LIT;
1054                 break;
1055             }
1056             if (here.op & 32) {
1057                 Tracevv((stderr, "inflate:         end of block\n"));
1058                 state->back = -1;
1059                 state->mode = TYPE;
1060                 break;
1061             }
1062             if (here.op & 64) {
1063                 strm->msg = (char *)"invalid literal/length code";
1064                 state->mode = BAD;
1065                 break;
1066             }
1067             state->extra = (unsigned)(here.op) & 15;
1068             state->mode = LENEXT;
1069         case LENEXT:
1070             if (state->extra) {
1071                 NEEDBITS(state->extra);
1072                 state->length += BITS(state->extra);
1073                 DROPBITS(state->extra);
1074                 state->back += state->extra;
1075             }
1076             Tracevv((stderr, "inflate:         length %u\n", state->length));
1077             state->was = state->length;
1078             state->mode = DIST;
1079         case DIST:
1080             for (;;) {
1081                 here = state->distcode[BITS(state->distbits)];
1082                 if ((unsigned)(here.bits) <= bits) break;
1083                 PULLBYTE();
1084             }
1085             if ((here.op & 0xf0) == 0) {
1086                 last = here;
1087                 for (;;) {
1088                     here = state->distcode[last.val +
1089                             (BITS(last.bits + last.op) >> last.bits)];
1090                     if ((unsigned)(last.bits + here.bits) <= bits) break;
1091                     PULLBYTE();
1092                 }
1093                 DROPBITS(last.bits);
1094                 state->back += last.bits;
1095             }
1096             DROPBITS(here.bits);
1097             state->back += here.bits;
1098             if (here.op & 64) {
1099                 strm->msg = (char *)"invalid distance code";
1100                 state->mode = BAD;
1101                 break;
1102             }
1103             state->offset = (unsigned)here.val;
1104             state->extra = (unsigned)(here.op) & 15;
1105             state->mode = DISTEXT;
1106         case DISTEXT:
1107             if (state->extra) {
1108                 NEEDBITS(state->extra);
1109                 state->offset += BITS(state->extra);
1110                 DROPBITS(state->extra);
1111                 state->back += state->extra;
1112             }
1113 #ifdef INFLATE_STRICT
1114             if (state->offset > state->dmax) {
1115                 strm->msg = (char *)"invalid distance too far back";
1116                 state->mode = BAD;
1117                 break;
1118             }
1119 #endif
1120             Tracevv((stderr, "inflate:         distance %u\n", state->offset));
1121             state->mode = MATCH;
1122         case MATCH:
1123             if (left == 0) goto inf_leave;
1124             copy = out - left;
1125             if (state->offset > copy) {         /* copy from window */
1126                 copy = state->offset - copy;
1127                 if (copy > state->whave) {
1128                     if (state->sane) {
1129                         strm->msg = (char *)"invalid distance too far back";
1130                         state->mode = BAD;
1131                         break;
1132                     }
1133 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1134                     Trace((stderr, "inflate.c too far\n"));
1135                     copy -= state->whave;
1136                     if (copy > state->length) copy = state->length;
1137                     if (copy > left) copy = left;
1138                     left -= copy;
1139                     state->length -= copy;
1140                     do {
1141                         *put++ = 0;
1142                     } while (--copy);
1143                     if (state->length == 0) state->mode = LEN;
1144                     break;
1145 #endif
1146                 }
1147                 if (copy > state->wnext) {
1148                     copy -= state->wnext;
1149                     from = state->window + (state->wsize - copy);
1150                 }
1151                 else
1152                     from = state->window + (state->wnext - copy);
1153                 if (copy > state->length) copy = state->length;
1154             }
1155             else {                              /* copy from output */
1156                 from = put - state->offset;
1157                 copy = state->length;
1158             }
1159             if (copy > left) copy = left;
1160             left -= copy;
1161             state->length -= copy;
1162             do {
1163                 *put++ = *from++;
1164             } while (--copy);
1165             if (state->length == 0) state->mode = LEN;
1166             break;
1167         case LIT:
1168             if (left == 0) goto inf_leave;
1169             *put++ = (unsigned char)(state->length);
1170             left--;
1171             state->mode = LEN;
1172             break;
1173         case CHECK:
1174             if (state->wrap) {
1175                 NEEDBITS(32);
1176                 out -= left;
1177                 strm->total_out += out;
1178                 state->total += out;
1179                 if (out)
1180                     strm->adler = state->check =
1181                         UPDATE(state->check, put - out, out);
1182                 out = left;
1183                 if ((
1184 #ifdef GUNZIP
1185                      state->flags ? hold :
1186 #endif
1187                      ZSWAP32(hold)) != state->check) {
1188                     strm->msg = (char *)"incorrect data check";
1189                     state->mode = BAD;
1190                     break;
1191                 }
1192                 INITBITS();
1193                 Tracev((stderr, "inflate:   check matches trailer\n"));
1194             }
1195 #ifdef GUNZIP
1196             state->mode = LENGTH;
1197         case LENGTH:
1198             if (state->wrap && state->flags) {
1199                 NEEDBITS(32);
1200                 if (hold != (state->total & 0xffffffffUL)) {
1201                     strm->msg = (char *)"incorrect length check";
1202                     state->mode = BAD;
1203                     break;
1204                 }
1205                 INITBITS();
1206                 Tracev((stderr, "inflate:   length matches trailer\n"));
1207             }
1208 #endif
1209             state->mode = DONE;
1210         case DONE:
1211             ret = Z_STREAM_END;
1212             goto inf_leave;
1213         case BAD:
1214             ret = Z_DATA_ERROR;
1215             goto inf_leave;
1216         case MEM:
1217             return Z_MEM_ERROR;
1218         case SYNC:
1219         default:
1220             return Z_STREAM_ERROR;
1221         }
1222
1223     /*
1224        Return from inflate(), updating the total counts and the check value.
1225        If there was no progress during the inflate() call, return a buffer
1226        error.  Call updatewindow() to create and/or update the window state.
1227        Note: a memory error from inflate() is non-recoverable.
1228      */
1229   inf_leave:
1230     RESTORE();
1231     if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
1232             (state->mode < CHECK || flush != Z_FINISH)))
1233         if (updatewindow(strm, out)) {
1234             state->mode = MEM;
1235             return Z_MEM_ERROR;
1236         }
1237     in -= strm->avail_in;
1238     out -= strm->avail_out;
1239     strm->total_in += in;
1240     strm->total_out += out;
1241     state->total += out;
1242     if (state->wrap && out)
1243         strm->adler = state->check =
1244             UPDATE(state->check, strm->next_out - out, out);
1245     strm->data_type = state->bits + (state->last ? 64 : 0) +
1246                       (state->mode == TYPE ? 128 : 0) +
1247                       (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1248     if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1249         ret = Z_BUF_ERROR;
1250     return ret;
1251 }
1252
1253 int ZEXPORT inflateEnd(strm)
1254 z_streamp strm;
1255 {
1256     struct inflate_state FAR *state;
1257     if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
1258         return Z_STREAM_ERROR;
1259     state = (struct inflate_state FAR *)strm->state;
1260     if (state->window != Z_NULL) ZFREE(strm, state->window);
1261     ZFREE(strm, strm->state);
1262     strm->state = Z_NULL;
1263     Tracev((stderr, "inflate: end\n"));
1264     return Z_OK;
1265 }
1266
1267 int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
1268 z_streamp strm;
1269 const Bytef *dictionary;
1270 uInt dictLength;
1271 {
1272     struct inflate_state FAR *state;
1273     unsigned long dictid;
1274     unsigned char *next;
1275     unsigned avail;
1276     int ret;
1277
1278     /* check state */
1279     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1280     state = (struct inflate_state FAR *)strm->state;
1281     if (state->wrap != 0 && state->mode != DICT)
1282         return Z_STREAM_ERROR;
1283
1284     /* check for correct dictionary identifier */
1285     if (state->mode == DICT) {
1286         dictid = adler32(0L, Z_NULL, 0);
1287         dictid = adler32(dictid, dictionary, dictLength);
1288         if (dictid != state->check)
1289             return Z_DATA_ERROR;
1290     }
1291
1292     /* copy dictionary to window using updatewindow(), which will amend the
1293        existing dictionary if appropriate */
1294     next = strm->next_out;
1295     avail = strm->avail_out;
1296     strm->next_out = (Bytef *)dictionary + dictLength;
1297     strm->avail_out = 0;
1298     ret = updatewindow(strm, dictLength);
1299     strm->avail_out = avail;
1300     strm->next_out = next;
1301     if (ret) {
1302         state->mode = MEM;
1303         return Z_MEM_ERROR;
1304     }
1305     state->havedict = 1;
1306     Tracev((stderr, "inflate:   dictionary set\n"));
1307     return Z_OK;
1308 }
1309
1310 int ZEXPORT inflateGetHeader(strm, head)
1311 z_streamp strm;
1312 gz_headerp head;
1313 {
1314     struct inflate_state FAR *state;
1315
1316     /* check state */
1317     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1318     state = (struct inflate_state FAR *)strm->state;
1319     if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
1320
1321     /* save header structure */
1322     state->head = head;
1323     head->done = 0;
1324     return Z_OK;
1325 }
1326
1327 /*
1328    Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
1329    or when out of input.  When called, *have is the number of pattern bytes
1330    found in order so far, in 0..3.  On return *have is updated to the new
1331    state.  If on return *have equals four, then the pattern was found and the
1332    return value is how many bytes were read including the last byte of the
1333    pattern.  If *have is less than four, then the pattern has not been found
1334    yet and the return value is len.  In the latter case, syncsearch() can be
1335    called again with more data and the *have state.  *have is initialized to
1336    zero for the first call.
1337  */
1338 local unsigned syncsearch(have, buf, len)
1339 unsigned FAR *have;
1340 unsigned char FAR *buf;
1341 unsigned len;
1342 {
1343     unsigned got;
1344     unsigned next;
1345
1346     got = *have;
1347     next = 0;
1348     while (next < len && got < 4) {
1349         if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
1350             got++;
1351         else if (buf[next])
1352             got = 0;
1353         else
1354             got = 4 - got;
1355         next++;
1356     }
1357     *have = got;
1358     return next;
1359 }
1360
1361 int ZEXPORT inflateSync(strm)
1362 z_streamp strm;
1363 {
1364     unsigned len;               /* number of bytes to look at or looked at */
1365     unsigned long in, out;      /* temporary to save total_in and total_out */
1366     unsigned char buf[4];       /* to restore bit buffer to byte string */
1367     struct inflate_state FAR *state;
1368
1369     /* check parameters */
1370     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1371     state = (struct inflate_state FAR *)strm->state;
1372     if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
1373
1374     /* if first time, start search in bit buffer */
1375     if (state->mode != SYNC) {
1376         state->mode = SYNC;
1377         state->hold <<= state->bits & 7;
1378         state->bits -= state->bits & 7;
1379         len = 0;
1380         while (state->bits >= 8) {
1381             buf[len++] = (unsigned char)(state->hold);
1382             state->hold >>= 8;
1383             state->bits -= 8;
1384         }
1385         state->have = 0;
1386         syncsearch(&(state->have), buf, len);
1387     }
1388
1389     /* search available input */
1390     len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
1391     strm->avail_in -= len;
1392     strm->next_in += len;
1393     strm->total_in += len;
1394
1395     /* return no joy or set up to restart inflate() on a new block */
1396     if (state->have != 4) return Z_DATA_ERROR;
1397     in = strm->total_in;  out = strm->total_out;
1398     inflateReset(strm);
1399     strm->total_in = in;  strm->total_out = out;
1400     state->mode = TYPE;
1401     return Z_OK;
1402 }
1403
1404 /*
1405    Returns true if inflate is currently at the end of a block generated by
1406    Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
1407    implementation to provide an additional safety check. PPP uses
1408    Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
1409    block. When decompressing, PPP checks that at the end of input packet,
1410    inflate is waiting for these length bytes.
1411  */
1412 int ZEXPORT inflateSyncPoint(strm)
1413 z_streamp strm;
1414 {
1415     struct inflate_state FAR *state;
1416
1417     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1418     state = (struct inflate_state FAR *)strm->state;
1419     return state->mode == STORED && state->bits == 0;
1420 }
1421
1422 int ZEXPORT inflateCopy(dest, source)
1423 z_streamp dest;
1424 z_streamp source;
1425 {
1426     struct inflate_state FAR *state;
1427     struct inflate_state FAR *copy;
1428     unsigned char FAR *window;
1429     unsigned wsize;
1430
1431     /* check input */
1432     if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
1433         source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
1434         return Z_STREAM_ERROR;
1435     state = (struct inflate_state FAR *)source->state;
1436
1437     /* allocate space */
1438     copy = (struct inflate_state FAR *)
1439            ZALLOC(source, 1, sizeof(struct inflate_state));
1440     if (copy == Z_NULL) return Z_MEM_ERROR;
1441     window = Z_NULL;
1442     if (state->window != Z_NULL) {
1443         window = (unsigned char FAR *)
1444                  ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
1445         if (window == Z_NULL) {
1446             ZFREE(source, copy);
1447             return Z_MEM_ERROR;
1448         }
1449     }
1450
1451     /* copy state */
1452     zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
1453     zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
1454     if (state->lencode >= state->codes &&
1455         state->lencode <= state->codes + ENOUGH - 1) {
1456         copy->lencode = copy->codes + (state->lencode - state->codes);
1457         copy->distcode = copy->codes + (state->distcode - state->codes);
1458     }
1459     copy->next = copy->codes + (state->next - state->codes);
1460     if (window != Z_NULL) {
1461         wsize = 1U << state->wbits;
1462         zmemcpy(window, state->window, wsize);
1463     }
1464     copy->window = window;
1465     dest->state = (struct internal_state FAR *)copy;
1466     return Z_OK;
1467 }
1468
1469 int ZEXPORT inflateUndermine(strm, subvert)
1470 z_streamp strm;
1471 int subvert;
1472 {
1473     struct inflate_state FAR *state;
1474
1475     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1476     state = (struct inflate_state FAR *)strm->state;
1477     state->sane = !subvert;
1478 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1479     return Z_OK;
1480 #else
1481     state->sane = 1;
1482     return Z_DATA_ERROR;
1483 #endif
1484 }
1485
1486 long ZEXPORT inflateMark(strm)
1487 z_streamp strm;
1488 {
1489     struct inflate_state FAR *state;
1490
1491     if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
1492     state = (struct inflate_state FAR *)strm->state;
1493     return ((long)(state->back) << 16) +
1494         (state->mode == COPY ? state->length :
1495             (state->mode == MATCH ? state->was - state->length : 0));
1496 }