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