]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - libs/pak/unzip.cpp
Adding patch_seam q3map2 regression test. Probably not fixable, but good to
[xonotic/netradiant.git] / libs / pak / unzip.cpp
1 /*****************************************************************************
2  * name:                unzip.c
3  *
4  * desc:                IO on .zip files using portions of zlib 
5  *
6  *
7  *****************************************************************************/
8
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include <string.h>
12 #include "unzip.h"
13
14 typedef unsigned char byte;
15
16 /* unzip.h -- IO for uncompress .zip files using zlib 
17    Version 0.15 beta, Mar 19th, 1998,
18
19    Copyright (C) 1998 Gilles Vollant
20
21    This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
22      WinZip, InfoZip tools and compatible.
23    Encryption and multi volume ZipFile (span) are not supported.
24    Old compressions used by old PKZip 1.x are not supported
25
26    THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE
27    CAN CHANGE IN FUTURE VERSION !!
28    I WAIT FEEDBACK at mail info@winimage.com
29    Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
30
31    Condition of use and distribution are the same than zlib :
32
33   This software is provided 'as-is', without any express or implied
34   warranty.  In no event will the authors be held liable for any damages
35   arising from the use of this software.
36
37   Permission is granted to anyone to use this software for any purpose,
38   including commercial applications, and to alter it and redistribute it
39   freely, subject to the following restrictions:
40
41   1. The origin of this software must not be misrepresented; you must not
42      claim that you wrote the original software. If you use this software
43      in a product, an acknowledgment in the product documentation would be
44      appreciated but is not required.
45   2. Altered source versions must be plainly marked as such, and must not be
46      misrepresented as being the original software.
47   3. This notice may not be removed or altered from any source distribution.
48
49
50 */
51 /* for more info about .ZIP format, see 
52       ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip
53    PkWare has also a specification at :
54       ftp://ftp.pkware.com/probdesc.zip */
55
56 /* zlib.h -- interface of the 'zlib' general purpose compression library
57   version 1.1.3, July 9th, 1998
58
59   Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
60
61   This software is provided 'as-is', without any express or implied
62   warranty.  In no event will the authors be held liable for any damages
63   arising from the use of this software.
64
65   Permission is granted to anyone to use this software for any purpose,
66   including commercial applications, and to alter it and redistribute it
67   freely, subject to the following restrictions:
68
69   1. The origin of this software must not be misrepresented; you must not
70      claim that you wrote the original software. If you use this software
71      in a product, an acknowledgment in the product documentation would be
72      appreciated but is not required.
73   2. Altered source versions must be plainly marked as such, and must not be
74      misrepresented as being the original software.
75   3. This notice may not be removed or altered from any source distribution.
76
77   Jean-loup Gailly        Mark Adler
78   jloup@gzip.org          madler@alumni.caltech.edu
79
80
81   The data format used by the zlib library is described by RFCs (Request for
82   Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
83   (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
84 */
85
86 /* zconf.h -- configuration of the zlib compression library
87  * Copyright (C) 1995-1998 Jean-loup Gailly.
88  * For conditions of distribution and use, see copyright notice in zlib.h 
89  */
90
91 #ifndef _ZCONF_H
92 #define _ZCONF_H
93
94 /* Maximum value for memLevel in deflateInit2 */
95 #ifndef MAX_MEM_LEVEL
96 #  ifdef MAXSEG_64K
97 #    define MAX_MEM_LEVEL 8
98 #  else
99 #    define MAX_MEM_LEVEL 9
100 #  endif
101 #endif
102
103 /* Maximum value for windowBits in deflateInit2 and inflateInit2.
104  * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
105  * created by gzip. (Files created by minigzip can still be extracted by
106  * gzip.)
107  */
108 #ifndef MAX_WBITS
109 #  define MAX_WBITS   15 /* 32K LZ77 window */
110 #endif
111
112 /* The memory requirements for deflate are (in bytes):
113             (1 << (windowBits+2)) +  (1 << (memLevel+9))
114  that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
115  plus a few kilobytes for small objects. For example, if you want to reduce
116  the default memory requirements from 256K to 128K, compile with
117      make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
118  Of course this will generally degrade compression (there's no free lunch).
119
120    The memory requirements for inflate are (in bytes) 1 << windowBits
121  that is, 32K for windowBits=15 (default value) plus a few kilobytes
122  for small objects.
123 */
124
125                         /* Type declarations */
126
127 #ifndef OF /* function prototypes */
128 #define OF(args)  args
129 #endif
130
131 typedef unsigned char  Byte;  /* 8 bits */
132 typedef unsigned int   uInt;  /* 16 bits or more */
133 typedef unsigned long  uLong; /* 32 bits or more */
134 typedef Byte    *voidp;
135
136 #ifndef SEEK_SET
137 #  define SEEK_SET        0       /* Seek from beginning of file.  */
138 #  define SEEK_CUR        1       /* Seek from current position.  */
139 #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
140 #endif
141
142 #endif /* _ZCONF_H */
143
144 #define ZLIB_VERSION "1.1.3"
145
146 /* 
147      The 'zlib' compression library provides in-memory compression and
148   decompression functions, including integrity checks of the uncompressed
149   data.  This version of the library supports only one compression method
150   (deflation) but other algorithms will be added later and will have the same
151   stream interface.
152
153      Compression can be done in a single step if the buffers are large
154   enough (for example if an input file is mmap'ed), or can be done by
155   repeated calls of the compression function.  In the latter case, the
156   application must provide more input and/or consume the output
157   (providing more output space) before each call.
158
159      The library also supports reading and writing files in gzip (.gz) format
160   with an interface similar to that of stdio.
161
162      The library does not install any signal handler. The decoder checks
163   the consistency of the compressed data, so the library should never
164   crash even in case of corrupted input.
165 */
166
167 /*
168    The application must update next_in and avail_in when avail_in has
169    dropped to zero. It must update next_out and avail_out when avail_out
170    has dropped to zero. The application must initialize zalloc, zfree and
171    opaque before calling the init function. All other fields are set by the
172    compression library and must not be updated by the application.
173
174    The opaque value provided by the application will be passed as the first
175    parameter for calls of zalloc and zfree. This can be useful for custom
176    memory management. The compression library attaches no meaning to the
177    opaque value.
178
179    zalloc must return Z_NULL if there is not enough memory for the object.
180    If zlib is used in a multi-threaded application, zalloc and zfree must be
181    thread safe.
182
183    On 16-bit systems, the functions zalloc and zfree must be able to allocate
184    exactly 65536 bytes, but will not be required to allocate more than this
185    if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
186    pointers returned by zalloc for objects of exactly 65536 bytes *must*
187    have their offset normalized to zero. The default allocation function
188    provided by this library ensures this (see zutil.c). To reduce memory
189    requirements and avoid any allocation of 64K objects, at the expense of
190    compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
191
192    The fields total_in and total_out can be used for statistics or
193    progress reports. After compression, total_in holds the total size of
194    the uncompressed data and may be saved for use in the decompressor
195    (particularly if the decompressor wants to decompress everything in
196    a single step).
197 */
198
199                         /* constants */
200
201 #define Z_NO_FLUSH      0
202 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
203 #define Z_SYNC_FLUSH    2
204 #define Z_FULL_FLUSH    3
205 #define Z_FINISH        4
206 /* Allowed flush values; see deflate() below for details */
207
208 #define Z_OK            0
209 #define Z_STREAM_END    1
210 #define Z_NEED_DICT     2
211 #define Z_ERRNO        (-1)
212 #define Z_STREAM_ERROR (-2)
213 #define Z_DATA_ERROR   (-3)
214 #define Z_MEM_ERROR    (-4)
215 #define Z_BUF_ERROR    (-5)
216 #define Z_VERSION_ERROR (-6)
217 /* Return codes for the compression/decompression functions. Negative
218  * values are errors, positive values are used for special but normal events.
219  */
220
221 #define Z_NO_COMPRESSION         0
222 #define Z_BEST_SPEED             1
223 #define Z_BEST_COMPRESSION       9
224 #define Z_DEFAULT_COMPRESSION  (-1)
225 /* compression levels */
226
227 #define Z_FILTERED            1
228 #define Z_HUFFMAN_ONLY        2
229 #define Z_DEFAULT_STRATEGY    0
230 /* compression strategy; see deflateInit2() below for details */
231
232 #define Z_BINARY   0
233 #define Z_ASCII    1
234 #define Z_UNKNOWN  2
235 /* Possible values of the data_type field */
236
237 #define Z_DEFLATED   8
238 /* The deflate compression method (the only one supported in this version) */
239
240 #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
241
242 #define zlib_version zlibVersion()
243 /* for compatibility with versions < 1.0.2 */
244
245                         /* basic functions */
246
247 const char * zlibVersion OF((void));
248 /* The application can compare zlibVersion and ZLIB_VERSION for consistency.
249    If the first character differs, the library code actually used is
250    not compatible with the zlib.h header file used by the application.
251    This check is automatically made by deflateInit and inflateInit.
252  */
253
254 /* 
255 int deflateInit OF((z_streamp strm, int level));
256
257      Initializes the internal stream state for compression. The fields
258    zalloc, zfree and opaque must be initialized before by the caller.
259    If zalloc and zfree are set to Z_NULL, deflateInit updates them to
260    use default allocation functions.
261
262      The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
263    1 gives best speed, 9 gives best compression, 0 gives no compression at
264    all (the input data is simply copied a block at a time).
265    Z_DEFAULT_COMPRESSION requests a default compromise between speed and
266    compression (currently equivalent to level 6).
267
268      deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
269    enough memory, Z_STREAM_ERROR if level is not a valid compression level,
270    Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
271    with the version assumed by the caller (ZLIB_VERSION).
272    msg is set to null if there is no error message.  deflateInit does not
273    perform any compression: this will be done by deflate().
274 */
275
276
277 int deflate OF((z_streamp strm, int flush));
278 /*
279     deflate compresses as much data as possible, and stops when the input
280   buffer becomes empty or the output buffer becomes full. It may introduce some
281   output latency (reading input without producing any output) except when
282   forced to flush.
283
284     The detailed semantics are as follows. deflate performs one or both of the
285   following actions:
286
287   - Compress more input starting at next_in and update next_in and avail_in
288     accordingly. If not all input can be processed (because there is not
289     enough room in the output buffer), next_in and avail_in are updated and
290     processing will resume at this point for the next call of deflate().
291
292   - Provide more output starting at next_out and update next_out and avail_out
293     accordingly. This action is forced if the parameter flush is non zero.
294     Forcing flush frequently degrades the compression ratio, so this parameter
295     should be set only when necessary (in interactive applications).
296     Some output may be provided even if flush is not set.
297
298   Before the call of deflate(), the application should ensure that at least
299   one of the actions is possible, by providing more input and/or consuming
300   more output, and updating avail_in or avail_out accordingly; avail_out
301   should never be zero before the call. The application can consume the
302   compressed output when it wants, for example when the output buffer is full
303   (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
304   and with zero avail_out, it must be called again after making room in the
305   output buffer because there might be more output pending.
306
307     If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
308   flushed to the output buffer and the output is aligned on a byte boundary, so
309   that the decompressor can get all input data available so far. (In particular
310   avail_in is zero after the call if enough output space has been provided
311   before the call.)  Flushing may degrade compression for some compression
312   algorithms and so it should be used only when necessary.
313
314     If flush is set to Z_FULL_FLUSH, all output is flushed as with
315   Z_SYNC_FLUSH, and the compression state is reset so that decompression can
316   restart from this point if previous compressed data has been damaged or if
317   random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
318   the compression.
319
320     If deflate returns with avail_out == 0, this function must be called again
321   with the same value of the flush parameter and more output space (updated
322   avail_out), until the flush is complete (deflate returns with non-zero
323   avail_out).
324
325     If the parameter flush is set to Z_FINISH, pending input is processed,
326   pending output is flushed and deflate returns with Z_STREAM_END if there
327   was enough output space; if deflate returns with Z_OK, this function must be
328   called again with Z_FINISH and more output space (updated avail_out) but no
329   more input data, until it returns with Z_STREAM_END or an error. After
330   deflate has returned Z_STREAM_END, the only possible operations on the
331   stream are deflateReset or deflateEnd.
332   
333     Z_FINISH can be used immediately after deflateInit if all the compression
334   is to be done in a single step. In this case, avail_out must be at least
335   0.1% larger than avail_in plus 12 bytes.  If deflate does not return
336   Z_STREAM_END, then it must be called again as described above.
337
338     deflate() sets strm->adler to the adler32 checksum of all input read
339   so (that is, total_in bytes).
340
341     deflate() may update data_type if it can make a good guess about
342   the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
343   binary. This field is only for information purposes and does not affect
344   the compression algorithm in any manner.
345
346     deflate() returns Z_OK if some progress has been made (more input
347   processed or more output produced), Z_STREAM_END if all input has been
348   consumed and all output has been produced (only when flush is set to
349   Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
350   if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
351   (for example avail_in or avail_out was zero).
352 */
353
354
355 int deflateEnd OF((z_streamp strm));
356 /*
357      All dynamically allocated data structures for this stream are freed.
358    This function discards any unprocessed input and does not flush any
359    pending output.
360
361      deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
362    stream state was inconsistent, Z_DATA_ERROR if the stream was freed
363    prematurely (some input or output was discarded). In the error case,
364    msg may be set but then points to a static string (which must not be
365    deallocated).
366 */
367
368
369 /* 
370 int inflateInit OF((z_streamp strm));
371
372      Initializes the internal stream state for decompression. The fields
373    next_in, avail_in, zalloc, zfree and opaque must be initialized before by
374    the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
375    value depends on the compression method), inflateInit determines the
376    compression method from the zlib header and allocates all data structures
377    accordingly; otherwise the allocation will be deferred to the first call of
378    inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
379    use default allocation functions.
380
381      inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
382    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
383    version assumed by the caller.  msg is set to null if there is no error
384    message. inflateInit does not perform any decompression apart from reading
385    the zlib header if present: this will be done by inflate().  (So next_in and
386    avail_in may be modified, but next_out and avail_out are unchanged.)
387 */
388
389
390 int inflate OF((z_streamp strm, int flush));
391 /*
392     inflate decompresses as much data as possible, and stops when the input
393   buffer becomes empty or the output buffer becomes full. It may some
394   introduce some output latency (reading input without producing any output)
395   except when forced to flush.
396
397   The detailed semantics are as follows. inflate performs one or both of the
398   following actions:
399
400   - Decompress more input starting at next_in and update next_in and avail_in
401     accordingly. If not all input can be processed (because there is not
402     enough room in the output buffer), next_in is updated and processing
403     will resume at this point for the next call of inflate().
404
405   - Provide more output starting at next_out and update next_out and avail_out
406     accordingly.  inflate() provides as much output as possible, until there
407     is no more input data or no more space in the output buffer (see below
408     about the flush parameter).
409
410   Before the call of inflate(), the application should ensure that at least
411   one of the actions is possible, by providing more input and/or consuming
412   more output, and updating the next_* and avail_* values accordingly.
413   The application can consume the uncompressed output when it wants, for
414   example when the output buffer is full (avail_out == 0), or after each
415   call of inflate(). If inflate returns Z_OK and with zero avail_out, it
416   must be called again after making room in the output buffer because there
417   might be more output pending.
418
419     If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
420   output as possible to the output buffer. The flushing behavior of inflate is
421   not specified for values of the flush parameter other than Z_SYNC_FLUSH
422   and Z_FINISH, but the current implementation actually flushes as much output
423   as possible anyway.
424
425     inflate() should normally be called until it returns Z_STREAM_END or an
426   error. However if all decompression is to be performed in a single step
427   (a single call of inflate), the parameter flush should be set to
428   Z_FINISH. In this case all pending input is processed and all pending
429   output is flushed; avail_out must be large enough to hold all the
430   uncompressed data. (The size of the uncompressed data may have been saved
431   by the compressor for this purpose.) The next operation on this stream must
432   be inflateEnd to deallocate the decompression state. The use of Z_FINISH
433   is never required, but can be used to inform inflate that a faster routine
434   may be used for the single inflate() call.
435
436      If a preset dictionary is needed at this point (see inflateSetDictionary
437   below), inflate sets strm-adler to the adler32 checksum of the
438   dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
439   it sets strm->adler to the adler32 checksum of all output produced
440   so (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
441   an error code as described below. At the end of the stream, inflate()
442   checks that its computed adler32 checksum is equal to that saved by the
443   compressor and returns Z_STREAM_END only if the checksum is correct.
444
445     inflate() returns Z_OK if some progress has been made (more input processed
446   or more output produced), Z_STREAM_END if the end of the compressed data has
447   been reached and all uncompressed output has been produced, Z_NEED_DICT if a
448   preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
449   corrupted (input stream not conforming to the zlib format or incorrect
450   adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
451   (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
452   enough memory, Z_BUF_ERROR if no progress is possible or if there was not
453   enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
454   case, the application may then call inflateSync to look for a good
455   compression block.
456 */
457
458
459 int inflateEnd OF((z_streamp strm));
460 /*
461      All dynamically allocated data structures for this stream are freed.
462    This function discards any unprocessed input and does not flush any
463    pending output.
464
465      inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
466    was inconsistent. In the error case, msg may be set but then points to a
467    static string (which must not be deallocated).
468 */
469
470                         /* Advanced functions */
471
472 /*
473     The following functions are needed only in some special applications.
474 */
475
476 /*   
477 int deflateInit2 OF((z_streamp strm,
478                                      int  level,
479                                      int  method,
480                                      int  windowBits,
481                                      int  memLevel,
482                                      int  strategy));
483
484      This is another version of deflateInit with more compression options. The
485    fields next_in, zalloc, zfree and opaque must be initialized before by
486    the caller.
487
488      The method parameter is the compression method. It must be Z_DEFLATED in
489    this version of the library.
490
491      The windowBits parameter is the base two logarithm of the window size
492    (the size of the history buffer).  It should be in the range 8..15 for this
493    version of the library. Larger values of this parameter result in better
494    compression at the expense of memory usage. The default value is 15 if
495    deflateInit is used instead.
496
497      The memLevel parameter specifies how much memory should be allocated
498    for the internal compression state. memLevel=1 uses minimum memory but
499    is slow and reduces compression ratio; memLevel=9 uses maximum memory
500    for optimal speed. The default value is 8. See zconf.h for total memory
501    usage as a function of windowBits and memLevel.
502
503      The strategy parameter is used to tune the compression algorithm. Use the
504    value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
505    filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
506    string match).  Filtered data consists mostly of small values with a
507    somewhat random distribution. In this case, the compression algorithm is
508    tuned to compress them better. The effect of Z_FILTERED is to force more
509    Huffman coding and less string matching; it is somewhat intermediate
510    between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
511    the compression ratio but not the correctness of the compressed output even
512    if it is not set appropriately.
513
514       deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
515    memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
516    method). msg is set to null if there is no error message.  deflateInit2 does
517    not perform any compression: this will be done by deflate().
518 */
519                             
520 int deflateSetDictionary OF((z_streamp strm,
521                                              const Byte *dictionary,
522                                              uInt  dictLength));
523 /*
524      Initializes the compression dictionary from the given byte sequence
525    without producing any compressed output. This function must be called
526    immediately after deflateInit, deflateInit2 or deflateReset, before any
527    call of deflate. The compressor and decompressor must use exactly the same
528    dictionary (see inflateSetDictionary).
529
530      The dictionary should consist of strings (byte sequences) that are likely
531    to be encountered later in the data to be compressed, with the most commonly
532    used strings preferably put towards the end of the dictionary. Using a
533    dictionary is most useful when the data to be compressed is short and can be
534    predicted with good accuracy; the data can then be compressed better than
535    with the default empty dictionary.
536
537      Depending on the size of the compression data structures selected by
538    deflateInit or deflateInit2, a part of the dictionary may in effect be
539    discarded, for example if the dictionary is larger than the window size in
540    deflate or deflate2. Thus the strings most likely to be useful should be
541    put at the end of the dictionary, not at the front.
542
543      Upon return of this function, strm->adler is set to the Adler32 value
544    of the dictionary; the decompressor may later use this value to determine
545    which dictionary has been used by the compressor. (The Adler32 value
546    applies to the whole dictionary even if only a subset of the dictionary is
547    actually used by the compressor.)
548
549      deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
550    parameter is invalid (such as NULL dictionary) or the stream state is
551    inconsistent (for example if deflate has already been called for this stream
552    or if the compression method is bsort). deflateSetDictionary does not
553    perform any compression: this will be done by deflate().
554 */
555
556 int deflateCopy OF((z_streamp dest,
557                                     z_streamp source));
558 /*
559      Sets the destination stream as a complete copy of the source stream.
560
561      This function can be useful when several compression strategies will be
562    tried, for example when there are several ways of pre-processing the input
563    data with a filter. The streams that will be discarded should then be freed
564    by calling deflateEnd.  Note that deflateCopy duplicates the internal
565    compression state which can be quite large, so this strategy is slow and
566    can consume lots of memory.
567
568      deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
569    enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
570    (such as zalloc being NULL). msg is left unchanged in both source and
571    destination.
572 */
573
574 int deflateReset OF((z_streamp strm));
575 /*
576      This function is equivalent to deflateEnd followed by deflateInit,
577    but does not free and reallocate all the internal compression state.
578    The stream will keep the same compression level and any other attributes
579    that may have been set by deflateInit2.
580
581       deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
582    stream state was inconsistent (such as zalloc or state being NULL).
583 */
584
585 int deflateParams OF((z_streamp strm,
586                                       int level,
587                                       int strategy));
588 /*
589      Dynamically update the compression level and compression strategy.  The
590    interpretation of level and strategy is as in deflateInit2.  This can be
591    used to switch between compression and straight copy of the input data, or
592    to switch to a different kind of input data requiring a different
593    strategy. If the compression level is changed, the input available so far
594    is compressed with the old level (and may be flushed); the new level will
595    take effect only at the next call of deflate().
596
597      Before the call of deflateParams, the stream state must be set as for
598    a call of deflate(), since the currently available input may have to
599    be compressed and flushed. In particular, strm->avail_out must be non-zero.
600
601      deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
602    stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
603    if strm->avail_out was zero.
604 */
605
606 /*   
607 int inflateInit2 OF((z_streamp strm,
608                                      int  windowBits));
609
610      This is another version of inflateInit with an extra parameter. The
611    fields next_in, avail_in, zalloc, zfree and opaque must be initialized
612    before by the caller.
613
614      The windowBits parameter is the base two logarithm of the maximum window
615    size (the size of the history buffer).  It should be in the range 8..15 for
616    this version of the library. The default value is 15 if inflateInit is used
617    instead. If a compressed stream with a larger window size is given as
618    input, inflate() will return with the error code Z_DATA_ERROR instead of
619    trying to allocate a larger window.
620
621       inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
622    memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
623    memLevel). msg is set to null if there is no error message.  inflateInit2
624    does not perform any decompression apart from reading the zlib header if
625    present: this will be done by inflate(). (So next_in and avail_in may be
626    modified, but next_out and avail_out are unchanged.)
627 */
628
629 int inflateSetDictionary OF((z_streamp strm,
630                                              const Byte *dictionary,
631                                              uInt  dictLength));
632 /*
633      Initializes the decompression dictionary from the given uncompressed byte
634    sequence. This function must be called immediately after a call of inflate
635    if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
636    can be determined from the Adler32 value returned by this call of
637    inflate. The compressor and decompressor must use exactly the same
638    dictionary (see deflateSetDictionary).
639
640      inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
641    parameter is invalid (such as NULL dictionary) or the stream state is
642    inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
643    expected one (incorrect Adler32 value). inflateSetDictionary does not
644    perform any decompression: this will be done by subsequent calls of
645    inflate().
646 */
647
648 int inflateSync OF((z_streamp strm));
649 /* 
650     Skips invalid compressed data until a full flush point (see above the
651   description of deflate with Z_FULL_FLUSH) can be found, or until all
652   available input is skipped. No output is provided.
653
654     inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
655   if no more input was provided, Z_DATA_ERROR if no flush point has been found,
656   or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
657   case, the application may save the current current value of total_in which
658   indicates where valid compressed data was found. In the error case, the
659   application may repeatedly call inflateSync, providing more input each time,
660   until success or end of the input data.
661 */
662
663 int inflateReset OF((z_streamp strm));
664 /*
665      This function is equivalent to inflateEnd followed by inflateInit,
666    but does not free and reallocate all the internal decompression state.
667    The stream will keep attributes that may have been set by inflateInit2.
668
669       inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
670    stream state was inconsistent (such as zalloc or state being NULL).
671 */
672
673
674                         /* utility functions */
675
676 /*
677      The following utility functions are implemented on top of the
678    basic stream-oriented functions. To simplify the interface, some
679    default options are assumed (compression level and memory usage,
680    standard memory allocation functions). The source code of these
681    utility functions can easily be modified if you need special options.
682 */
683
684 int compress OF((Byte *dest,   uLong *destLen,
685                                  const Byte *source, uLong sourceLen));
686 /*
687      Compresses the source buffer into the destination buffer.  sourceLen is
688    the byte length of the source buffer. Upon entry, destLen is the total
689    size of the destination buffer, which must be at least 0.1% larger than
690    sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
691    compressed buffer.
692      This function can be used to compress a whole file at once if the
693    input file is mmap'ed.
694      compress returns Z_OK if success, Z_MEM_ERROR if there was not
695    enough memory, Z_BUF_ERROR if there was not enough room in the output
696    buffer.
697 */
698
699 int compress2 OF((Byte *dest,   uLong *destLen,
700                                   const Byte *source, uLong sourceLen,
701                                   int level));
702 /*
703      Compresses the source buffer into the destination buffer. The level
704    parameter has the same meaning as in deflateInit.  sourceLen is the byte
705    length of the source buffer. Upon entry, destLen is the total size of the
706    destination buffer, which must be at least 0.1% larger than sourceLen plus
707    12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
708
709      compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
710    memory, Z_BUF_ERROR if there was not enough room in the output buffer,
711    Z_STREAM_ERROR if the level parameter is invalid.
712 */
713
714 int uncompress OF((Byte *dest,   uLong *destLen,
715                                    const Byte *source, uLong sourceLen));
716 /*
717      Decompresses the source buffer into the destination buffer.  sourceLen is
718    the byte length of the source buffer. Upon entry, destLen is the total
719    size of the destination buffer, which must be large enough to hold the
720    entire uncompressed data. (The size of the uncompressed data must have
721    been saved previously by the compressor and transmitted to the decompressor
722    by some mechanism outside the scope of this compression library.)
723    Upon exit, destLen is the actual size of the compressed buffer.
724      This function can be used to decompress a whole file at once if the
725    input file is mmap'ed.
726
727      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
728    enough memory, Z_BUF_ERROR if there was not enough room in the output
729    buffer, or Z_DATA_ERROR if the input data was corrupted.
730 */
731
732
733 typedef voidp gzFile;
734
735 gzFile gzopen  OF((const char *path, const char *mode));
736 /*
737      Opens a gzip (.gz) file for reading or writing. The mode parameter
738    is as in fopen ("rb" or "wb") but can also include a compression level
739    ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
740    Huffman only compression as in "wb1h". (See the description
741    of deflateInit2 for more information about the strategy parameter.)
742
743      gzopen can be used to read a file which is not in gzip format; in this
744    case gzread will directly read from the file without decompression.
745
746      gzopen returns NULL if the file could not be opened or if there was
747    insufficient memory to allocate the (de)compression state; errno
748    can be checked to distinguish the two cases (if errno is zero, the
749    zlib error is Z_MEM_ERROR).  */
750
751 gzFile gzdopen  OF((int fd, const char *mode));
752 /*
753      gzdopen() associates a gzFile with the file descriptor fd.  File
754    descriptors are obtained from calls like open, dup, creat, pipe or
755    fileno (in the file has been previously opened with fopen).
756    The mode parameter is as in gzopen.
757      The next call of gzclose on the returned gzFile will also close the
758    file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
759    descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
760      gzdopen returns NULL if there was insufficient memory to allocate
761    the (de)compression state.
762 */
763
764 int gzsetparams OF((gzFile file, int level, int strategy));
765 /*
766      Dynamically update the compression level or strategy. See the description
767    of deflateInit2 for the meaning of these parameters.
768      gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
769    opened for writing.
770 */
771
772 int    gzread  OF((gzFile file, voidp buf, unsigned len));
773 /*
774      Reads the given number of uncompressed bytes from the compressed file.
775    If the input file was not in gzip format, gzread copies the given number
776    of bytes into the buffer.
777      gzread returns the number of uncompressed bytes actually read (0 for
778    end of file, -1 for error). */
779
780 int    gzwrite OF((gzFile file, 
781                                    const voidp buf, unsigned len));
782 /*
783      Writes the given number of uncompressed bytes into the compressed file.
784    gzwrite returns the number of uncompressed bytes actually written
785    (0 in case of error).
786 */
787
788 int    gzprintf OF((gzFile file, const char *format, ...));
789 /*
790      Converts, formats, and writes the args to the compressed file under
791    control of the format string, as in fprintf. gzprintf returns the number of
792    uncompressed bytes actually written (0 in case of error).
793 */
794
795 int gzputs OF((gzFile file, const char *s));
796 /*
797       Writes the given null-terminated string to the compressed file, excluding
798    the terminating null character.
799       gzputs returns the number of characters written, or -1 in case of error.
800 */
801
802 char * gzgets OF((gzFile file, char *buf, int len));
803 /*
804       Reads bytes from the compressed file until len-1 characters are read, or
805    a newline character is read and transferred to buf, or an end-of-file
806    condition is encountered.  The string is then terminated with a null
807    character.
808       gzgets returns buf, or Z_NULL in case of error.
809 */
810
811 int    gzputc OF((gzFile file, int c));
812 /*
813       Writes c, converted to an unsigned char, into the compressed file.
814    gzputc returns the value that was written, or -1 in case of error.
815 */
816
817 int    gzgetc OF((gzFile file));
818 /*
819       Reads one byte from the compressed file. gzgetc returns this byte
820    or -1 in case of end of file or error.
821 */
822
823 int    gzflush OF((gzFile file, int flush));
824 /*
825      Flushes all pending output into the compressed file. The parameter
826    flush is as in the deflate() function. The return value is the zlib
827    error number (see function gzerror below). gzflush returns Z_OK if
828    the flush parameter is Z_FINISH and all output could be flushed.
829      gzflush should be called only when strictly necessary because it can
830    degrade compression.
831 */
832
833 long gzseek OF((gzFile file,
834                                       long offset, int whence));
835 /* 
836       Sets the starting position for the next gzread or gzwrite on the
837    given compressed file. The offset represents a number of bytes in the
838    uncompressed data stream. The whence parameter is defined as in lseek(2);
839    the value SEEK_END is not supported.
840      If the file is opened for reading, this function is emulated but can be
841    extremely slow. If the file is opened for writing, only forward seeks are
842    supported; gzseek then compresses a sequence of zeroes up to the new
843    starting position.
844
845       gzseek returns the resulting offset location as measured in bytes from
846    the beginning of the uncompressed stream, or -1 in case of error, in
847    particular if the file is opened for writing and the new starting position
848    would be before the current position.
849 */
850
851 int    gzrewind OF((gzFile file));
852 /*
853      Rewinds the given file. This function is supported only for reading.
854
855    gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
856 */
857
858 long    gztell OF((gzFile file));
859 /*
860      Returns the starting position for the next gzread or gzwrite on the
861    given compressed file. This position represents a number of bytes in the
862    uncompressed data stream.
863
864    gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
865 */
866
867 int gzeof OF((gzFile file));
868 /*
869      Returns 1 when EOF has previously been detected reading the given
870    input stream, otherwise zero.
871 */
872
873 int    gzclose OF((gzFile file));
874 /*
875      Flushes all pending output if necessary, closes the compressed file
876    and deallocates all the (de)compression state. The return value is the zlib
877    error number (see function gzerror below).
878 */
879
880 const char * gzerror OF((gzFile file, int *errnum));
881 /*
882      Returns the error message for the last error which occurred on the
883    given compressed file. errnum is set to zlib error number. If an
884    error occurred in the file system and not in the compression library,
885    errnum is set to Z_ERRNO and the application may consult errno
886    to get the exact error code.
887 */
888
889                         /* checksum functions */
890
891 /*
892      These functions are not related to compression but are exported
893    anyway because they might be useful in applications using the
894    compression library.
895 */
896
897 uLong adler32 OF((uLong adler, const Byte *buf, uInt len));
898
899 /*
900      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
901    return the updated checksum. If buf is NULL, this function returns
902    the required initial value for the checksum.
903    An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
904    much faster. Usage example:
905
906      uLong adler = adler32(0L, Z_NULL, 0);
907
908      while (read_buffer(buffer, length) != EOF) {
909        adler = adler32(adler, buffer, length);
910      }
911      if (adler != original_adler) error();
912 */
913
914 uLong crc32   OF((uLong crc, const Byte *buf, uInt len));
915 /*
916      Update a running crc with the bytes buf[0..len-1] and return the updated
917    crc. If buf is NULL, this function returns the required initial value
918    for the crc. Pre- and post-conditioning (one's complement) is performed
919    within this function so it shouldn't be done by the application.
920    Usage example:
921
922      uLong crc = crc32(0L, Z_NULL, 0);
923
924      while (read_buffer(buffer, length) != EOF) {
925        crc = crc32(crc, buffer, length);
926      }
927      if (crc != original_crc) error();
928 */
929
930 // private stuff to not include cmdlib.h
931 /*
932 ============================================================================
933
934                                         BYTE ORDER FUNCTIONS
935
936 ============================================================================
937 */
938
939 #ifdef _SGI_SOURCE
940 #define __BIG_ENDIAN__
941 #endif
942
943 #ifdef __BIG_ENDIAN__
944
945 short   __LittleShort (short l)
946 {
947         byte    b1,b2;
948
949         b1 = l&255;
950         b2 = (l>>8)&255;
951
952         return (b1<<8) + b2;
953 }
954
955 short   __BigShort (short l)
956 {
957         return l;
958 }
959
960
961 int    __LittleLong (int l)
962 {
963         byte    b1,b2,b3,b4;
964
965         b1 = l&255;
966         b2 = (l>>8)&255;
967         b3 = (l>>16)&255;
968         b4 = (l>>24)&255;
969
970         return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
971 }
972
973 int    __BigLong (int l)
974 {
975         return l;
976 }
977
978
979 float   __LittleFloat (float l)
980 {
981         union {byte b[4]; float f;} in, out;
982         
983         in.f = l;
984         out.b[0] = in.b[3];
985         out.b[1] = in.b[2];
986         out.b[2] = in.b[1];
987         out.b[3] = in.b[0];
988         
989         return out.f;
990 }
991
992 float   __BigFloat (float l)
993 {
994         return l;
995 }
996
997
998 #else
999
1000
1001 short   __BigShort (short l)
1002 {
1003         byte    b1,b2;
1004
1005         b1 = l&255;
1006         b2 = (l>>8)&255;
1007
1008         return (b1<<8) + b2;
1009 }
1010
1011 short   __LittleShort (short l)
1012 {
1013         return l;
1014 }
1015
1016
1017 int    __BigLong (int l)
1018 {
1019         byte    b1,b2,b3,b4;
1020
1021         b1 = l&255;
1022         b2 = (l>>8)&255;
1023         b3 = (l>>16)&255;
1024         b4 = (l>>24)&255;
1025
1026         return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
1027 }
1028
1029 int    __LittleLong (int l)
1030 {
1031         return l;
1032 }
1033
1034 float   __BigFloat (float l)
1035 {
1036         union {byte b[4]; float f;} in, out;
1037         
1038         in.f = l;
1039         out.b[0] = in.b[3];
1040         out.b[1] = in.b[2];
1041         out.b[2] = in.b[1];
1042         out.b[3] = in.b[0];
1043         
1044         return out.f;
1045 }
1046
1047 float   __LittleFloat (float l)
1048 {
1049         return l;
1050 }
1051
1052
1053
1054 #endif
1055
1056
1057
1058
1059                         /* various hacks, don't look :) */
1060
1061 /* deflateInit and inflateInit are macros to allow checking the zlib version
1062  * and the compiler's view of z_stream:
1063  */
1064 int deflateInit_ OF((z_streamp strm, int level,
1065                                      const char *version, int stream_size));
1066 int inflateInit_ OF((z_streamp strm,
1067                                      const char *version, int stream_size));
1068 int deflateInit2_ OF((z_streamp strm, int  level, int  method,
1069                                       int windowBits, int memLevel,
1070                                       int strategy, const char *version,
1071                                       int stream_size));
1072 int inflateInit2_ OF((z_streamp strm, int  windowBits,
1073                                       const char *version, int stream_size));
1074 #define deflateInit(strm, level) \
1075         deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
1076 #define inflateInit(strm) \
1077         inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
1078 #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
1079         deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
1080                       (strategy),           ZLIB_VERSION, sizeof(z_stream))
1081 #define inflateInit2(strm, windowBits) \
1082         inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
1083
1084
1085 const char   * zError           OF((int err));
1086 int            inflateSyncPoint OF((z_streamp z));
1087 const uLong * get_crc_table    OF((void));
1088
1089 typedef unsigned char  uch;
1090 typedef unsigned short ush;
1091 typedef unsigned long  ulg;
1092
1093 extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
1094 /* (size given to avoid silly warnings with Visual C++) */
1095
1096 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
1097
1098 #define ERR_RETURN(strm,err) \
1099   return (strm->msg = (char*)ERR_MSG(err), (err))
1100 /* To be used only when the state is known to be valid */
1101
1102         /* common constants */
1103
1104 #ifndef DEF_WBITS
1105 #  define DEF_WBITS MAX_WBITS
1106 #endif
1107 /* default windowBits for decompression. MAX_WBITS is for compression only */
1108
1109 #if MAX_MEM_LEVEL >= 8
1110 #  define DEF_MEM_LEVEL 8
1111 #else
1112 #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
1113 #endif
1114 /* default memLevel */
1115
1116 #define STORED_BLOCK 0
1117 #define STATIC_TREES 1
1118 #define DYN_TREES    2
1119 /* The three kinds of block type */
1120
1121 #define MIN_MATCH  3
1122 #define MAX_MATCH  258
1123 /* The minimum and maximum match lengths */
1124
1125 #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
1126
1127         /* target dependencies */
1128
1129         /* Common defaults */
1130
1131 #ifndef OS_CODE
1132 #  define OS_CODE  0x03  /* assume Unix */
1133 #endif
1134
1135 #ifndef F_OPEN
1136 #  define F_OPEN(name, mode) fopen((name), (mode))
1137 #endif
1138
1139          /* functions */
1140
1141 #ifdef HAVE_STRERROR
1142    extern char *strerror OF((int));
1143 #  define zstrerror(errnum) strerror(errnum)
1144 #else
1145 #  define zstrerror(errnum) ""
1146 #endif
1147
1148 #define zmemcpy memcpy
1149 #define zmemcmp memcmp
1150 #define zmemzero(dest, len) memset(dest, 0, len)
1151
1152 /* Diagnostic functions */
1153 #ifdef _ZIP_DEBUG_
1154    int z_verbose = 0;
1155 #  define Assert(cond,msg) assert(cond);
1156    //{if(!(cond)) Sys_Error(msg);}
1157 #  define Trace(x) {if (z_verbose>=0) Sys_Error x ;}
1158 #  define Tracev(x) {if (z_verbose>0) Sys_Error x ;}
1159 #  define Tracevv(x) {if (z_verbose>1) Sys_Error x ;}
1160 #  define Tracec(c,x) {if (z_verbose>0 && (c)) Sys_Error x ;}
1161 #  define Tracecv(c,x) {if (z_verbose>1 && (c)) Sys_Error x ;}
1162 #else
1163 #  define Assert(cond,msg)
1164 #  define Trace(x)
1165 #  define Tracev(x)
1166 #  define Tracevv(x)
1167 #  define Tracec(c,x)
1168 #  define Tracecv(c,x)
1169 #endif
1170
1171
1172 typedef uLong (*check_func) OF((uLong check, const Byte *buf, uInt len));
1173 voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
1174 void   zcfree  OF((voidp opaque, voidp ptr));
1175
1176 #define ZALLOC(strm, items, size) \
1177            (*((strm)->zalloc))((strm)->opaque, (items), (size))
1178 #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidp)(addr))
1179 #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
1180
1181
1182 #if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \
1183                       !defined(CASESENSITIVITYDEFAULT_NO)
1184 #define CASESENSITIVITYDEFAULT_NO
1185 #endif
1186
1187
1188 #ifndef UNZ_BUFSIZE
1189 #define UNZ_BUFSIZE (65536)
1190 #endif
1191
1192 #ifndef UNZ_MAXFILENAMEINZIP
1193 #define UNZ_MAXFILENAMEINZIP (256)
1194 #endif
1195
1196 #ifndef ALLOC
1197 # define ALLOC(size) (malloc(size))
1198 #endif
1199 #ifndef TRYFREE
1200 # define TRYFREE(p) {if (p) free(p);}
1201 #endif
1202
1203 #define SIZECENTRALDIRITEM (0x2e)
1204 #define SIZEZIPLOCALHEADER (0x1e)
1205
1206
1207
1208 /* ===========================================================================
1209      Read a byte from a gz_stream; update next_in and avail_in. Return EOF
1210    for end of file.
1211    IN assertion: the stream s has been sucessfully opened for reading.
1212 */
1213
1214 /*
1215 static int unzlocal_getByte(FILE *fin,int *pi)
1216 {
1217     unsigned char c;
1218         int err = fread(&c, 1, 1, fin);
1219     if (err==1)
1220     {
1221         *pi = (int)c;
1222         return UNZ_OK;
1223     }
1224     else
1225     {
1226         if (ferror(fin)) 
1227             return UNZ_ERRNO;
1228         else
1229             return UNZ_EOF;
1230     }
1231 }
1232 */
1233
1234 /* ===========================================================================
1235    Reads a long in LSB order from the given gz_stream. Sets 
1236 */
1237 static int unzlocal_getShort (FILE* fin, uLong *pX)
1238 {
1239         short   v;
1240
1241         fread( &v, sizeof(v), 1, fin );
1242
1243         *pX = __LittleShort( v);
1244         return UNZ_OK;
1245
1246 /*
1247     uLong x ;
1248     int i;
1249     int err;
1250
1251     err = unzlocal_getByte(fin,&i);
1252     x = (uLong)i;
1253     
1254     if (err==UNZ_OK)
1255         err = unzlocal_getByte(fin,&i);
1256     x += ((uLong)i)<<8;
1257    
1258     if (err==UNZ_OK)
1259         *pX = x;
1260     else
1261         *pX = 0;
1262     return err;
1263 */
1264 }
1265
1266 static int unzlocal_getLong (FILE *fin, uLong *pX)
1267 {
1268         int             v;
1269
1270         fread( &v, sizeof(v), 1, fin );
1271
1272         *pX = __LittleLong( v);
1273         return UNZ_OK;
1274
1275 /*
1276     uLong x ;
1277     int i;
1278     int err;
1279
1280     err = unzlocal_getByte(fin,&i);
1281     x = (uLong)i;
1282     
1283     if (err==UNZ_OK)
1284         err = unzlocal_getByte(fin,&i);
1285     x += ((uLong)i)<<8;
1286
1287     if (err==UNZ_OK)
1288         err = unzlocal_getByte(fin,&i);
1289     x += ((uLong)i)<<16;
1290
1291     if (err==UNZ_OK)
1292         err = unzlocal_getByte(fin,&i);
1293     x += ((uLong)i)<<24;
1294    
1295     if (err==UNZ_OK)
1296         *pX = x;
1297     else
1298         *pX = 0;
1299     return err;
1300 */
1301 }
1302
1303
1304 /* My own strcmpi / strcasecmp */
1305 static int strcmpcasenosensitive_internal (const char* fileName1,const char* fileName2)
1306 {
1307         for (;;)
1308         {
1309                 char c1=*(fileName1++);
1310                 char c2=*(fileName2++);
1311                 if ((c1>='a') && (c1<='z'))
1312                         c1 -= 0x20;
1313                 if ((c2>='a') && (c2<='z'))
1314                         c2 -= 0x20;
1315                 if (c1=='\0')
1316                         return ((c2=='\0') ? 0 : -1);
1317                 if (c2=='\0')
1318                         return 1;
1319                 if (c1<c2)
1320                         return -1;
1321                 if (c1>c2)
1322                         return 1;
1323         }
1324 }
1325
1326
1327 #ifdef  CASESENSITIVITYDEFAULT_NO
1328 #define CASESENSITIVITYDEFAULTVALUE 2
1329 #else
1330 #define CASESENSITIVITYDEFAULTVALUE 1
1331 #endif
1332
1333 #ifndef STRCMPCASENOSENTIVEFUNCTION
1334 #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
1335 #endif
1336
1337 /* 
1338    Compare two filename (fileName1,fileName2).
1339    If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
1340    If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
1341                                                                 or strcasecmp)
1342    If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
1343         (like 1 on Unix, 2 on Windows)
1344
1345 */
1346 extern int unzStringFileNameCompare (const char* fileName1,const char* fileName2,int iCaseSensitivity)
1347 {
1348         if (iCaseSensitivity==0)
1349                 iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
1350
1351         if (iCaseSensitivity==1)
1352                 return strcmp(fileName1,fileName2);
1353
1354         return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
1355
1356
1357 #define BUFREADCOMMENT (0x400)
1358
1359 /*
1360   Locate the Central directory of a zipfile (at the end, just before
1361     the global comment)
1362 */
1363 static uLong unzlocal_SearchCentralDir(FILE *fin)
1364 {
1365         unsigned char* buf;
1366         uLong uSizeFile;
1367         uLong uBackRead;
1368         uLong uMaxBack=0xffff; /* maximum size of global comment */
1369         uLong uPosFound=0;
1370         
1371         if (fseek(fin,0,SEEK_END) != 0)
1372                 return 0;
1373
1374
1375         uSizeFile = ftell( fin );
1376         
1377         if (uMaxBack>uSizeFile)
1378                 uMaxBack = uSizeFile;
1379
1380         buf = (unsigned char*)malloc(BUFREADCOMMENT+4);
1381         if (buf==NULL)
1382                 return 0;
1383
1384         uBackRead = 4;
1385         while (uBackRead<uMaxBack)
1386         {
1387                 uLong uReadSize,uReadPos ;
1388                 int i;
1389                 if (uBackRead+BUFREADCOMMENT>uMaxBack) 
1390                         uBackRead = uMaxBack;
1391                 else
1392                         uBackRead+=BUFREADCOMMENT;
1393                 uReadPos = uSizeFile-uBackRead ;
1394                 
1395                 uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? 
1396                      (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
1397                 if (fseek(fin,uReadPos,SEEK_SET)!=0)
1398                         break;
1399
1400                 if (fread(buf,(uInt)uReadSize,1,fin)!=1)
1401                         break;
1402
1403                 for (i=(int)uReadSize-3; (i--)>0;)
1404                         if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && 
1405                                 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
1406                         {
1407                                 uPosFound = uReadPos+i;
1408                                 break;
1409                         }
1410
1411                 if (uPosFound!=0)
1412                         break;
1413         }
1414         free(buf);
1415         return uPosFound;
1416 }
1417
1418 extern unzFile unzReOpen (const char* path, unzFile file)
1419 {
1420         unz_s *s;
1421         FILE * fin;
1422
1423     fin=fopen(path,"rb");
1424         if (fin==NULL)
1425                 return NULL;
1426
1427         s=(unz_s*)malloc(sizeof(unz_s));
1428         memcpy(s, (unz_s*)file, sizeof(unz_s));
1429
1430         s->file = fin;
1431         return (unzFile)s;      
1432 }
1433
1434 /*
1435   Open a Zip file. path contain the full pathname (by example,
1436      on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer
1437          "zlib/zlib109.zip".
1438          If the zipfile cannot be opened (file don't exist or in not valid), the
1439            return value is NULL.
1440      Else, the return value is a unzFile Handle, usable with other function
1441            of this unzip package.
1442 */
1443 extern unzFile unzOpen (const char* path)
1444 {
1445         unz_s us;
1446         unz_s *s;
1447         uLong central_pos,uL;
1448         FILE * fin ;
1449
1450         uLong number_disk;          /* number of the current dist, used for 
1451                                                                    spaning ZIP, unsupported, always 0*/
1452         uLong number_disk_with_CD;  /* number the the disk with central dir, used
1453                                                                    for spaning ZIP, unsupported, always 0*/
1454         uLong number_entry_CD;      /* total number of entries in
1455                                        the central dir 
1456                                        (same than number_entry on nospan) */
1457
1458         int err=UNZ_OK;
1459
1460     fin=fopen(path,"rb");
1461         if (fin==NULL)
1462                 return NULL;
1463
1464         central_pos = unzlocal_SearchCentralDir(fin);
1465         if (central_pos==0)
1466                 err=UNZ_ERRNO;
1467
1468         if (fseek(fin,central_pos,SEEK_SET)!=0)
1469                 err=UNZ_ERRNO;
1470
1471         /* the signature, already checked */
1472         if (unzlocal_getLong(fin,&uL)!=UNZ_OK)
1473                 err=UNZ_ERRNO;
1474
1475         /* number of this disk */
1476         if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK)
1477                 err=UNZ_ERRNO;
1478
1479         /* number of the disk with the start of the central directory */
1480         if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK)
1481                 err=UNZ_ERRNO;
1482
1483         /* total number of entries in the central dir on this disk */
1484         if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK)
1485                 err=UNZ_ERRNO;
1486
1487         /* total number of entries in the central dir */
1488         if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK)
1489                 err=UNZ_ERRNO;
1490
1491         if ((number_entry_CD!=us.gi.number_entry) ||
1492                 (number_disk_with_CD!=0) ||
1493                 (number_disk!=0))
1494                 err=UNZ_BADZIPFILE;
1495
1496         /* size of the central directory */
1497         if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK)
1498                 err=UNZ_ERRNO;
1499
1500         /* offset of start of central directory with respect to the 
1501               starting disk number */
1502         if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK)
1503                 err=UNZ_ERRNO;
1504
1505         /* zipfile comment length */
1506         if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK)
1507                 err=UNZ_ERRNO;
1508
1509         if ((central_pos<us.offset_central_dir+us.size_central_dir) && 
1510                 (err==UNZ_OK))
1511                 err=UNZ_BADZIPFILE;
1512
1513         if (err!=UNZ_OK)
1514         {
1515                 fclose(fin);
1516                 return NULL;
1517         }
1518
1519         us.file=fin;
1520         us.byte_before_the_zipfile = central_pos -
1521                                     (us.offset_central_dir+us.size_central_dir);
1522         us.central_pos = central_pos;
1523     us.pfile_in_zip_read = NULL;
1524         
1525
1526         s=(unz_s*)malloc(sizeof(unz_s));
1527         *s=us;
1528 //      unzGoToFirstFile((unzFile)s);   
1529         return (unzFile)s;      
1530 }
1531
1532
1533 /*
1534   Close a ZipFile opened with unzipOpen.
1535   If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
1536     these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
1537   return UNZ_OK if there is no problem. */
1538 extern int unzClose (unzFile file)
1539 {
1540         unz_s* s;
1541         if (file==NULL)
1542                 return UNZ_PARAMERROR;
1543         s=(unz_s*)file;
1544
1545     if (s->pfile_in_zip_read!=NULL)
1546         unzCloseCurrentFile(file);
1547
1548         fclose(s->file);
1549         free(s);
1550         return UNZ_OK;
1551 }
1552
1553
1554 /*
1555   Write info about the ZipFile in the *pglobal_info structure.
1556   No preparation of the structure is needed
1557   return UNZ_OK if there is no problem. */
1558 extern int unzGetGlobalInfo (unzFile file,unz_global_info *pglobal_info)
1559 {
1560         unz_s* s;
1561         if (file==NULL)
1562                 return UNZ_PARAMERROR;
1563         s=(unz_s*)file;
1564         *pglobal_info=s->gi;
1565         return UNZ_OK;
1566 }
1567
1568
1569 /*
1570    Translate date/time from Dos format to tm_unz (readable more easilty)
1571 */
1572 static void unzlocal_DosDateToTmuDate (uLong ulDosDate, tm_unz* ptm)
1573 {
1574     uLong uDate;
1575     uDate = (uLong)(ulDosDate>>16);
1576     ptm->tm_mday = (uInt)(uDate&0x1f) ;
1577     ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;
1578     ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
1579
1580     ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
1581     ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;
1582     ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;
1583 }
1584
1585 /*
1586   Get Info about the current file in the zipfile, with internal only info
1587 */
1588 static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
1589                                                   unz_file_info *pfile_info,
1590                                                   unz_file_info_internal 
1591                                                   *pfile_info_internal,
1592                                                   char *szFileName,
1593                                                                                                   uLong fileNameBufferSize,
1594                                                   void *extraField,
1595                                                                                                   uLong extraFieldBufferSize,
1596                                                   char *szComment,
1597                                                                                                   uLong commentBufferSize)
1598 {
1599         unz_s* s;
1600         unz_file_info file_info;
1601         unz_file_info_internal file_info_internal;
1602         int err=UNZ_OK;
1603         uLong uMagic;
1604         long lSeek=0;
1605
1606         if (file==NULL)
1607                 return UNZ_PARAMERROR;
1608         s=(unz_s*)file;
1609         if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0)
1610                 err=UNZ_ERRNO;
1611
1612
1613         /* we check the magic */
1614         if (err==UNZ_OK)
1615                 if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
1616                         err=UNZ_ERRNO;
1617                 else if (uMagic!=0x02014b50)
1618                         err=UNZ_BADZIPFILE;
1619
1620         if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
1621                 err=UNZ_ERRNO;
1622
1623         if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK)
1624                 err=UNZ_ERRNO;
1625
1626         if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK)
1627                 err=UNZ_ERRNO;
1628
1629         if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK)
1630                 err=UNZ_ERRNO;
1631
1632         if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK)
1633                 err=UNZ_ERRNO;
1634
1635     unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
1636
1637         if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK)
1638                 err=UNZ_ERRNO;
1639
1640         if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK)
1641                 err=UNZ_ERRNO;
1642
1643         if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK)
1644                 err=UNZ_ERRNO;
1645
1646         if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK)
1647                 err=UNZ_ERRNO;
1648
1649         if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK)
1650                 err=UNZ_ERRNO;
1651
1652         if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK)
1653                 err=UNZ_ERRNO;
1654
1655         if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK)
1656                 err=UNZ_ERRNO;
1657
1658         if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK)
1659                 err=UNZ_ERRNO;
1660
1661         if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK)
1662                 err=UNZ_ERRNO;
1663
1664         if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK)
1665                 err=UNZ_ERRNO;
1666
1667         lSeek+=file_info.size_filename;
1668         if ((err==UNZ_OK) && (szFileName!=NULL))
1669         {
1670                 uLong uSizeRead ;
1671                 if (file_info.size_filename<fileNameBufferSize)
1672                 {
1673                         *(szFileName+file_info.size_filename)='\0';
1674                         uSizeRead = file_info.size_filename;
1675                 }
1676                 else
1677                         uSizeRead = fileNameBufferSize;
1678
1679                 if ((file_info.size_filename>0) && (fileNameBufferSize>0))
1680                         if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1)
1681                                 err=UNZ_ERRNO;
1682                 lSeek -= uSizeRead;
1683         }
1684
1685         
1686         if ((err==UNZ_OK) && (extraField!=NULL))
1687         {
1688                 uLong uSizeRead ;
1689                 if (file_info.size_file_extra<extraFieldBufferSize)
1690                         uSizeRead = file_info.size_file_extra;
1691                 else
1692                         uSizeRead = extraFieldBufferSize;
1693
1694                 if (lSeek!=0)
1695                         if (fseek(s->file,lSeek,SEEK_CUR)==0)
1696                                 lSeek=0;
1697                         else
1698                                 err=UNZ_ERRNO;
1699                 if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
1700                         if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1)
1701                                 err=UNZ_ERRNO;
1702                 lSeek += file_info.size_file_extra - uSizeRead;
1703         }
1704         else
1705                 lSeek+=file_info.size_file_extra; 
1706
1707         
1708         if ((err==UNZ_OK) && (szComment!=NULL))
1709         {
1710                 uLong uSizeRead ;
1711                 if (file_info.size_file_comment<commentBufferSize)
1712                 {
1713                         *(szComment+file_info.size_file_comment)='\0';
1714                         uSizeRead = file_info.size_file_comment;
1715                 }
1716                 else
1717                         uSizeRead = commentBufferSize;
1718
1719                 if (lSeek!=0)
1720                         if (fseek(s->file,lSeek,SEEK_CUR)==0)
1721                                 lSeek=0;
1722                         else
1723                                 err=UNZ_ERRNO;
1724                 if ((file_info.size_file_comment>0) && (commentBufferSize>0))
1725                         if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1)
1726                                 err=UNZ_ERRNO;
1727                 lSeek+=file_info.size_file_comment - uSizeRead;
1728         }
1729         else
1730                 lSeek+=file_info.size_file_comment;
1731
1732         if ((err==UNZ_OK) && (pfile_info!=NULL))
1733                 *pfile_info=file_info;
1734
1735         if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
1736                 *pfile_info_internal=file_info_internal;
1737
1738         return err;
1739 }
1740
1741
1742
1743 /*
1744   Write info about the ZipFile in the *pglobal_info structure.
1745   No preparation of the structure is needed
1746   return UNZ_OK if there is no problem.
1747 */
1748 extern int unzGetCurrentFileInfo (      unzFile file, unz_file_info *pfile_info,
1749                                                                         char *szFileName, uLong fileNameBufferSize,
1750                                                                         void *extraField, uLong extraFieldBufferSize,
1751                                                                         char *szComment, uLong commentBufferSize)
1752 {
1753         return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,
1754                                                                                                 szFileName,fileNameBufferSize,
1755                                                                                                 extraField,extraFieldBufferSize,
1756                                                                                                 szComment,commentBufferSize);
1757 }
1758
1759 /*
1760   Set the current file of the zipfile to the first file.
1761   return UNZ_OK if there is no problem
1762 */
1763 extern int unzGoToFirstFile (unzFile file)
1764 {
1765         int err=UNZ_OK;
1766         unz_s* s;
1767         if (file==NULL)
1768                 return UNZ_PARAMERROR;
1769         s=(unz_s*)file;
1770         s->pos_in_central_dir=s->offset_central_dir;
1771         s->num_file=0;
1772         err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
1773                                                                                          &s->cur_file_info_internal,
1774                                                                                          NULL,0,NULL,0,NULL,0);
1775         s->current_file_ok = (err == UNZ_OK);
1776         return err;
1777 }
1778
1779
1780 /*
1781   Set the current file of the zipfile to the next file.
1782   return UNZ_OK if there is no problem
1783   return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
1784 */
1785 extern int unzGoToNextFile (unzFile file)
1786 {
1787         unz_s* s;       
1788         int err;
1789
1790         if (file==NULL)
1791                 return UNZ_PARAMERROR;
1792         s=(unz_s*)file;
1793         if (!s->current_file_ok)
1794                 return UNZ_END_OF_LIST_OF_FILE;
1795         if (s->num_file+1==s->gi.number_entry)
1796                 return UNZ_END_OF_LIST_OF_FILE;
1797
1798         s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
1799                         s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
1800         s->num_file++;
1801         err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
1802                                                                                            &s->cur_file_info_internal,
1803                                                                                            NULL,0,NULL,0,NULL,0);
1804         s->current_file_ok = (err == UNZ_OK);
1805         return err;
1806 }
1807
1808
1809 /*
1810   Try locate the file szFileName in the zipfile.
1811   For the iCaseSensitivity signification, see unzipStringFileNameCompare
1812
1813   return value :
1814   UNZ_OK if the file is found. It becomes the current file.
1815   UNZ_END_OF_LIST_OF_FILE if the file is not found
1816 */
1817 extern int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)
1818 {
1819         unz_s* s;       
1820         int err;
1821
1822         
1823         uLong num_fileSaved;
1824         uLong pos_in_central_dirSaved;
1825
1826
1827         if (file==NULL)
1828                 return UNZ_PARAMERROR;
1829
1830     if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
1831         return UNZ_PARAMERROR;
1832
1833         s=(unz_s*)file;
1834         if (!s->current_file_ok)
1835                 return UNZ_END_OF_LIST_OF_FILE;
1836
1837         num_fileSaved = s->num_file;
1838         pos_in_central_dirSaved = s->pos_in_central_dir;
1839
1840         err = unzGoToFirstFile(file);
1841
1842         while (err == UNZ_OK)
1843         {
1844                 char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
1845                 unzGetCurrentFileInfo(file,NULL,
1846                                                                 szCurrentFileName,sizeof(szCurrentFileName)-1,
1847                                                                 NULL,0,NULL,0);
1848                 if (unzStringFileNameCompare(szCurrentFileName,
1849                                                                                 szFileName,iCaseSensitivity)==0)
1850                         return UNZ_OK;
1851                 err = unzGoToNextFile(file);
1852         }
1853
1854         s->num_file = num_fileSaved ;
1855         s->pos_in_central_dir = pos_in_central_dirSaved ;
1856         return err;
1857 }
1858
1859
1860 /*
1861   Read the static header of the current zipfile
1862   Check the coherency of the static header and info in the end of central
1863         directory about this file
1864   store in *piSizeVar the size of extra info in static header
1865         (filename and size of extra field data)
1866 */
1867 static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar,
1868                                                                                                         uLong *poffset_local_extrafield,
1869                                                                                                         uInt *psize_local_extrafield)
1870 {
1871         uLong uMagic,uData,uFlags;
1872         uLong size_filename;
1873         uLong size_extra_field;
1874         int err=UNZ_OK;
1875
1876         *piSizeVar = 0;
1877         *poffset_local_extrafield = 0;
1878         *psize_local_extrafield = 0;
1879
1880         if (fseek(s->file,s->cur_file_info_internal.offset_curfile +
1881                                                                 s->byte_before_the_zipfile,SEEK_SET)!=0)
1882                 return UNZ_ERRNO;
1883
1884
1885         if (err==UNZ_OK)
1886                 if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
1887                         err=UNZ_ERRNO;
1888                 else if (uMagic!=0x04034b50)
1889                         err=UNZ_BADZIPFILE;
1890
1891         if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
1892                 err=UNZ_ERRNO;
1893 /*
1894         else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
1895                 err=UNZ_BADZIPFILE;
1896 */
1897         if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK)
1898                 err=UNZ_ERRNO;
1899
1900         if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
1901                 err=UNZ_ERRNO;
1902         else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
1903                 err=UNZ_BADZIPFILE;
1904
1905     if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
1906                          (s->cur_file_info.compression_method!=Z_DEFLATED))
1907         err=UNZ_BADZIPFILE;
1908
1909         if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */
1910                 err=UNZ_ERRNO;
1911
1912         if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */
1913                 err=UNZ_ERRNO;
1914         else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
1915                                       ((uFlags & 8)==0))
1916                 err=UNZ_BADZIPFILE;
1917
1918         if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */
1919                 err=UNZ_ERRNO;
1920         else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
1921                                                           ((uFlags & 8)==0))
1922                 err=UNZ_BADZIPFILE;
1923
1924         if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */
1925                 err=UNZ_ERRNO;
1926         else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && 
1927                                                           ((uFlags & 8)==0))
1928                 err=UNZ_BADZIPFILE;
1929
1930
1931         if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK)
1932                 err=UNZ_ERRNO;
1933         else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
1934                 err=UNZ_BADZIPFILE;
1935
1936         *piSizeVar += (uInt)size_filename;
1937
1938         if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK)
1939                 err=UNZ_ERRNO;
1940         *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
1941                                                                         SIZEZIPLOCALHEADER + size_filename;
1942         *psize_local_extrafield = (uInt)size_extra_field;
1943
1944         *piSizeVar += (uInt)size_extra_field;
1945
1946         return err;
1947 }
1948                                                                                                 
1949 /*
1950   Open for reading data the current file in the zipfile.
1951   If there is no error and the file is opened, the return value is UNZ_OK.
1952 */
1953 extern int unzOpenCurrentFile (unzFile file)
1954 {
1955         int err=UNZ_OK;
1956         int Store;
1957         uInt iSizeVar;
1958         unz_s* s;
1959         file_in_zip_read_info_s* pfile_in_zip_read_info;
1960         uLong offset_local_extrafield;  /* offset of the static extra field */
1961         uInt  size_local_extrafield;    /* size of the static extra field */
1962
1963         if (file==NULL)
1964                 return UNZ_PARAMERROR;
1965         s=(unz_s*)file;
1966         if (!s->current_file_ok)
1967                 return UNZ_PARAMERROR;
1968
1969     if (s->pfile_in_zip_read != NULL)
1970         unzCloseCurrentFile(file);
1971
1972         if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
1973                                 &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
1974                 return UNZ_BADZIPFILE;
1975
1976         pfile_in_zip_read_info = (file_in_zip_read_info_s*)
1977                                                                             malloc(sizeof(file_in_zip_read_info_s));
1978         if (pfile_in_zip_read_info==NULL)
1979                 return UNZ_INTERNALERROR;
1980
1981         pfile_in_zip_read_info->read_buffer=(char*)malloc(UNZ_BUFSIZE);
1982         pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
1983         pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
1984         pfile_in_zip_read_info->pos_local_extrafield=0;
1985
1986         if (pfile_in_zip_read_info->read_buffer==NULL)
1987         {
1988                 free(pfile_in_zip_read_info);
1989                 return UNZ_INTERNALERROR;
1990         }
1991
1992         pfile_in_zip_read_info->stream_initialised=0;
1993         
1994         if ((s->cur_file_info.compression_method!=0) &&
1995         (s->cur_file_info.compression_method!=Z_DEFLATED))
1996                 err=UNZ_BADZIPFILE;
1997         Store = s->cur_file_info.compression_method==0;
1998
1999         pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
2000         pfile_in_zip_read_info->crc32=0;
2001         pfile_in_zip_read_info->compression_method =
2002             s->cur_file_info.compression_method;
2003         pfile_in_zip_read_info->file=s->file;
2004         pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
2005
2006     pfile_in_zip_read_info->stream.total_out = 0;
2007
2008         if (!Store)
2009         {
2010           pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
2011           pfile_in_zip_read_info->stream.zfree = (free_func)0;
2012           pfile_in_zip_read_info->stream.opaque = (voidp)0; 
2013       
2014           err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
2015           if (err == Z_OK)
2016             pfile_in_zip_read_info->stream_initialised=1;
2017         /* windowBits is passed < 0 to tell that there is no zlib header.
2018          * Note that in this case inflate *requires* an extra "dummy" byte
2019          * after the compressed stream in order to complete decompression and
2020          * return Z_STREAM_END. 
2021          * In unzip, i don't wait absolutely Z_STREAM_END because I known the 
2022          * size of both compressed and uncompressed data
2023          */
2024         }
2025         pfile_in_zip_read_info->rest_read_compressed = 
2026             s->cur_file_info.compressed_size ;
2027         pfile_in_zip_read_info->rest_read_uncompressed = 
2028             s->cur_file_info.uncompressed_size ;
2029
2030         
2031         pfile_in_zip_read_info->pos_in_zipfile = 
2032             s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + 
2033                           iSizeVar;
2034         
2035         pfile_in_zip_read_info->stream.avail_in = (uInt)0;
2036
2037
2038         s->pfile_in_zip_read = pfile_in_zip_read_info;
2039     return UNZ_OK;
2040 }
2041
2042
2043 /*
2044   Read bytes from the current file.
2045   buf contain buffer where data must be copied
2046   len the size of buf.
2047
2048   return the number of byte copied if somes bytes are copied
2049   return 0 if the end of file was reached
2050   return <0 with error code if there is an error
2051     (UNZ_ERRNO for IO error, or zLib error for uncompress error)
2052 */
2053 extern int unzReadCurrentFile  (unzFile file, void *buf, unsigned len)
2054 {
2055         int err=UNZ_OK;
2056         uInt iRead = 0;
2057         unz_s* s;
2058         file_in_zip_read_info_s* pfile_in_zip_read_info;
2059         if (file==NULL)
2060                 return UNZ_PARAMERROR;
2061         s=(unz_s*)file;
2062     pfile_in_zip_read_info=s->pfile_in_zip_read;
2063
2064         if (pfile_in_zip_read_info==NULL)
2065                 return UNZ_PARAMERROR;
2066
2067
2068         if ((pfile_in_zip_read_info->read_buffer == NULL))
2069                 return UNZ_END_OF_LIST_OF_FILE;
2070         if (len==0)
2071                 return 0;
2072
2073         pfile_in_zip_read_info->stream.next_out = (Byte*)buf;
2074
2075         pfile_in_zip_read_info->stream.avail_out = (uInt)len;
2076         
2077         if (len>pfile_in_zip_read_info->rest_read_uncompressed)
2078                 pfile_in_zip_read_info->stream.avail_out = 
2079                   (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
2080
2081         while (pfile_in_zip_read_info->stream.avail_out>0)
2082         {
2083                 if ((pfile_in_zip_read_info->stream.avail_in==0) &&
2084             (pfile_in_zip_read_info->rest_read_compressed>0))
2085                 {
2086                         uInt uReadThis = UNZ_BUFSIZE;
2087                         if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
2088                                 uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
2089                         if (uReadThis == 0)
2090                                 return UNZ_EOF;
2091                         if (s->cur_file_info.compressed_size == pfile_in_zip_read_info->rest_read_compressed)
2092                                 if (fseek(pfile_in_zip_read_info->file,
2093                                                   pfile_in_zip_read_info->pos_in_zipfile + 
2094                                                          pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0)
2095                                         return UNZ_ERRNO;
2096                         if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1,
2097                          pfile_in_zip_read_info->file)!=1)
2098                                 return UNZ_ERRNO;
2099                         pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
2100
2101                         pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
2102                         
2103                         pfile_in_zip_read_info->stream.next_in = 
2104                 (Byte*)pfile_in_zip_read_info->read_buffer;
2105                         pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
2106                 }
2107
2108                 if (pfile_in_zip_read_info->compression_method==0)
2109                 {
2110                         uInt uDoCopy,i ;
2111                         if (pfile_in_zip_read_info->stream.avail_out < 
2112                             pfile_in_zip_read_info->stream.avail_in)
2113                                 uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
2114                         else
2115                                 uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
2116                                 
2117                         for (i=0;i<uDoCopy;i++)
2118                                 *(pfile_in_zip_read_info->stream.next_out+i) =
2119                         *(pfile_in_zip_read_info->stream.next_in+i);
2120                                         
2121                         pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
2122                                                                 pfile_in_zip_read_info->stream.next_out,
2123                                                                 uDoCopy);
2124                         pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
2125                         pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
2126                         pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
2127                         pfile_in_zip_read_info->stream.next_out += uDoCopy;
2128                         pfile_in_zip_read_info->stream.next_in += uDoCopy;
2129             pfile_in_zip_read_info->stream.total_out += uDoCopy;
2130                         iRead += uDoCopy;
2131                 }
2132                 else
2133                 {
2134                         uLong uTotalOutBefore,uTotalOutAfter;
2135                         const Byte *bufBefore;
2136                         uLong uOutThis;
2137                         int flush=Z_SYNC_FLUSH;
2138
2139                         uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
2140                         bufBefore = pfile_in_zip_read_info->stream.next_out;
2141
2142                         /*
2143                         if ((pfile_in_zip_read_info->rest_read_uncompressed ==
2144                                  pfile_in_zip_read_info->stream.avail_out) &&
2145                                 (pfile_in_zip_read_info->rest_read_compressed == 0))
2146                                 flush = Z_FINISH;
2147                         */
2148                         err=inflate(&pfile_in_zip_read_info->stream,flush);
2149
2150                         uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
2151                         uOutThis = uTotalOutAfter-uTotalOutBefore;
2152                         
2153                         pfile_in_zip_read_info->crc32 = 
2154                 crc32(pfile_in_zip_read_info->crc32,bufBefore,
2155                         (uInt)(uOutThis));
2156
2157                         pfile_in_zip_read_info->rest_read_uncompressed -=
2158                 uOutThis;
2159
2160                         iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
2161             
2162                         if (err==Z_STREAM_END)
2163                                 return (iRead==0) ? UNZ_EOF : iRead;
2164                         if (err!=Z_OK) 
2165                                 break;
2166                 }
2167         }
2168
2169         if (err==Z_OK)
2170                 return iRead;
2171         return err;
2172 }
2173
2174
2175 /*
2176   Give the current position in uncompressed data
2177 */
2178 extern long unztell (unzFile file)
2179 {
2180         unz_s* s;
2181         file_in_zip_read_info_s* pfile_in_zip_read_info;
2182         if (file==NULL)
2183                 return UNZ_PARAMERROR;
2184         s=(unz_s*)file;
2185     pfile_in_zip_read_info=s->pfile_in_zip_read;
2186
2187         if (pfile_in_zip_read_info==NULL)
2188                 return UNZ_PARAMERROR;
2189
2190         return (long)pfile_in_zip_read_info->stream.total_out;
2191 }
2192
2193
2194 /*
2195   return 1 if the end of file was reached, 0 elsewhere 
2196 */
2197 extern int unzeof (unzFile file)
2198 {
2199         unz_s* s;
2200         file_in_zip_read_info_s* pfile_in_zip_read_info;
2201         if (file==NULL)
2202                 return UNZ_PARAMERROR;
2203         s=(unz_s*)file;
2204     pfile_in_zip_read_info=s->pfile_in_zip_read;
2205
2206         if (pfile_in_zip_read_info==NULL)
2207                 return UNZ_PARAMERROR;
2208         
2209         if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
2210                 return 1;
2211         else
2212                 return 0;
2213 }
2214
2215
2216
2217 /*
2218   Read extra field from the current file (opened by unzOpenCurrentFile)
2219   This is the static-header version of the extra field (sometimes, there is
2220     more info in the static-header version than in the central-header)
2221
2222   if buf==NULL, it return the size of the static extra field that can be read
2223
2224   if buf!=NULL, len is the size of the buffer, the extra header is copied in
2225         buf.
2226   the return value is the number of bytes copied in buf, or (if <0) 
2227         the error code
2228 */
2229 extern int unzGetLocalExtrafield (unzFile file,void *buf,unsigned len)
2230 {
2231         unz_s* s;
2232         file_in_zip_read_info_s* pfile_in_zip_read_info;
2233         uInt read_now;
2234         uLong size_to_read;
2235
2236         if (file==NULL)
2237                 return UNZ_PARAMERROR;
2238         s=(unz_s*)file;
2239     pfile_in_zip_read_info=s->pfile_in_zip_read;
2240
2241         if (pfile_in_zip_read_info==NULL)
2242                 return UNZ_PARAMERROR;
2243
2244         size_to_read = (pfile_in_zip_read_info->size_local_extrafield - 
2245                                 pfile_in_zip_read_info->pos_local_extrafield);
2246
2247         if (buf==NULL)
2248                 return (int)size_to_read;
2249         
2250         if (len>size_to_read)
2251                 read_now = (uInt)size_to_read;
2252         else
2253                 read_now = (uInt)len ;
2254
2255         if (read_now==0)
2256                 return 0;
2257         
2258         if (fseek(pfile_in_zip_read_info->file,
2259               pfile_in_zip_read_info->offset_local_extrafield + 
2260                           pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0)
2261                 return UNZ_ERRNO;
2262
2263         if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1)
2264                 return UNZ_ERRNO;
2265
2266         return (int)read_now;
2267 }
2268
2269 /*
2270   Close the file in zip opened with unzipOpenCurrentFile
2271   Return UNZ_CRCERROR if all the file was read but the CRC is not good
2272 */
2273 extern int unzCloseCurrentFile (unzFile file)
2274 {
2275         int err=UNZ_OK;
2276
2277         unz_s* s;
2278         file_in_zip_read_info_s* pfile_in_zip_read_info;
2279         if (file==NULL)
2280                 return UNZ_PARAMERROR;
2281         s=(unz_s*)file;
2282     pfile_in_zip_read_info=s->pfile_in_zip_read;
2283
2284         if (pfile_in_zip_read_info==NULL)
2285                 return UNZ_PARAMERROR;
2286
2287
2288         if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
2289         {
2290                 if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
2291                         err=UNZ_CRCERROR;
2292         }
2293
2294
2295         free(pfile_in_zip_read_info->read_buffer);
2296         pfile_in_zip_read_info->read_buffer = NULL;
2297         if (pfile_in_zip_read_info->stream_initialised)
2298                 inflateEnd(&pfile_in_zip_read_info->stream);
2299
2300         pfile_in_zip_read_info->stream_initialised = 0;
2301         free(pfile_in_zip_read_info);
2302
2303     s->pfile_in_zip_read=NULL;
2304
2305         return err;
2306 }
2307
2308
2309 /*
2310   Get the global comment string of the ZipFile, in the szComment buffer.
2311   uSizeBuf is the size of the szComment buffer.
2312   return the number of byte copied or an error code <0
2313 */
2314 extern int unzGetGlobalComment (unzFile file, char *szComment, uLong uSizeBuf)
2315 {
2316         unz_s* s;
2317         uLong uReadThis ;
2318         if (file==NULL)
2319                 return UNZ_PARAMERROR;
2320         s=(unz_s*)file;
2321
2322         uReadThis = uSizeBuf;
2323         if (uReadThis>s->gi.size_comment)
2324                 uReadThis = s->gi.size_comment;
2325
2326         if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0)
2327                 return UNZ_ERRNO;
2328
2329         if (uReadThis>0)
2330     {
2331       *szComment='\0';
2332           if (fread(szComment,(uInt)uReadThis,1,s->file)!=1)
2333                 return UNZ_ERRNO;
2334     }
2335
2336         if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
2337                 *(szComment+s->gi.size_comment)='\0';
2338         return (int)uReadThis;
2339 }
2340
2341 /* crc32.c -- compute the CRC-32 of a data stream
2342  * Copyright (C) 1995-1998 Mark Adler
2343  * For conditions of distribution and use, see copyright notice in zlib.h 
2344  */
2345
2346 #ifdef DYNAMIC_CRC_TABLE
2347
2348 static int crc_table_empty = 1;
2349 static uLong crc_table[256];
2350 static void make_crc_table OF((void));
2351
2352 /*
2353   Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
2354   x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
2355
2356   Polynomials over GF(2) are represented in binary, one bit per coefficient,
2357   with the lowest powers in the most significant bit.  Then adding polynomials
2358   is just exclusive-or, and multiplying a polynomial by x is a right shift by
2359   one.  If we call the above polynomial p, and represent a byte as the
2360   polynomial q, also with the lowest power in the most significant bit (so the
2361   byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
2362   where a mod b means the remainder after dividing a by b.
2363
2364   This calculation is done using the shift-register method of multiplying and
2365   taking the remainder.  The register is initialized to zero, and for each
2366   incoming bit, x^32 is added mod p to the register if the bit is a one (where
2367   x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
2368   x (which is shifting right by one and adding x^32 mod p if the bit shifted
2369   out is a one).  We start with the highest power (least significant bit) of
2370   q and repeat for all eight bits of q.
2371
2372   The table is simply the CRC of all possible eight bit values.  This is all
2373   the information needed to generate CRC's on data a byte at a time for all
2374   combinations of CRC register values and incoming bytes.
2375 */
2376 static void make_crc_table()
2377 {
2378   uLong c;
2379   int n, k;
2380   uLong poly;            /* polynomial exclusive-or pattern */
2381   /* terms of polynomial defining this crc (except x^32): */
2382   static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
2383
2384   /* make exclusive-or pattern from polynomial (0xedb88320L) */
2385   poly = 0L;
2386   for (n = 0; n < sizeof(p)/sizeof(Byte); n++)
2387     poly |= 1L << (31 - p[n]);
2388  
2389   for (n = 0; n < 256; n++)
2390   {
2391     c = (uLong)n;
2392     for (k = 0; k < 8; k++)
2393       c = c & 1 ? poly ^ (c >> 1) : c >> 1;
2394     crc_table[n] = c;
2395   }
2396   crc_table_empty = 0;
2397 }
2398 #else
2399 /* ========================================================================
2400  * Table of CRC-32's of all single-byte values (made by make_crc_table)
2401  */
2402 static const uLong crc_table[256] = {
2403   0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
2404   0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
2405   0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
2406   0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
2407   0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
2408   0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
2409   0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
2410   0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
2411   0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
2412   0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
2413   0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
2414   0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
2415   0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
2416   0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
2417   0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
2418   0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
2419   0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
2420   0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
2421   0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
2422   0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
2423   0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
2424   0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
2425   0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
2426   0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
2427   0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
2428   0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
2429   0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
2430   0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
2431   0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
2432   0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
2433   0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
2434   0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
2435   0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
2436   0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
2437   0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
2438   0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
2439   0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
2440   0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
2441   0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
2442   0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
2443   0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
2444   0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
2445   0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
2446   0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
2447   0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
2448   0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
2449   0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
2450   0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
2451   0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
2452   0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
2453   0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
2454   0x2d02ef8dL
2455 };
2456 #endif
2457
2458 /* =========================================================================
2459  * This function can be used by asm versions of crc32()
2460  */
2461 const uLong * get_crc_table()
2462 {
2463 #ifdef DYNAMIC_CRC_TABLE
2464   if (crc_table_empty) make_crc_table();
2465 #endif
2466   return (const uLong *)crc_table;
2467 }
2468
2469 /* ========================================================================= */
2470 #define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
2471 #define DO2(buf)  DO1(buf); DO1(buf);
2472 #define DO4(buf)  DO2(buf); DO2(buf);
2473 #define DO8(buf)  DO4(buf); DO4(buf);
2474
2475 /* ========================================================================= */
2476 uLong crc32(uLong crc, const Byte *buf, uInt len)
2477 {
2478     if (buf == Z_NULL) return 0L;
2479 #ifdef DYNAMIC_CRC_TABLE
2480     if (crc_table_empty)
2481       make_crc_table();
2482 #endif
2483     crc = crc ^ 0xffffffffL;
2484     while (len >= 8)
2485     {
2486       DO8(buf);
2487       len -= 8;
2488     }
2489     if (len) do {
2490       DO1(buf);
2491     } while (--len);
2492     return crc ^ 0xffffffffL;
2493 }
2494
2495 /* infblock.h -- header to use infblock.c
2496  * Copyright (C) 1995-1998 Mark Adler
2497  * For conditions of distribution and use, see copyright notice in zlib.h 
2498  */
2499
2500 /* WARNING: this file should *not* be used by applications. It is
2501    part of the implementation of the compression library and is
2502    subject to change. Applications should only use zlib.h.
2503  */
2504
2505 struct inflate_blocks_state;
2506 typedef struct inflate_blocks_state inflate_blocks_statef;
2507
2508 extern inflate_blocks_statef * inflate_blocks_new OF((
2509     z_streamp z,
2510     check_func c,               /* check function */
2511     uInt w));                   /* window size */
2512
2513 extern int inflate_blocks OF((
2514     inflate_blocks_statef *,
2515     z_streamp ,
2516     int));                      /* initial return code */
2517
2518 extern void inflate_blocks_reset OF((
2519     inflate_blocks_statef *,
2520     z_streamp ,
2521     uLong *));                  /* check value on output */
2522
2523 extern int inflate_blocks_free OF((
2524     inflate_blocks_statef *,
2525     z_streamp));
2526
2527 extern void inflate_set_dictionary OF((
2528     inflate_blocks_statef *s,
2529     const Byte *d,  /* dictionary */
2530     uInt  n));       /* dictionary length */
2531
2532 extern int inflate_blocks_sync_point OF((
2533     inflate_blocks_statef *s));
2534
2535 /* simplify the use of the inflate_huft type with some defines */
2536 #define exop word.what.Exop
2537 #define bits word.what.Bits
2538
2539 /* Table for deflate from PKZIP's appnote.txt. */
2540 static const uInt border[] = { /* Order of the bit length code lengths */
2541         16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
2542
2543 /* inftrees.h -- header to use inftrees.c
2544  * Copyright (C) 1995-1998 Mark Adler
2545  * For conditions of distribution and use, see copyright notice in zlib.h 
2546  */
2547
2548 /* WARNING: this file should *not* be used by applications. It is
2549    part of the implementation of the compression library and is
2550    subject to change. Applications should only use zlib.h.
2551  */
2552
2553 /* Huffman code lookup table entry--this entry is four bytes for machines
2554    that have 16-bit pointers (e.g. PC's in the small or medium model). */
2555
2556 typedef struct inflate_huft_s inflate_huft;
2557
2558 struct inflate_huft_s {
2559   union {
2560     struct {
2561       Byte Exop;        /* number of extra bits or operation */
2562       Byte Bits;        /* number of bits in this code or subcode */
2563     } what;
2564     uInt pad;           /* pad structure to a power of 2 (4 bytes for */
2565   } word;               /*  16-bit, 8 bytes for 32-bit int's) */
2566   uInt base;            /* literal, length base, distance base,
2567                            or table offset */
2568 };
2569
2570 /* Maximum size of dynamic tree.  The maximum found in a long but non-
2571    exhaustive search was 1004 huft structures (850 for length/literals
2572    and 154 for distances, the latter actually the result of an
2573    exhaustive search).  The actual maximum is not known, but the
2574    value below is more than safe. */
2575 #define MANY 1440
2576
2577 extern int inflate_trees_bits OF((
2578     uInt *,                    /* 19 code lengths */
2579     uInt *,                    /* bits tree desired/actual depth */
2580     inflate_huft * *,       /* bits tree result */
2581     inflate_huft *,             /* space for trees */
2582     z_streamp));                /* for messages */
2583
2584 extern int inflate_trees_dynamic OF((
2585     uInt,                       /* number of literal/length codes */
2586     uInt,                       /* number of distance codes */
2587     uInt *,                    /* that many (total) code lengths */
2588     uInt *,                    /* literal desired/actual bit depth */
2589     uInt *,                    /* distance desired/actual bit depth */
2590     inflate_huft * *,       /* literal/length tree result */
2591     inflate_huft * *,       /* distance tree result */
2592     inflate_huft *,             /* space for trees */
2593     z_streamp));                /* for messages */
2594
2595 extern int inflate_trees_fixed OF((
2596     uInt *,                    /* literal desired/actual bit depth */
2597     uInt *,                    /* distance desired/actual bit depth */
2598     inflate_huft * *,       /* literal/length tree result */
2599     inflate_huft * *,       /* distance tree result */
2600     z_streamp));                /* for memory allocation */
2601
2602
2603 /* infcodes.h -- header to use infcodes.c
2604  * Copyright (C) 1995-1998 Mark Adler
2605  * For conditions of distribution and use, see copyright notice in zlib.h 
2606  */
2607
2608 /* WARNING: this file should *not* be used by applications. It is
2609    part of the implementation of the compression library and is
2610    subject to change. Applications should only use zlib.h.
2611  */
2612
2613 struct inflate_codes_state;
2614 typedef struct inflate_codes_state inflate_codes_statef;
2615
2616 extern inflate_codes_statef *inflate_codes_new OF((
2617     uInt, uInt,
2618     inflate_huft *, inflate_huft *,
2619     z_streamp ));
2620
2621 extern int inflate_codes OF((
2622     inflate_blocks_statef *,
2623     z_streamp ,
2624     int));
2625
2626 extern void inflate_codes_free OF((
2627     inflate_codes_statef *,
2628     z_streamp ));
2629
2630 /* infutil.h -- types and macros common to blocks and codes
2631  * Copyright (C) 1995-1998 Mark Adler
2632  * For conditions of distribution and use, see copyright notice in zlib.h 
2633  */
2634
2635 /* WARNING: this file should *not* be used by applications. It is
2636    part of the implementation of the compression library and is
2637    subject to change. Applications should only use zlib.h.
2638  */
2639
2640 #ifndef _INFUTIL_H
2641 #define _INFUTIL_H
2642
2643 typedef enum {
2644       TYPE,     /* get type bits (3, including end bit) */
2645       LENS,     /* get lengths for stored */
2646       STORED,   /* processing stored block */
2647       TABLE,    /* get table lengths */
2648       BTREE,    /* get bit lengths tree for a dynamic block */
2649       DTREE,    /* get length, distance trees for a dynamic block */
2650       CODES,    /* processing fixed or dynamic block */
2651       DRY,      /* output remaining window bytes */
2652       DONE,     /* finished last block, done */
2653       BAD}      /* got a data error--stuck here */
2654 inflate_block_mode;
2655
2656 /* inflate blocks semi-private state */
2657 struct inflate_blocks_state {
2658
2659   /* mode */
2660   inflate_block_mode  mode;     /* current inflate_block mode */
2661
2662   /* mode dependent information */
2663   union {
2664     uInt left;          /* if STORED, bytes left to copy */
2665     struct {
2666       uInt table;               /* table lengths (14 bits) */
2667       uInt index;               /* index into blens (or border) */
2668       uInt *blens;             /* bit lengths of codes */
2669       uInt bb;                  /* bit length tree depth */
2670       inflate_huft *tb;         /* bit length decoding tree */
2671     } trees;            /* if DTREE, decoding info for trees */
2672     struct {
2673       inflate_codes_statef 
2674          *codes;
2675     } decode;           /* if CODES, current state */
2676   } sub;                /* submode */
2677   uInt last;            /* true if this block is the last block */
2678
2679   /* mode independent information */
2680   uInt bitk;            /* bits in bit buffer */
2681   uLong bitb;           /* bit buffer */
2682   inflate_huft *hufts;  /* single malloc for tree space */
2683   Byte *window;        /* sliding window */
2684   Byte *end;           /* one byte after sliding window */
2685   Byte *read;          /* window read pointer */
2686   Byte *write;         /* window write pointer */
2687   check_func checkfn;   /* check function */
2688   uLong check;          /* check on output */
2689
2690 };
2691
2692
2693 /* defines for inflate input/output */
2694 /*   update pointers and return */
2695 #define UPDBITS {s->bitb=b;s->bitk=k;}
2696 #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
2697 #define UPDOUT {s->write=q;}
2698 #define UPDATE {UPDBITS UPDIN UPDOUT}
2699 #define LEAVE {UPDATE return inflate_flush(s,z,r);}
2700 /*   get bytes and bits */
2701 #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
2702 #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
2703 #define NEXTBYTE (n--,*p++)
2704 #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
2705 #define DUMPBITS(j) {b>>=(j);k-=(j);}
2706 /*   output bytes */
2707 #define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
2708 #define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
2709 #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
2710 #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
2711 #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
2712 #define OUTBYTE(a) {*q++=(Byte)(a);m--;}
2713 /*   load static pointers */
2714 #define LOAD {LOADIN LOADOUT}
2715
2716 /* masks for lower bits (size given to avoid silly warnings with Visual C++) */
2717 extern uInt inflate_mask[17];
2718
2719 /* copy as much as possible from the sliding window to the output area */
2720 extern int inflate_flush OF((
2721     inflate_blocks_statef *,
2722     z_streamp ,
2723     int));
2724
2725 #endif
2726
2727                                                                 
2728 /*
2729    Notes beyond the 1.93a appnote.txt:
2730
2731    1. Distance pointers never point before the beginning of the output
2732       stream.
2733    2. Distance pointers can point back across blocks, up to 32k away.
2734    3. There is an implied maximum of 7 bits for the bit length table and
2735       15 bits for the actual data.
2736    4. If only one code exists, then it is encoded using one bit.  (Zero
2737       would be more efficient, but perhaps a little confusing.)  If two
2738       codes exist, they are coded using one bit each (0 and 1).
2739    5. There is no way of sending zero distance codes--a dummy must be
2740       sent if there are none.  (History: a pre 2.0 version of PKZIP would
2741       store blocks with no distance codes, but this was discovered to be
2742       too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
2743       zero distance codes, which is sent as one code of zero bits in
2744       length.
2745    6. There are up to 286 literal/length codes.  Code 256 represents the
2746       end-of-block.  Note however that the static length tree defines
2747       288 codes just to fill out the Huffman codes.  Codes 286 and 287
2748       cannot be used though, since there is no length base or extra bits
2749       defined for them.  Similarily, there are up to 30 distance codes.
2750       However, static trees define 32 codes (all 5 bits) to fill out the
2751       Huffman codes, but the last two had better not show up in the data.
2752    7. Unzip can check dynamic Huffman blocks for complete code sets.
2753       The exception is that a single code would not be complete (see #4).
2754    8. The five bits following the block type is really the number of
2755       literal codes sent minus 257.
2756    9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
2757       (1+6+6).  Therefore, to output three times the length, you output
2758       three codes (1+1+1), whereas to output four times the same length,
2759       you only need two codes (1+3).  Hmm.
2760   10. In the tree reconstruction algorithm, Code = Code + Increment
2761       only if BitLength(i) is not zero.  (Pretty obvious.)
2762   11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
2763   12. Note: length code 284 can represent 227-258, but length code 285
2764       really is 258.  The last length deserves its own, short code
2765       since it gets used a lot in very redundant files.  The length
2766       258 is special since 258 - 3 (the min match length) is 255.
2767   13. The literal/length and distance code bit lengths are read as a
2768       single stream of lengths.  It is possible (and advantageous) for
2769       a repeat code (16, 17, or 18) to go across the boundary between
2770       the two sets of lengths.
2771  */
2772
2773
2774 void inflate_blocks_reset(inflate_blocks_statef *s, z_streamp z, uLong *c)
2775 {
2776   if (c != Z_NULL)
2777     *c = s->check;
2778   if (s->mode == BTREE || s->mode == DTREE)
2779     ZFREE(z, s->sub.trees.blens);
2780   if (s->mode == CODES)
2781     inflate_codes_free(s->sub.decode.codes, z);
2782   s->mode = TYPE;
2783   s->bitk = 0;
2784   s->bitb = 0;
2785   s->read = s->write = s->window;
2786   if (s->checkfn != Z_NULL)
2787     z->adler = s->check = (*s->checkfn)(0L, (const Byte *)Z_NULL, 0);
2788   Tracev(("inflate:   blocks reset\n"));
2789 }
2790
2791
2792 inflate_blocks_statef *inflate_blocks_new(z_streamp z, check_func c, uInt w)
2793 {
2794   inflate_blocks_statef *s;
2795
2796   if ((s = (inflate_blocks_statef *)ZALLOC
2797        (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
2798     return s;
2799   if ((s->hufts =
2800        (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
2801   {
2802     ZFREE(z, s);
2803     return Z_NULL;
2804   }
2805   if ((s->window = (Byte *)ZALLOC(z, 1, w)) == Z_NULL)
2806   {
2807     ZFREE(z, s->hufts);
2808     ZFREE(z, s);
2809     return Z_NULL;
2810   }
2811   s->end = s->window + w;
2812   s->checkfn = c;
2813   s->mode = TYPE;
2814   Tracev(("inflate:   blocks allocated\n"));
2815   inflate_blocks_reset(s, z, Z_NULL);
2816   return s;
2817 }
2818
2819
2820 int inflate_blocks(inflate_blocks_statef *s, z_streamp z, int r)
2821 {
2822   uInt t;               /* temporary storage */
2823   uLong b;              /* bit buffer */
2824   uInt k;               /* bits in bit buffer */
2825   Byte *p;             /* input data pointer */
2826   uInt n;               /* bytes available there */
2827   Byte *q;             /* output window write pointer */
2828   uInt m;               /* bytes to end of window or read pointer */
2829
2830   /* copy input/output information to locals (UPDATE macro restores) */
2831   LOAD
2832
2833   /* process input based on current state */
2834   while (1) switch (s->mode)
2835   {
2836     case TYPE:
2837       NEEDBITS(3)
2838       t = (uInt)b & 7;
2839       s->last = t & 1;
2840       switch (t >> 1)
2841       {
2842         case 0:                         /* stored */
2843           Tracev(("inflate:     stored block%s\n",
2844                  s->last ? " (last)" : ""));
2845           DUMPBITS(3)
2846           t = k & 7;                    /* go to byte boundary */
2847           DUMPBITS(t)
2848           s->mode = LENS;               /* get length of stored block */
2849           break;
2850         case 1:                         /* fixed */
2851           Tracev(("inflate:     fixed codes block%s\n",
2852                  s->last ? " (last)" : ""));
2853           {
2854             uInt bl, bd;
2855             inflate_huft *tl, *td;
2856
2857             inflate_trees_fixed(&bl, &bd, &tl, &td, z);
2858             s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
2859             if (s->sub.decode.codes == Z_NULL)
2860             {
2861               r = Z_MEM_ERROR;
2862               LEAVE
2863             }
2864           }
2865           DUMPBITS(3)
2866           s->mode = CODES;
2867           break;
2868         case 2:                         /* dynamic */
2869           Tracev(("inflate:     dynamic codes block%s\n",
2870                  s->last ? " (last)" : ""));
2871           DUMPBITS(3)
2872           s->mode = TABLE;
2873           break;
2874         case 3:                         /* illegal */
2875           DUMPBITS(3)
2876           s->mode = BAD;
2877           z->msg = (char*)"invalid block type";
2878           r = Z_DATA_ERROR;
2879           LEAVE
2880       }
2881       break;
2882     case LENS:
2883       NEEDBITS(32)
2884       if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
2885       {
2886         s->mode = BAD;
2887         z->msg = (char*)"invalid stored block lengths";
2888         r = Z_DATA_ERROR;
2889         LEAVE
2890       }
2891       s->sub.left = (uInt)b & 0xffff;
2892       b = k = 0;                      /* dump bits */
2893       Tracev(("inflate:       stored length %u\n", s->sub.left));
2894       s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
2895       break;
2896     case STORED:
2897       if (n == 0)
2898         LEAVE
2899       NEEDOUT
2900       t = s->sub.left;
2901       if (t > n) t = n;
2902       if (t > m) t = m;
2903       zmemcpy(q, p, t);
2904       p += t;  n -= t;
2905       q += t;  m -= t;
2906       if ((s->sub.left -= t) != 0)
2907         break;
2908       Tracev(("inflate:       stored end, %lu total out\n",
2909               z->total_out + (q >= s->read ? q - s->read :
2910               (s->end - s->read) + (q - s->window))));
2911       s->mode = s->last ? DRY : TYPE;
2912       break;
2913     case TABLE:
2914       NEEDBITS(14)
2915       s->sub.trees.table = t = (uInt)b & 0x3fff;
2916 #ifndef PKZIP_BUG_WORKAROUND
2917       if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
2918       {
2919         s->mode = BAD;
2920         z->msg = (char*)"too many length or distance symbols";
2921         r = Z_DATA_ERROR;
2922         LEAVE
2923       }
2924 #endif
2925       t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
2926       if ((s->sub.trees.blens = (uInt*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
2927       {
2928         r = Z_MEM_ERROR;
2929         LEAVE
2930       }
2931       DUMPBITS(14)
2932       s->sub.trees.index = 0;
2933       Tracev(("inflate:       table sizes ok\n"));
2934       s->mode = BTREE;
2935     case BTREE:
2936       while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
2937       {
2938         NEEDBITS(3)
2939         s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
2940         DUMPBITS(3)
2941       }
2942       while (s->sub.trees.index < 19)
2943         s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
2944       s->sub.trees.bb = 7;
2945       t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
2946                              &s->sub.trees.tb, s->hufts, z);
2947       if (t != Z_OK)
2948       {
2949         ZFREE(z, s->sub.trees.blens);
2950         r = t;
2951         if (r == Z_DATA_ERROR)
2952           s->mode = BAD;
2953         LEAVE
2954       }
2955       s->sub.trees.index = 0;
2956       Tracev(("inflate:       bits tree ok\n"));
2957       s->mode = DTREE;
2958     case DTREE:
2959       while (t = s->sub.trees.table,
2960              s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
2961       {
2962         inflate_huft *h;
2963         uInt i, j, c;
2964
2965         t = s->sub.trees.bb;
2966         NEEDBITS(t)
2967         h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
2968         t = h->bits;
2969         c = h->base;
2970         if (c < 16)
2971         {
2972           DUMPBITS(t)
2973           s->sub.trees.blens[s->sub.trees.index++] = c;
2974         }
2975         else /* c == 16..18 */
2976         {
2977           i = c == 18 ? 7 : c - 14;
2978           j = c == 18 ? 11 : 3;
2979           NEEDBITS(t + i)
2980           DUMPBITS(t)
2981           j += (uInt)b & inflate_mask[i];
2982           DUMPBITS(i)
2983           i = s->sub.trees.index;
2984           t = s->sub.trees.table;
2985           if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
2986               (c == 16 && i < 1))
2987           {
2988             ZFREE(z, s->sub.trees.blens);
2989             s->mode = BAD;
2990             z->msg = (char*)"invalid bit length repeat";
2991             r = Z_DATA_ERROR;
2992             LEAVE
2993           }
2994           c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
2995           do {
2996             s->sub.trees.blens[i++] = c;
2997           } while (--j);
2998           s->sub.trees.index = i;
2999         }
3000       }
3001       s->sub.trees.tb = Z_NULL;
3002       {
3003         uInt bl, bd;
3004         inflate_huft *tl, *td;
3005         inflate_codes_statef *c;
3006
3007         bl = 9;         /* must be <= 9 for lookahead assumptions */
3008         bd = 6;         /* must be <= 9 for lookahead assumptions */
3009         t = s->sub.trees.table;
3010         t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
3011                                   s->sub.trees.blens, &bl, &bd, &tl, &td,
3012                                   s->hufts, z);
3013         ZFREE(z, s->sub.trees.blens);
3014         if (t != Z_OK)
3015         {
3016           if (t == (uInt)Z_DATA_ERROR)
3017             s->mode = BAD;
3018           r = t;
3019           LEAVE
3020         }
3021         Tracev(("inflate:       trees ok\n"));
3022         if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
3023         {
3024           r = Z_MEM_ERROR;
3025           LEAVE
3026         }
3027         s->sub.decode.codes = c;
3028       }
3029       s->mode = CODES;
3030     case CODES:
3031       UPDATE
3032       if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
3033         return inflate_flush(s, z, r);
3034       r = Z_OK;
3035       inflate_codes_free(s->sub.decode.codes, z);
3036       LOAD
3037       Tracev(("inflate:       codes end, %lu total out\n",
3038               z->total_out + (q >= s->read ? q - s->read :
3039               (s->end - s->read) + (q - s->window))));
3040       if (!s->last)
3041       {
3042         s->mode = TYPE;
3043         break;
3044       }
3045       s->mode = DRY;
3046     case DRY:
3047       FLUSH
3048       if (s->read != s->write)
3049         LEAVE
3050       s->mode = DONE;
3051     case DONE:
3052       r = Z_STREAM_END;
3053       LEAVE
3054     case BAD:
3055       r = Z_DATA_ERROR;
3056       LEAVE
3057     default:
3058       r = Z_STREAM_ERROR;
3059       LEAVE
3060   }
3061 }
3062
3063
3064 int inflate_blocks_free(inflate_blocks_statef *s, z_streamp z)
3065 {
3066   inflate_blocks_reset(s, z, Z_NULL);
3067   ZFREE(z, s->window);
3068   ZFREE(z, s->hufts);
3069   ZFREE(z, s);
3070   Tracev(("inflate:   blocks freed\n"));
3071   return Z_OK;
3072 }
3073
3074
3075 void inflate_set_dictionary(inflate_blocks_statef *s, const Byte *d, uInt n)
3076 {
3077   zmemcpy(s->window, d, n);
3078   s->read = s->write = s->window + n;
3079 }
3080
3081
3082 /* Returns true if inflate is currently at the end of a block generated
3083  * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
3084  * IN assertion: s != Z_NULL
3085  */
3086 int inflate_blocks_sync_point(inflate_blocks_statef *s)
3087 {
3088   return s->mode == LENS;
3089 }
3090
3091 /* And'ing with mask[n] masks the lower n bits */
3092 uInt inflate_mask[17] = {
3093     0x0000,
3094     0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
3095     0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
3096 };
3097
3098 /* copy as much as possible from the sliding window to the output area */
3099 int inflate_flush(inflate_blocks_statef *s, z_streamp z, int r)
3100 {
3101   uInt n;
3102   Byte *p;
3103   Byte *q;
3104
3105   /* static copies of source and destination pointers */
3106   p = z->next_out;
3107   q = s->read;
3108
3109   /* compute number of bytes to copy as as end of window */
3110   n = (uInt)((q <= s->write ? s->write : s->end) - q);
3111   if (n > z->avail_out) n = z->avail_out;
3112   if (n && r == Z_BUF_ERROR) r = Z_OK;
3113
3114   /* update counters */
3115   z->avail_out -= n;
3116   z->total_out += n;
3117
3118   /* update check information */
3119   if (s->checkfn != Z_NULL)
3120     z->adler = s->check = (*s->checkfn)(s->check, q, n);
3121
3122   /* copy as as end of window */
3123   zmemcpy(p, q, n);
3124   p += n;
3125   q += n;
3126
3127   /* see if more to copy at beginning of window */
3128   if (q == s->end)
3129   {
3130     /* wrap pointers */
3131     q = s->window;
3132     if (s->write == s->end)
3133       s->write = s->window;
3134
3135     /* compute bytes to copy */
3136     n = (uInt)(s->write - q);
3137     if (n > z->avail_out) n = z->avail_out;
3138     if (n && r == Z_BUF_ERROR) r = Z_OK;
3139
3140     /* update counters */
3141     z->avail_out -= n;
3142     z->total_out += n;
3143
3144     /* update check information */
3145     if (s->checkfn != Z_NULL)
3146       z->adler = s->check = (*s->checkfn)(s->check, q, n);
3147
3148     /* copy */
3149     zmemcpy(p, q, n);
3150     p += n;
3151     q += n;
3152   }
3153
3154   /* update pointers */
3155   z->next_out = p;
3156   s->read = q;
3157
3158   /* done */
3159   return r;
3160 }
3161
3162 /* inftrees.c -- generate Huffman trees for efficient decoding
3163  * Copyright (C) 1995-1998 Mark Adler
3164  * For conditions of distribution and use, see copyright notice in zlib.h 
3165  */
3166
3167 const char inflate_copyright[] =
3168    " inflate 1.1.3 Copyright 1995-1998 Mark Adler ";
3169 /*
3170   If you use the zlib library in a product, an acknowledgment is welcome
3171   in the documentation of your product. If for some reason you cannot
3172   include such an acknowledgment, I would appreciate that you keep this
3173   copyright string in the executable of your product.
3174  */
3175
3176 /* simplify the use of the inflate_huft type with some defines */
3177 #define exop word.what.Exop
3178 #define bits word.what.Bits
3179
3180
3181 static int huft_build OF((
3182     uInt *,                             /* code lengths in bits */
3183     uInt,               /* number of codes */
3184     uInt,               /* number of "simple" codes */
3185     const uInt *,               /* list of base values for non-simple codes */
3186     const uInt *,               /* list of extra bits for non-simple codes */
3187     inflate_huft **,    /* result: starting table */
3188     uInt *,                             /* maximum lookup bits (returns actual) */
3189     inflate_huft *,     /* space for trees */
3190     uInt *,             /* hufts used in space */
3191     uInt * ));                  /* space for values */
3192
3193 /* Tables for deflate from PKZIP's appnote.txt. */
3194 static const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
3195         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
3196         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
3197         /* see note #13 above about 258 */
3198 static const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
3199         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
3200         3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
3201 static const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
3202         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
3203         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
3204         8193, 12289, 16385, 24577};
3205 static const uInt cpdext[30] = { /* Extra bits for distance codes */
3206         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
3207         7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
3208         12, 12, 13, 13};
3209
3210 /*
3211    Huffman code decoding is performed using a multi-level table lookup.
3212    The fastest way to decode is to simply build a lookup table whose
3213    size is determined by the longest code.  However, the time it takes
3214    to build this table can also be a factor if the data being decoded
3215    is not very long.  The most common codes are necessarily the
3216    shortest codes, so those codes dominate the decoding time, and hence
3217    the speed.  The idea is you can have a shorter table that decodes the
3218    shorter, more probable codes, and then point to subsidiary tables for
3219    the longer codes.  The time it costs to decode the longer codes is
3220    then traded against the time it takes to make longer tables.
3221
3222    This results of this trade are in the variables lbits and dbits
3223    below.  lbits is the number of bits the first level table for literal/
3224    length codes can decode in one step, and dbits is the same thing for
3225    the distance codes.  Subsequent tables are also less than or equal to
3226    those sizes.  These values may be adjusted either when all of the
3227    codes are shorter than that, in which case the longest code length in
3228    bits is used, or when the shortest code is *longer* than the requested
3229    table size, in which case the length of the shortest code in bits is
3230    used.
3231
3232    There are two different values for the two tables, since they code a
3233    different number of possibilities each.  The literal/length table
3234    codes 286 possible values, or in a flat code, a little over eight
3235    bits.  The distance table codes 30 possible values, or a little less
3236    than five bits, flat.  The optimum values for speed end up being
3237    about one bit more than those, so lbits is 8+1 and dbits is 5+1.
3238    The optimum values may differ though from machine to machine, and
3239    possibly even between compilers.  Your mileage may vary.
3240  */
3241
3242
3243 /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
3244 #define BMAX 15         /* maximum bit length of any code */
3245
3246 static int huft_build(uInt *b, uInt n, uInt s, const uInt *d, const uInt *e, inflate_huft ** t, uInt *m, inflate_huft *hp, uInt *hn, uInt *v)
3247 //uInt *b;               /* code lengths in bits (all assumed <= BMAX) */
3248 //uInt n;                 /* number of codes (assumed <= 288) */
3249 //uInt s;                 /* number of simple-valued codes (0..s-1) */
3250 //const uInt *d;         /* list of base values for non-simple codes */
3251 //const uInt *e;         /* list of extra bits for non-simple codes */
3252 //inflate_huft ** t;            /* result: starting table */
3253 //uInt *m;               /* maximum lookup bits, returns actual */
3254 //inflate_huft *hp;       /* space for trees */
3255 //uInt *hn;               /* hufts used in space */
3256 //uInt *v;               /* working area: values in order of bit length */
3257 /* Given a list of code lengths and a maximum table size, make a set of
3258    tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
3259    if the given code set is incomplete (the tables are still built in this
3260    case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
3261    lengths), or Z_MEM_ERROR if not enough memory. */
3262 {
3263
3264   uInt a;                       /* counter for codes of length k */
3265   uInt c[BMAX+1];               /* bit length count table */
3266   uInt f;                       /* i repeats in table every f entries */
3267   int g;                        /* maximum code length */
3268   int h;                        /* table level */
3269   register uInt i;              /* counter, current code */
3270   register uInt j;              /* counter */
3271   register int k;               /* number of bits in current code */
3272   int l;                        /* bits per table (returned in m) */
3273   uInt mask;                    /* (1 << w) - 1, to avoid cc -O bug on HP */
3274   register uInt *p;            /* pointer into c[], b[], or v[] */
3275   inflate_huft *q;              /* points to current table */
3276   struct inflate_huft_s r;      /* table entry for structure assignment */
3277   inflate_huft *u[BMAX];        /* table stack */
3278   register int w;               /* bits before this table == (l * h) */
3279   uInt x[BMAX+1];               /* bit offsets, then code stack */
3280   uInt *xp;                    /* pointer into x */
3281   int y;                        /* number of dummy codes added */
3282   uInt z;                       /* number of entries in current table */
3283
3284
3285   /* Generate counts for each bit length */
3286   p = c;
3287 #define C0 *p++ = 0;
3288 #define C2 C0 C0 C0 C0
3289 #define C4 C2 C2 C2 C2
3290   C4                            /* clear c[]--assume BMAX+1 is 16 */
3291   p = b;  i = n;
3292   do {
3293     c[*p++]++;                  /* assume all entries <= BMAX */
3294   } while (--i);
3295   if (c[0] == n)                /* null input--all zero length codes */
3296   {
3297     *t = (inflate_huft *)Z_NULL;
3298     *m = 0;
3299     return Z_OK;
3300   }
3301
3302
3303   /* Find minimum and maximum length, bound *m by those */
3304   l = *m;
3305   for (j = 1; j <= BMAX; j++)
3306     if (c[j])
3307       break;
3308   k = j;                        /* minimum code length */
3309   if ((uInt)l < j)
3310     l = j;
3311   for (i = BMAX; i; i--)
3312     if (c[i])
3313       break;
3314   g = i;                        /* maximum code length */
3315   if ((uInt)l > i)
3316     l = i;
3317   *m = l;
3318
3319
3320   /* Adjust last length count to fill out codes, if needed */
3321   for (y = 1 << j; j < i; j++, y <<= 1)
3322     if ((y -= c[j]) < 0)
3323       return Z_DATA_ERROR;
3324   if ((y -= c[i]) < 0)
3325     return Z_DATA_ERROR;
3326   c[i] += y;
3327
3328
3329   /* Generate starting offsets into the value table for each length */
3330   x[1] = j = 0;
3331   p = c + 1;  xp = x + 2;
3332   while (--i) {                 /* note that i == g from above */
3333     *xp++ = (j += *p++);
3334   }
3335
3336
3337   /* Make a table of values in order of bit lengths */
3338   p = b;  i = 0;
3339   do {
3340     if ((j = *p++) != 0)
3341       v[x[j]++] = i;
3342   } while (++i < n);
3343   n = x[g];                     /* set n to length of v */
3344
3345
3346   /* Generate the Huffman codes and for each, make the table entries */
3347   x[0] = i = 0;                 /* first Huffman code is zero */
3348   p = v;                        /* grab values in bit order */
3349   h = -1;                       /* no tables yet--level -1 */
3350   w = -l;                       /* bits decoded == (l * h) */
3351   u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
3352   q = (inflate_huft *)Z_NULL;   /* ditto */
3353   z = 0;                        /* ditto */
3354
3355   /* go through the bit lengths (k already is bits in shortest code) */
3356   for (; k <= g; k++)
3357   {
3358     a = c[k];
3359     while (a--)
3360     {
3361       /* here i is the Huffman code of length k bits for value *p */
3362       /* make tables up to required level */
3363       while (k > w + l)
3364       {
3365         h++;
3366         w += l;                 /* previous table always l bits */
3367
3368         /* compute minimum size table less than or equal to l bits */
3369         z = g - w;
3370         z = z > (uInt)l ? l : z;        /* table size upper limit */
3371         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
3372         {                       /* too few codes for k-w bit table */
3373           f -= a + 1;           /* deduct codes from patterns left */
3374           xp = c + k;
3375           if (j < z)
3376             while (++j < z)     /* try smaller tables up to z bits */
3377             {
3378               if ((f <<= 1) <= *++xp)
3379                 break;          /* enough codes to use up j bits */
3380               f -= *xp;         /* else deduct codes from patterns */
3381             }
3382         }
3383         z = 1 << j;             /* table entries for j-bit table */
3384
3385         /* allocate new table */
3386         if (*hn + z > MANY)     /* (note: doesn't matter for fixed) */
3387           return Z_MEM_ERROR;   /* not enough memory */
3388         u[h] = q = hp + *hn;
3389         *hn += z;
3390
3391         /* connect to last table, if there is one */
3392         if (h)
3393         {
3394           x[h] = i;             /* save pattern for backing up */
3395           r.bits = (Byte)l;     /* bits to dump before this table */
3396           r.exop = (Byte)j;     /* bits in this table */
3397           j = i >> (w - l);
3398           r.base = (uInt)(q - u[h-1] - j);   /* offset to this table */
3399           u[h-1][j] = r;        /* connect to last table */
3400         }
3401         else
3402           *t = q;               /* first table is returned result */
3403       }
3404
3405       /* set up table entry in r */
3406       r.bits = (Byte)(k - w);
3407       if (p >= v + n)
3408         r.exop = 128 + 64;      /* out of values--invalid code */
3409       else if (*p < s)
3410       {
3411         r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
3412         r.base = *p++;          /* simple code is just the value */
3413       }
3414       else
3415       {
3416         r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
3417         r.base = d[*p++ - s];
3418       }
3419
3420       /* fill code-like entries with r */
3421       f = 1 << (k - w);
3422       for (j = i >> w; j < z; j += f)
3423         q[j] = r;
3424
3425       /* backwards increment the k-bit code i */
3426       for (j = 1 << (k - 1); i & j; j >>= 1)
3427         i ^= j;
3428       i ^= j;
3429
3430       /* backup over finished tables */
3431       mask = (1 << w) - 1;      /* needed on HP, cc -O bug */
3432       while ((i & mask) != x[h])
3433       {
3434         h--;                    /* don't need to update q */
3435         w -= l;
3436         mask = (1 << w) - 1;
3437       }
3438     }
3439   }
3440
3441
3442   /* Return Z_BUF_ERROR if we were given an incomplete table */
3443   return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
3444 }
3445
3446
3447 int inflate_trees_bits(uInt *c, uInt *bb, inflate_huft * *tb, inflate_huft *hp, z_streamp z)
3448 //uInt *c;               /* 19 code lengths */
3449 //uInt *bb;              /* bits tree desired/actual depth */
3450 //inflate_huft * *tb; /* bits tree result */
3451 //inflate_huft *hp;       /* space for trees */
3452 //z_streamp z;            /* for messages */
3453 {
3454   int r;
3455   uInt hn = 0;          /* hufts used in space */
3456   uInt *v;             /* work area for huft_build */
3457
3458   if ((v = (uInt*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
3459     return Z_MEM_ERROR;
3460   r = huft_build(c, 19, 19, (uInt*)Z_NULL, (uInt*)Z_NULL,
3461                  tb, bb, hp, &hn, v);
3462   if (r == Z_DATA_ERROR)
3463     z->msg = (char*)"oversubscribed dynamic bit lengths tree";
3464   else if (r == Z_BUF_ERROR || *bb == 0)
3465   {
3466     z->msg = (char*)"incomplete dynamic bit lengths tree";
3467     r = Z_DATA_ERROR;
3468   }
3469   ZFREE(z, v);
3470   return r;
3471 }
3472
3473
3474 int inflate_trees_dynamic(uInt nl, uInt nd, uInt *c, uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * *td, inflate_huft *hp, z_streamp z)
3475 //uInt nl;                /* number of literal/length codes */
3476 //uInt nd;                /* number of distance codes */
3477 //uInt *c;               /* that many (total) code lengths */
3478 //uInt *bl;              /* literal desired/actual bit depth */
3479 //uInt *bd;              /* distance desired/actual bit depth */
3480 //inflate_huft * *tl; /* literal/length tree result */
3481 //inflate_huft * *td; /* distance tree result */
3482 //inflate_huft *hp;       /* space for trees */
3483 //z_streamp z;            /* for messages */
3484 {
3485   int r;
3486   uInt hn = 0;          /* hufts used in space */
3487   uInt *v;             /* work area for huft_build */
3488
3489   /* allocate work area */
3490   if ((v = (uInt*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
3491     return Z_MEM_ERROR;
3492
3493   /* build literal/length tree */
3494   r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
3495   if (r != Z_OK || *bl == 0)
3496   {
3497     if (r == Z_DATA_ERROR)
3498       z->msg = (char*)"oversubscribed literal/length tree";
3499     else if (r != Z_MEM_ERROR)
3500     {
3501       z->msg = (char*)"incomplete literal/length tree";
3502       r = Z_DATA_ERROR;
3503     }
3504     ZFREE(z, v);
3505     return r;
3506   }
3507
3508   /* build distance tree */
3509   r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
3510   if (r != Z_OK || (*bd == 0 && nl > 257))
3511   {
3512     if (r == Z_DATA_ERROR)
3513       z->msg = (char*)"oversubscribed distance tree";
3514     else if (r == Z_BUF_ERROR) {
3515 #ifdef PKZIP_BUG_WORKAROUND
3516       r = Z_OK;
3517     }
3518 #else
3519       z->msg = (char*)"incomplete distance tree";
3520       r = Z_DATA_ERROR;
3521     }
3522     else if (r != Z_MEM_ERROR)
3523     {
3524       z->msg = (char*)"empty distance tree with lengths";
3525       r = Z_DATA_ERROR;
3526     }
3527     ZFREE(z, v);
3528     return r;
3529 #endif
3530   }
3531
3532   /* done */
3533   ZFREE(z, v);
3534   return Z_OK;
3535 }
3536
3537 /* inffixed.h -- table for decoding fixed codes
3538  * Generated automatically by the maketree.c program
3539  */
3540
3541 /* WARNING: this file should *not* be used by applications. It is
3542    part of the implementation of the compression library and is
3543    subject to change. Applications should only use zlib.h.
3544  */
3545
3546 static uInt fixed_bl = 9;
3547 static uInt fixed_bd = 5;
3548 static inflate_huft fixed_tl[] = {
3549     {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
3550     {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
3551     {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
3552     {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
3553     {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
3554     {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
3555     {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
3556     {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
3557     {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
3558     {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
3559     {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
3560     {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
3561     {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
3562     {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
3563     {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
3564     {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
3565     {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
3566     {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
3567     {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
3568     {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
3569     {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
3570     {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
3571     {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
3572     {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
3573     {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
3574     {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
3575     {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
3576     {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
3577     {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
3578     {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
3579     {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
3580     {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
3581     {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
3582     {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
3583     {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
3584     {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
3585     {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
3586     {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
3587     {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
3588     {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
3589     {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
3590     {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
3591     {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
3592     {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
3593     {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
3594     {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
3595     {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
3596     {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
3597     {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
3598     {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
3599     {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
3600     {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
3601     {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
3602     {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
3603     {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
3604     {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
3605     {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
3606     {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
3607     {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
3608     {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
3609     {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
3610     {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
3611     {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
3612     {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
3613     {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
3614     {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
3615     {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
3616     {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
3617     {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
3618     {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
3619     {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
3620     {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
3621     {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
3622     {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
3623     {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
3624     {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
3625     {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
3626     {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
3627     {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
3628     {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
3629     {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
3630     {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
3631     {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
3632     {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
3633     {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
3634     {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
3635     {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
3636     {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
3637     {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
3638     {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
3639     {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
3640     {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
3641     {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
3642     {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
3643     {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
3644     {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
3645     {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
3646     {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
3647     {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
3648     {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
3649     {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
3650     {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
3651     {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
3652     {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
3653     {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
3654     {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
3655     {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
3656     {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
3657     {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
3658     {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
3659     {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
3660     {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
3661     {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
3662     {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
3663     {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
3664     {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
3665     {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
3666     {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
3667     {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
3668     {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
3669     {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
3670     {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
3671     {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
3672     {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
3673     {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
3674     {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
3675     {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
3676     {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
3677   };
3678 static inflate_huft fixed_td[] = {
3679     {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
3680     {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
3681     {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
3682     {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
3683     {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
3684     {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
3685     {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
3686     {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
3687   };
3688
3689 int inflate_trees_fixed(uInt *bl, uInt *bd, inflate_huft * *tl, inflate_huft * *td, z_streamp z)
3690 //uInt *bl;               /* literal desired/actual bit depth */
3691 //uInt *bd;               /* distance desired/actual bit depth */
3692 //inflate_huft * *tl;  /* literal/length tree result */
3693 //inflate_huft * *td;  /* distance tree result */
3694 //z_streamp z;             /* for memory allocation */
3695 {
3696   *bl = fixed_bl;
3697   *bd = fixed_bd;
3698   *tl = fixed_tl;
3699   *td = fixed_td;
3700   return Z_OK;
3701 }
3702
3703 /* simplify the use of the inflate_huft type with some defines */
3704 #define exop word.what.Exop
3705 #define bits word.what.Bits
3706
3707 /* macros for bit input with no checking and for returning unused bytes */
3708 #define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
3709 #define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
3710
3711 /* Called with number of bytes left to write in window at least 258
3712    (the maximum string length) and number of input bytes available
3713    at least ten.  The ten bytes are six bytes for the longest length/
3714    distance pair plus four bytes for overloading the bit buffer. */
3715
3716 int inflate_fast(uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, inflate_blocks_statef *s, z_streamp z)
3717 {
3718   inflate_huft *t;      /* temporary pointer */
3719   uInt e;               /* extra bits or operation */
3720   uLong b;              /* bit buffer */
3721   uInt k;               /* bits in bit buffer */
3722   Byte *p;             /* input data pointer */
3723   uInt n;               /* bytes available there */
3724   Byte *q;             /* output window write pointer */
3725   uInt m;               /* bytes to end of window or read pointer */
3726   uInt ml;              /* mask for literal/length tree */
3727   uInt md;              /* mask for distance tree */
3728   uInt c;               /* bytes to copy */
3729   uInt d;               /* distance back to copy from */
3730   Byte *r;             /* copy source pointer */
3731
3732   /* load input, output, bit values */
3733   LOAD
3734
3735   /* initialize masks */
3736   ml = inflate_mask[bl];
3737   md = inflate_mask[bd];
3738
3739   /* do until not enough input or output space for fast loop */
3740   do {                          /* assume called with m >= 258 && n >= 10 */
3741     /* get literal/length code */
3742     GRABBITS(20)                /* max bits for literal/length code */
3743     if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
3744     {
3745       DUMPBITS(t->bits)
3746       Tracevv((t->base >= 0x20 && t->base < 0x7f ?
3747                 "inflate:         * literal '%c'\n" :
3748                 "inflate:         * literal 0x%02x\n", t->base));
3749       *q++ = (Byte)t->base;
3750       m--;
3751       continue;
3752     }
3753     do {
3754       DUMPBITS(t->bits)
3755       if (e & 16)
3756       {
3757         /* get extra bits for length */
3758         e &= 15;
3759         c = t->base + ((uInt)b & inflate_mask[e]);
3760         DUMPBITS(e)
3761         Tracevv(("inflate:         * length %u\n", c));
3762
3763         /* decode distance base of block to copy */
3764         GRABBITS(15);           /* max bits for distance code */
3765         e = (t = td + ((uInt)b & md))->exop;
3766         do {
3767           DUMPBITS(t->bits)
3768           if (e & 16)
3769           {
3770             /* get extra bits to add to distance base */
3771             e &= 15;
3772             GRABBITS(e)         /* get extra bits (up to 13) */
3773             d = t->base + ((uInt)b & inflate_mask[e]);
3774             DUMPBITS(e)
3775             Tracevv(("inflate:         * distance %u\n", d));
3776
3777             /* do the copy */
3778             m -= c;
3779             if ((uInt)(q - s->window) >= d)     /* offset before dest */
3780             {                                   /*  just copy */
3781               r = q - d;
3782               *q++ = *r++;  c--;        /* minimum count is three, */
3783               *q++ = *r++;  c--;        /*  so unroll loop a little */
3784             }
3785             else                        /* else offset after destination */
3786             {
3787               e = d - (uInt)(q - s->window); /* bytes from offset to end */
3788               r = s->end - e;           /* pointer to offset */
3789               if (c > e)                /* if source crosses, */
3790               {
3791                 c -= e;                 /* copy to end of window */
3792                 do {
3793                   *q++ = *r++;
3794                 } while (--e);
3795                 r = s->window;          /* copy rest from start of window */
3796               }
3797             }
3798             do {                        /* copy all or what's left */
3799               *q++ = *r++;
3800             } while (--c);
3801             break;
3802           }
3803           else if ((e & 64) == 0)
3804           {
3805             t += t->base;
3806             e = (t += ((uInt)b & inflate_mask[e]))->exop;
3807           }
3808           else
3809           {
3810             z->msg = (char*)"invalid distance code";
3811             UNGRAB
3812             UPDATE
3813             return Z_DATA_ERROR;
3814           }
3815         } while (1);
3816         break;
3817       }
3818       if ((e & 64) == 0)
3819       {
3820         t += t->base;
3821         if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
3822         {
3823           DUMPBITS(t->bits)
3824           Tracevv((t->base >= 0x20 && t->base < 0x7f ?
3825                     "inflate:         * literal '%c'\n" :
3826                     "inflate:         * literal 0x%02x\n", t->base));
3827           *q++ = (Byte)t->base;
3828           m--;
3829           break;
3830         }
3831       }
3832       else if (e & 32)
3833       {
3834         Tracevv(("inflate:         * end of block\n"));
3835         UNGRAB
3836         UPDATE
3837         return Z_STREAM_END;
3838       }
3839       else
3840       {
3841         z->msg = (char*)"invalid literal/length code";
3842         UNGRAB
3843         UPDATE
3844         return Z_DATA_ERROR;
3845       }
3846     } while (1);
3847   } while (m >= 258 && n >= 10);
3848
3849   /* not enough input or output--restore pointers and return */
3850   UNGRAB
3851   UPDATE
3852   return Z_OK;
3853 }
3854
3855 /* infcodes.c -- process literals and length/distance pairs
3856  * Copyright (C) 1995-1998 Mark Adler
3857  * For conditions of distribution and use, see copyright notice in zlib.h 
3858  */
3859
3860 /* simplify the use of the inflate_huft type with some defines */
3861 #define exop word.what.Exop
3862 #define bits word.what.Bits
3863
3864 typedef enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
3865       START,    /* x: set up for LEN */
3866       LEN,      /* i: get length/literal/eob next */
3867       LENEXT,   /* i: getting length extra (have base) */
3868       DIST,     /* i: get distance next */
3869       DISTEXT,  /* i: getting distance extra */
3870       COPY,     /* o: copying bytes in window, waiting for space */
3871       LIT,      /* o: got literal, waiting for output space */
3872       WASH,     /* o: got eob, possibly still output waiting */
3873       END,      /* x: got eob and all data flushed */
3874       BADCODE}  /* x: got error */
3875 inflate_codes_mode;
3876
3877 /* inflate codes private state */
3878 struct inflate_codes_state {
3879
3880   /* mode */
3881   inflate_codes_mode mode;      /* current inflate_codes mode */
3882
3883   /* mode dependent information */
3884   uInt len;
3885   union {
3886     struct {
3887       inflate_huft *tree;       /* pointer into tree */
3888       uInt need;                /* bits needed */
3889     } code;             /* if LEN or DIST, where in tree */
3890     uInt lit;           /* if LIT, literal */
3891     struct {
3892       uInt get;                 /* bits to get for extra */
3893       uInt dist;                /* distance back to copy from */
3894     } copy;             /* if EXT or COPY, where and how much */
3895   } sub;                /* submode */
3896
3897   /* mode independent information */
3898   Byte lbits;           /* ltree bits decoded per branch */
3899   Byte dbits;           /* dtree bits decoder per branch */
3900   inflate_huft *ltree;          /* literal/length/eob tree */
3901   inflate_huft *dtree;          /* distance tree */
3902
3903 };
3904
3905
3906 inflate_codes_statef *inflate_codes_new(uInt bl, uInt bd, inflate_huft *tl, inflate_huft *td, z_streamp z)
3907 {
3908   inflate_codes_statef *c;
3909
3910   if ((c = (inflate_codes_statef *)
3911        ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
3912   {
3913     c->mode = START;
3914     c->lbits = (Byte)bl;
3915     c->dbits = (Byte)bd;
3916     c->ltree = tl;
3917     c->dtree = td;
3918     Tracev(("inflate:       codes new\n"));
3919   }
3920   return c;
3921 }
3922
3923
3924 int inflate_codes(inflate_blocks_statef *s, z_streamp z, int r)
3925 {
3926   uInt j;               /* temporary storage */
3927   inflate_huft *t;      /* temporary pointer */
3928   uInt e;               /* extra bits or operation */
3929   uLong b;              /* bit buffer */
3930   uInt k;               /* bits in bit buffer */
3931   Byte *p;             /* input data pointer */
3932   uInt n;               /* bytes available there */
3933   Byte *q;             /* output window write pointer */
3934   uInt m;               /* bytes to end of window or read pointer */
3935   Byte *f;             /* pointer to copy strings from */
3936   inflate_codes_statef *c = s->sub.decode.codes;  /* codes state */
3937
3938   /* copy input/output information to locals (UPDATE macro restores) */
3939   LOAD
3940
3941   /* process input and output based on current state */
3942   while (1) switch (c->mode)
3943   {             /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
3944     case START:         /* x: set up for LEN */
3945 #ifndef SLOW
3946       if (m >= 258 && n >= 10)
3947       {
3948         UPDATE
3949         r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
3950         LOAD
3951         if (r != Z_OK)
3952         {
3953           c->mode = r == Z_STREAM_END ? WASH : BADCODE;
3954           break;
3955         }
3956       }
3957 #endif /* !SLOW */
3958       c->sub.code.need = c->lbits;
3959       c->sub.code.tree = c->ltree;
3960       c->mode = LEN;
3961     case LEN:           /* i: get length/literal/eob next */
3962       j = c->sub.code.need;
3963       NEEDBITS(j)
3964       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
3965       DUMPBITS(t->bits)
3966       e = (uInt)(t->exop);
3967       if (e == 0)               /* literal */
3968       {
3969         c->sub.lit = t->base;
3970         Tracevv((t->base >= 0x20 && t->base < 0x7f ?
3971                  "inflate:         literal '%c'\n" :
3972                  "inflate:         literal 0x%02x\n", t->base));
3973         c->mode = LIT;
3974         break;
3975       }
3976       if (e & 16)               /* length */
3977       {
3978         c->sub.copy.get = e & 15;
3979         c->len = t->base;
3980         c->mode = LENEXT;
3981         break;
3982       }
3983       if ((e & 64) == 0)        /* next table */
3984       {
3985         c->sub.code.need = e;
3986         c->sub.code.tree = t + t->base;
3987         break;
3988       }
3989       if (e & 32)               /* end of block */
3990       {
3991         Tracevv(("inflate:         end of block\n"));
3992         c->mode = WASH;
3993         break;
3994       }
3995       c->mode = BADCODE;        /* invalid code */
3996       z->msg = (char*)"invalid literal/length code";
3997       r = Z_DATA_ERROR;
3998       LEAVE
3999     case LENEXT:        /* i: getting length extra (have base) */
4000       j = c->sub.copy.get;
4001       NEEDBITS(j)
4002       c->len += (uInt)b & inflate_mask[j];
4003       DUMPBITS(j)
4004       c->sub.code.need = c->dbits;
4005       c->sub.code.tree = c->dtree;
4006       Tracevv(("inflate:         length %u\n", c->len));
4007       c->mode = DIST;
4008     case DIST:          /* i: get distance next */
4009       j = c->sub.code.need;
4010       NEEDBITS(j)
4011       t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
4012       DUMPBITS(t->bits)
4013       e = (uInt)(t->exop);
4014       if (e & 16)               /* distance */
4015       {
4016         c->sub.copy.get = e & 15;
4017         c->sub.copy.dist = t->base;
4018         c->mode = DISTEXT;
4019         break;
4020       }
4021       if ((e & 64) == 0)        /* next table */
4022       {
4023         c->sub.code.need = e;
4024         c->sub.code.tree = t + t->base;
4025         break;
4026       }
4027       c->mode = BADCODE;        /* invalid code */
4028       z->msg = (char*)"invalid distance code";
4029       r = Z_DATA_ERROR;
4030       LEAVE
4031     case DISTEXT:       /* i: getting distance extra */
4032       j = c->sub.copy.get;
4033       NEEDBITS(j)
4034       c->sub.copy.dist += (uInt)b & inflate_mask[j];
4035       DUMPBITS(j)
4036       Tracevv(("inflate:         distance %u\n", c->sub.copy.dist));
4037       c->mode = COPY;
4038     case COPY:          /* o: copying bytes in window, waiting for space */
4039 #ifndef __TURBOC__ /* Turbo C bug for following expression */
4040       f = (uInt)(q - s->window) < c->sub.copy.dist ?
4041           s->end - (c->sub.copy.dist - (q - s->window)) :
4042           q - c->sub.copy.dist;
4043 #else
4044       f = q - c->sub.copy.dist;
4045       if ((uInt)(q - s->window) < c->sub.copy.dist)
4046         f = s->end - (c->sub.copy.dist - (uInt)(q - s->window));
4047 #endif
4048       while (c->len)
4049       {
4050         NEEDOUT
4051         OUTBYTE(*f++)
4052         if (f == s->end)
4053           f = s->window;
4054         c->len--;
4055       }
4056       c->mode = START;
4057       break;
4058     case LIT:           /* o: got literal, waiting for output space */
4059       NEEDOUT
4060       OUTBYTE(c->sub.lit)
4061       c->mode = START;
4062       break;
4063     case WASH:          /* o: got eob, possibly more output */
4064       if (k > 7)        /* return unused byte, if any */
4065       {
4066         Assert(k < 16, "inflate_codes grabbed too many bytes")
4067         k -= 8;
4068         n++;
4069         p--;            /* can always return one */
4070       }
4071       FLUSH
4072       if (s->read != s->write)
4073         LEAVE
4074       c->mode = END;
4075     case END:
4076       r = Z_STREAM_END;
4077       LEAVE
4078     case BADCODE:       /* x: got error */
4079       r = Z_DATA_ERROR;
4080       LEAVE
4081     default:
4082       r = Z_STREAM_ERROR;
4083       LEAVE
4084   }
4085 #ifdef NEED_DUMMY_RETURN
4086   return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
4087 #endif
4088 }
4089
4090
4091 void inflate_codes_free(inflate_codes_statef *c, z_streamp z)
4092 {
4093   ZFREE(z, c);
4094   Tracev(("inflate:       codes free\n"));
4095 }
4096
4097 /* adler32.c -- compute the Adler-32 checksum of a data stream
4098  * Copyright (C) 1995-1998 Mark Adler
4099  * For conditions of distribution and use, see copyright notice in zlib.h 
4100  */
4101
4102 #define BASE 65521L /* largest prime smaller than 65536 */
4103 #define NMAX 5552
4104 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
4105
4106 #undef DO1
4107 #undef DO2
4108 #undef DO4
4109 #undef DO8
4110
4111 #define DO1(buf,i)  {s1 += buf[i]; s2 += s1;}
4112 #define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
4113 #define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
4114 #define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
4115 #define DO16(buf)   DO8(buf,0); DO8(buf,8);
4116
4117 /* ========================================================================= */
4118 uLong adler32(uLong adler, const Byte *buf, uInt len)
4119 {
4120     unsigned long s1 = adler & 0xffff;
4121     unsigned long s2 = (adler >> 16) & 0xffff;
4122     int k;
4123
4124     if (buf == Z_NULL) return 1L;
4125
4126     while (len > 0) {
4127         k = len < NMAX ? len : NMAX;
4128         len -= k;
4129         while (k >= 16) {
4130             DO16(buf);
4131             buf += 16;
4132             k -= 16;
4133         }
4134         if (k != 0) do {
4135             s1 += *buf++;
4136             s2 += s1;
4137         } while (--k);
4138         s1 %= BASE;
4139         s2 %= BASE;
4140     }
4141     return (s2 << 16) | s1;
4142 }
4143
4144 /* infblock.h -- header to use infblock.c
4145  * Copyright (C) 1995-1998 Mark Adler
4146  * For conditions of distribution and use, see copyright notice in zlib.h 
4147  */
4148
4149 /* WARNING: this file should *not* be used by applications. It is
4150    part of the implementation of the compression library and is
4151    subject to change. Applications should only use zlib.h.
4152  */
4153
4154 extern inflate_blocks_statef * inflate_blocks_new OF((
4155     z_streamp z,
4156     check_func c,               /* check function */
4157     uInt w));                   /* window size */
4158
4159 extern int inflate_blocks OF((
4160     inflate_blocks_statef *,
4161     z_streamp ,
4162     int));                      /* initial return code */
4163
4164 extern void inflate_blocks_reset OF((
4165     inflate_blocks_statef *,
4166     z_streamp ,
4167     uLong *));                  /* check value on output */
4168
4169 extern int inflate_blocks_free OF((
4170     inflate_blocks_statef *,
4171     z_streamp));
4172
4173 extern void inflate_set_dictionary OF((
4174     inflate_blocks_statef *s,
4175     const Byte *d,  /* dictionary */
4176     uInt  n));       /* dictionary length */
4177
4178 extern int inflate_blocks_sync_point OF((
4179     inflate_blocks_statef *s));
4180
4181 typedef enum {
4182       imMETHOD,   /* waiting for method byte */
4183       imFLAG,     /* waiting for flag byte */
4184       imDICT4,    /* four dictionary check bytes to go */
4185       imDICT3,    /* three dictionary check bytes to go */
4186       imDICT2,    /* two dictionary check bytes to go */
4187       imDICT1,    /* one dictionary check byte to go */
4188       imDICT0,    /* waiting for inflateSetDictionary */
4189       imBLOCKS,   /* decompressing blocks */
4190       imCHECK4,   /* four check bytes to go */
4191       imCHECK3,   /* three check bytes to go */
4192       imCHECK2,   /* two check bytes to go */
4193       imCHECK1,   /* one check byte to go */
4194       imDONE,     /* finished check, done */
4195       imBAD}      /* got an error--stay here */
4196 inflate_mode;
4197
4198 /* inflate private state */
4199 struct internal_state {
4200
4201   /* mode */
4202   inflate_mode  mode;   /* current inflate mode */
4203
4204   /* mode dependent information */
4205   union {
4206     uInt method;        /* if FLAGS, method byte */
4207     struct {
4208       uLong was;                /* computed check value */
4209       uLong need;               /* stream check value */
4210     } check;            /* if CHECK, check values to compare */
4211     uInt marker;        /* if BAD, inflateSync's marker bytes count */
4212   } sub;        /* submode */
4213
4214   /* mode independent information */
4215   int  nowrap;          /* flag for no wrapper */
4216   uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
4217   inflate_blocks_statef 
4218     *blocks;            /* current inflate_blocks state */
4219
4220 };
4221
4222
4223 int inflateReset(z_streamp z)
4224 {
4225   if (z == Z_NULL || z->state == Z_NULL)
4226     return Z_STREAM_ERROR;
4227   z->total_in = z->total_out = 0;
4228   z->msg = Z_NULL;
4229   z->state->mode = z->state->nowrap ? imBLOCKS : imMETHOD;
4230   inflate_blocks_reset(z->state->blocks, z, Z_NULL);
4231   Tracev(("inflate: reset\n"));
4232   return Z_OK;
4233 }
4234
4235
4236 int inflateEnd(z_streamp z)
4237 {
4238   if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
4239     return Z_STREAM_ERROR;
4240   if (z->state->blocks != Z_NULL)
4241     inflate_blocks_free(z->state->blocks, z);
4242   ZFREE(z, z->state);
4243   z->state = Z_NULL;
4244   Tracev(("inflate: end\n"));
4245   return Z_OK;
4246 }
4247
4248
4249
4250 int inflateInit2_(z_streamp z, int w, const char *version, int stream_size)
4251 {
4252   if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
4253       stream_size != sizeof(z_stream))
4254       return Z_VERSION_ERROR;
4255
4256   /* initialize state */
4257   if (z == Z_NULL)
4258     return Z_STREAM_ERROR;
4259   z->msg = Z_NULL;
4260   if (z->zalloc == Z_NULL)
4261   {
4262     z->zalloc = (void *(*)(void *, unsigned, unsigned))zcalloc;
4263     z->opaque = (voidp)0;
4264   }
4265   if (z->zfree == Z_NULL) z->zfree = (void (*)(void *, void *))zcfree;
4266   if ((z->state = (struct internal_state *)
4267        ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
4268     return Z_MEM_ERROR;
4269   z->state->blocks = Z_NULL;
4270
4271   /* handle undocumented nowrap option (no zlib header or check) */
4272   z->state->nowrap = 0;
4273   if (w < 0)
4274   {
4275     w = - w;
4276     z->state->nowrap = 1;
4277   }
4278
4279   /* set window size */
4280   if (w < 8 || w > 15)
4281   {
4282     inflateEnd(z);
4283     return Z_STREAM_ERROR;
4284   }
4285   z->state->wbits = (uInt)w;
4286
4287   /* create inflate_blocks state */
4288   if ((z->state->blocks =
4289       inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
4290       == Z_NULL)
4291   {
4292     inflateEnd(z);
4293     return Z_MEM_ERROR;
4294   }
4295   Tracev(("inflate: allocated\n"));
4296
4297   /* reset state */
4298   inflateReset(z);
4299   return Z_OK;
4300 }
4301
4302
4303 int inflateInit_(z_streamp z, const char *version, int stream_size)
4304 {
4305   return inflateInit2_(z, DEF_WBITS, version, stream_size);
4306 }
4307
4308
4309 #define iNEEDBYTE {if(z->avail_in==0)return r;r=f;}
4310 #define iNEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
4311
4312 int inflate(z_streamp z, int f)
4313 {
4314   int r;
4315   uInt b;
4316
4317   if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
4318     return Z_STREAM_ERROR;
4319   f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
4320   r = Z_BUF_ERROR;
4321   while (1) switch (z->state->mode)
4322   {
4323     case imMETHOD:
4324       iNEEDBYTE
4325       if (((z->state->sub.method = iNEXTBYTE) & 0xf) != Z_DEFLATED)
4326       {
4327         z->state->mode = imBAD;
4328         z->msg = (char*)"unknown compression method";
4329         z->state->sub.marker = 5;       /* can't try inflateSync */
4330         break;
4331       }
4332       if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
4333       {
4334         z->state->mode = imBAD;
4335         z->msg = (char*)"invalid window size";
4336         z->state->sub.marker = 5;       /* can't try inflateSync */
4337         break;
4338       }
4339       z->state->mode = imFLAG;
4340     case imFLAG:
4341       iNEEDBYTE
4342       b = iNEXTBYTE;
4343       if (((z->state->sub.method << 8) + b) % 31)
4344       {
4345         z->state->mode = imBAD;
4346         z->msg = (char*)"incorrect header check";
4347         z->state->sub.marker = 5;       /* can't try inflateSync */
4348         break;
4349       }
4350       Tracev(("inflate: zlib header ok\n"));
4351       if (!(b & PRESET_DICT))
4352       {
4353         z->state->mode = imBLOCKS;
4354         break;
4355       }
4356       z->state->mode = imDICT4;
4357     case imDICT4:
4358       iNEEDBYTE
4359       z->state->sub.check.need = (uLong)iNEXTBYTE << 24;
4360       z->state->mode = imDICT3;
4361     case imDICT3:
4362       iNEEDBYTE
4363       z->state->sub.check.need += (uLong)iNEXTBYTE << 16;
4364       z->state->mode = imDICT2;
4365     case imDICT2:
4366       iNEEDBYTE
4367       z->state->sub.check.need += (uLong)iNEXTBYTE << 8;
4368       z->state->mode = imDICT1;
4369     case imDICT1:
4370       iNEEDBYTE
4371       z->state->sub.check.need += (uLong)iNEXTBYTE;
4372       z->adler = z->state->sub.check.need;
4373       z->state->mode = imDICT0;
4374       return Z_NEED_DICT;
4375     case imDICT0:
4376       z->state->mode = imBAD;
4377       z->msg = (char*)"need dictionary";
4378       z->state->sub.marker = 0;       /* can try inflateSync */
4379       return Z_STREAM_ERROR;
4380     case imBLOCKS:
4381       r = inflate_blocks(z->state->blocks, z, r);
4382       if (r == Z_DATA_ERROR)
4383       {
4384         z->state->mode = imBAD;
4385         z->state->sub.marker = 0;       /* can try inflateSync */
4386         break;
4387       }
4388       if (r == Z_OK)
4389         r = f;
4390       if (r != Z_STREAM_END)
4391         return r;
4392       r = f;
4393       inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
4394       if (z->state->nowrap)
4395       {
4396         z->state->mode = imDONE;
4397         break;
4398       }
4399       z->state->mode = imCHECK4;
4400     case imCHECK4:
4401       iNEEDBYTE
4402       z->state->sub.check.need = (uLong)iNEXTBYTE << 24;
4403       z->state->mode = imCHECK3;
4404     case imCHECK3:
4405       iNEEDBYTE
4406       z->state->sub.check.need += (uLong)iNEXTBYTE << 16;
4407       z->state->mode = imCHECK2;
4408     case imCHECK2:
4409       iNEEDBYTE
4410       z->state->sub.check.need += (uLong)iNEXTBYTE << 8;
4411       z->state->mode = imCHECK1;
4412     case imCHECK1:
4413       iNEEDBYTE
4414       z->state->sub.check.need += (uLong)iNEXTBYTE;
4415
4416       if (z->state->sub.check.was != z->state->sub.check.need)
4417       {
4418         z->state->mode = imBAD;
4419         z->msg = (char*)"incorrect data check";
4420         z->state->sub.marker = 5;       /* can't try inflateSync */
4421         break;
4422       }
4423       Tracev(("inflate: zlib check ok\n"));
4424       z->state->mode = imDONE;
4425     case imDONE:
4426       return Z_STREAM_END;
4427     case imBAD:
4428       return Z_DATA_ERROR;
4429     default:
4430       return Z_STREAM_ERROR;
4431   }
4432 #ifdef NEED_DUMMY_RETURN
4433   return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
4434 #endif
4435 }
4436
4437
4438 int inflateSetDictionary(z_streamp z, const Byte *dictionary, uInt dictLength)
4439 {
4440   uInt length = dictLength;
4441
4442   if (z == Z_NULL || z->state == Z_NULL || z->state->mode != imDICT0)
4443     return Z_STREAM_ERROR;
4444
4445   if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR;
4446   z->adler = 1L;
4447
4448   if (length >= ((uInt)1<<z->state->wbits))
4449   {
4450     length = (1<<z->state->wbits)-1;
4451     dictionary += dictLength - length;
4452   }
4453   inflate_set_dictionary(z->state->blocks, dictionary, length);
4454   z->state->mode = imBLOCKS;
4455   return Z_OK;
4456 }
4457
4458
4459 int inflateSync(z_streamp z)
4460 {
4461   uInt n;       /* number of bytes to look at */
4462   Byte *p;     /* pointer to bytes */
4463   uInt m;       /* number of marker bytes found in a row */
4464   uLong r, w;   /* temporaries to save total_in and total_out */
4465
4466   /* set up */
4467   if (z == Z_NULL || z->state == Z_NULL)
4468     return Z_STREAM_ERROR;
4469   if (z->state->mode != imBAD)
4470   {
4471     z->state->mode = imBAD;
4472     z->state->sub.marker = 0;
4473   }
4474   if ((n = z->avail_in) == 0)
4475     return Z_BUF_ERROR;
4476   p = z->next_in;
4477   m = z->state->sub.marker;
4478
4479   /* search */
4480   while (n && m < 4)
4481   {
4482     static const Byte mark[4] = {0, 0, 0xff, 0xff};
4483     if (*p == mark[m])
4484       m++;
4485     else if (*p)
4486       m = 0;
4487     else
4488       m = 4 - m;
4489     p++, n--;
4490   }
4491
4492   /* restore */
4493   z->total_in += p - z->next_in;
4494   z->next_in = p;
4495   z->avail_in = n;
4496   z->state->sub.marker = m;
4497
4498   /* return no joy or set up to restart on a new block */
4499   if (m != 4)
4500     return Z_DATA_ERROR;
4501   r = z->total_in;  w = z->total_out;
4502   inflateReset(z);
4503   z->total_in = r;  z->total_out = w;
4504   z->state->mode = imBLOCKS;
4505   return Z_OK;
4506 }
4507
4508
4509 /* Returns true if inflate is currently at the end of a block generated
4510  * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
4511  * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
4512  * but removes the length bytes of the resulting empty stored block. When
4513  * decompressing, PPP checks that at the end of input packet, inflate is
4514  * waiting for these length bytes.
4515  */
4516 int inflateSyncPoint(z_streamp z)
4517 {
4518   if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
4519     return Z_STREAM_ERROR;
4520   return inflate_blocks_sync_point(z->state->blocks);
4521 }
4522
4523 voidp zcalloc (voidp opaque, unsigned items, unsigned size)
4524 {
4525     if (opaque) items += size - size; /* make compiler happy */
4526     return (voidp)malloc(items*size);
4527 }
4528
4529 void  zcfree (voidp opaque, voidp ptr)
4530 {
4531     free(ptr);
4532     if (opaque) return; /* make compiler happy */
4533 }
4534