inflateLib.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:73k
源码类别:

VxWorks

开发平台:

C/C++

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