2 * This file is derived from various .h and .c files from the zlib-1.2.3
3 * distribution by Jean-loup Gailly and Mark Adler, with some additions
4 * by Paul Mackerras to aid in implementing Deflate compression and
5 * decompression for PPP packets. See zlib.h for conditions of
6 * distribution and use.
8 * Changes that have been made include:
9 * - changed functions not used outside this file to "local"
10 * - added minCompression parameter to deflateInit2
11 * - added Z_PACKET_FLUSH (see zlib.h for details)
12 * - added inflateIncomp
16 /* zutil.h -- internal interface and configuration of the compression library
17 * Copyright (C) 1995-2005 Jean-loup Gailly.
18 * For conditions of distribution and use, see copyright notice in zlib.h
21 /* WARNING: this file should *not* be used by applications. It is
22 part of the implementation of the compression library and is
23 subject to change. Applications should only use zlib.h.
31 #include <asm/unaligned.h>
32 #include "u-boot/zlib.h"
33 #undef OFF /* avoid conflicts */
35 /* To avoid a build time warning */
43 /* compile with -Dlocal if your debugger can't find static symbols */
45 typedef unsigned char uch;
47 typedef unsigned short ush;
49 typedef unsigned long ulg;
51 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
52 #define ERR_RETURN(strm,err) return (strm->msg = (char*)ERR_MSG(err), (err))
53 /* To be used only when the state is known to be valid */
56 #define NULL ((void *) 0)
59 /* common constants */
62 #define DEF_WBITS MAX_WBITS
64 /* default windowBits for decompression. MAX_WBITS is for compression only */
66 #if MAX_MEM_LEVEL >= 8
67 #define DEF_MEM_LEVEL 8
69 #define DEF_MEM_LEVEL MAX_MEM_LEVEL
71 /* default memLevel */
73 #define STORED_BLOCK 0
74 #define STATIC_TREES 1
76 /* The three kinds of block type */
80 /* The minimum and maximum match lengths */
84 #include <linux/string.h>
85 #define zmemcpy memcpy
86 #define zmemcmp memcmp
87 #define zmemzero(dest, len) memset(dest, 0, len)
89 /* Diagnostic functions */
92 extern void z_error OF((char *m));
93 #define Assert(cond,msg) {if(!(cond)) z_error(msg);}
94 #define fprintf(fp,...) printf(__VA_ARGS__)
95 #define Trace(x) {if (z_verbose>=0) fprintf x ;}
96 #define Tracev(x) {if (z_verbose>0) fprintf x ;}
97 #define Tracevv(x) {if (z_verbose>1) fprintf x ;}
98 #define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
99 #define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
101 #define Assert(cond,msg)
109 voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
110 void zcfree OF((voidpf opaque, voidpf ptr, unsigned size));
112 #define ZALLOC(strm, items, size) \
113 (*((strm)->zalloc))((strm)->opaque, (items), (size))
114 #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr), 0)
117 /* inftrees.h -- header to use inftrees.c
118 * Copyright (C) 1995-2005 Mark Adler
119 * For conditions of distribution and use, see copyright notice in zlib.h
122 /* WARNING: this file should *not* be used by applications. It is
123 part of the implementation of the compression library and is
124 subject to change. Applications should only use zlib.h.
127 /* Structure for decoding tables. Each entry provides either the
128 information needed to do the operation requested by the code that
129 indexed that table entry, or it provides a pointer to another
130 table that indexes more bits of the code. op indicates whether
131 the entry is a pointer to another table, a literal, a length or
132 distance, an end-of-block, or an invalid code. For a table
133 pointer, the low four bits of op is the number of index bits of
134 that table. For a length or distance, the low four bits of op
135 is the number of extra bits to get after the code. bits is
136 the number of bits in this code or part of the code to drop off
137 of the bit buffer. val is the actual byte to output in the case
138 of a literal, the base length or distance, or the offset from
139 the current table to the next table. Each entry is four bytes. */
142 unsigned char op; /* operation, extra bits, table bits */
143 unsigned char bits; /* bits in this part of the code */
144 unsigned short val; /* offset in table or code value */
147 /* Maximum size of dynamic tree. The maximum found in a long but non-
148 exhaustive search was 1444 code structures (852 for length/literals
149 and 592 for distances, the latter actually the result of an
150 exhaustive search). The true maximum is not known, but the value
151 below is more than safe. */
155 /* Type of code to build for inftable() */
162 extern int inflate_table OF((codetype type, unsigned short FAR *lens,
163 unsigned codes, code FAR * FAR *table,
164 unsigned FAR *bits, unsigned short FAR *work));
166 /* inflate.h -- internal inflate state definition
167 * Copyright (C) 1995-2004 Mark Adler
168 * For conditions of distribution and use, see copyright notice in zlib.h
171 /* WARNING: this file should *not* be used by applications. It is
172 part of the implementation of the compression library and is
173 subject to change. Applications should only use zlib.h.
178 /* Possible inflate modes between inflate() calls */
180 HEAD, /* i: waiting for magic header */
181 FLAGS, /* i: waiting for method and flags (gzip) */
182 TIME, /* i: waiting for modification time (gzip) */
183 OS, /* i: waiting for extra flags and operating system (gzip) */
184 EXLEN, /* i: waiting for extra length (gzip) */
185 EXTRA, /* i: waiting for extra bytes (gzip) */
186 NAME, /* i: waiting for end of file name (gzip) */
187 COMMENT, /* i: waiting for end of comment (gzip) */
188 HCRC, /* i: waiting for header crc (gzip) */
189 DICTID, /* i: waiting for dictionary check value */
190 DICT, /* waiting for inflateSetDictionary() call */
191 TYPE, /* i: waiting for type bits, including last-flag bit */
192 TYPEDO, /* i: same, but skip check to exit inflate on new block */
193 STORED, /* i: waiting for stored size (length and complement) */
194 COPY, /* i/o: waiting for input or output to copy stored block */
195 TABLE, /* i: waiting for dynamic block table lengths */
196 LENLENS, /* i: waiting for code length code lengths */
197 CODELENS, /* i: waiting for length/lit and distance code lengths */
198 LEN, /* i: waiting for length/lit code */
199 LENEXT, /* i: waiting for length extra bits */
200 DIST, /* i: waiting for distance code */
201 DISTEXT, /* i: waiting for distance extra bits */
202 MATCH, /* o: waiting for output space to copy string */
203 LIT, /* o: waiting for output space to write literal */
204 CHECK, /* i: waiting for 32-bit check value */
205 LENGTH, /* i: waiting for 32-bit length (gzip) */
206 DONE, /* finished check, done -- remain here until reset */
207 BAD, /* got a data error -- remain here until reset */
208 MEM, /* got an inflate() memory error -- remain here until reset */
209 SYNC, /* looking for synchronization bytes to restart inflate() */
217 State transitions between above modes -
219 (most modes can go to the BAD or MEM mode -- not shown for clarity)
222 HEAD -> (gzip) or (zlib)
223 (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME
224 NAME -> COMMENT -> HCRC -> TYPE
225 (zlib) -> DICTID or TYPE
226 DICTID -> DICT -> TYPE
228 TYPE -> STORED or TABLE or LEN or CHECK
229 STORED -> COPY -> TYPE
230 TABLE -> LENLENS -> CODELENS -> LEN
232 LEN -> LENEXT or LIT or TYPE
233 LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
236 CHECK -> LENGTH -> DONE
239 /* state maintained between inflate() calls. Approximately 7K bytes. */
240 struct inflate_state {
241 inflate_mode mode; /* current inflate mode */
242 int last; /* true if processing last block */
243 int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
244 int havedict; /* true if dictionary provided */
245 int flags; /* gzip header method and flags (0 if zlib) */
246 unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
247 unsigned long check; /* protected copy of check value */
248 unsigned long total; /* protected copy of output count */
249 gz_headerp head; /* where to save gzip header information */
251 unsigned wbits; /* log base 2 of requested window size */
252 unsigned wsize; /* window size or zero if not using window */
253 unsigned whave; /* valid bytes in the window */
254 unsigned write; /* window write index */
255 unsigned char FAR *window; /* allocated sliding window, if needed */
256 /* bit accumulator */
257 unsigned long hold; /* input bit accumulator */
258 unsigned bits; /* number of bits in "in" */
259 /* for string and stored block copying */
260 unsigned length; /* literal or length of data to copy */
261 unsigned offset; /* distance back to copy string from */
262 /* for table and code decoding */
263 unsigned extra; /* extra bits needed */
264 /* fixed and dynamic code tables */
265 code const FAR *lencode; /* starting table for length/literal codes */
266 code const FAR *distcode; /* starting table for distance codes */
267 unsigned lenbits; /* index bits for lencode */
268 unsigned distbits; /* index bits for distcode */
269 /* dynamic table building */
270 unsigned ncode; /* number of code length code lengths */
271 unsigned nlen; /* number of length code lengths */
272 unsigned ndist; /* number of distance code lengths */
273 unsigned have; /* number of code lengths in lens[] */
274 code FAR *next; /* next available space in codes[] */
275 unsigned short lens[320]; /* temporary storage for code lengths */
276 unsigned short work[288]; /* work area for code table building */
277 code codes[ENOUGH]; /* space for code tables */
281 /* inffast.h -- header to use inffast.c
282 * Copyright (C) 1995-2003 Mark Adler
283 * For conditions of distribution and use, see copyright notice in zlib.h
286 /* WARNING: this file should *not* be used by applications. It is
287 part of the implementation of the compression library and is
288 subject to change. Applications should only use zlib.h.
291 void inflate_fast OF((z_streamp strm, unsigned start));
293 /* inffixed.h -- table for decoding fixed codes
294 * Generated automatically by makefixed().
297 /* WARNING: this file should *not* be used by applications. It
298 is part of the implementation of the compression library and
299 is subject to change. Applications should only use zlib.h.
302 static const code lenfix[512] = {
303 {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
304 {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
305 {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
306 {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
307 {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
308 {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
309 {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
310 {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
311 {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
312 {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
313 {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
314 {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
315 {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
316 {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
317 {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
318 {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
319 {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
320 {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
321 {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
322 {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
323 {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
324 {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
325 {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
326 {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
327 {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
328 {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
329 {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
330 {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
331 {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
332 {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
333 {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
334 {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
335 {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
336 {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
337 {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
338 {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
339 {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
340 {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
341 {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
342 {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
343 {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
344 {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
345 {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
346 {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
347 {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
348 {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
349 {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
350 {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
351 {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
352 {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
353 {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
354 {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
355 {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
356 {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
357 {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
358 {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
359 {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
360 {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
361 {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
362 {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
363 {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
364 {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
365 {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
366 {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
367 {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
368 {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
369 {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
370 {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
371 {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
372 {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
373 {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
374 {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
375 {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
379 static const code distfix[32] = {
380 {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
381 {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
382 {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
383 {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
384 {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
389 /* inffast.c -- fast decoding
390 * Copyright (C) 1995-2004 Mark Adler
391 * For conditions of distribution and use, see copyright notice in zlib.h
394 /* Allow machine dependent optimization for post-increment or pre-increment.
395 Based on testing to date,
396 Pre-increment preferred for:
398 - MIPS R5000 (Randers-Pehrson)
399 Post-increment preferred for:
401 No measurable difference:
402 - Pentium III (Anderson)
406 #define PUP(a) *++(a)
407 #define UP_UNALIGNED(a) get_unaligned(++(a))
410 Decode literal, length, and distance codes and write out the resulting
411 literal and match bytes until either not enough input or output is
412 available, an end-of-block is encountered, or a data error is encountered.
413 When large enough input and output buffers are supplied to inflate(), for
414 example, a 16K input buffer and a 64K output buffer, more than 95% of the
415 inflate execution time is spent in this routine.
421 strm->avail_out >= 258
422 start >= strm->avail_out
425 On return, state->mode is one of:
427 LEN -- ran out of enough output space or enough available input
428 TYPE -- reached end of block code, inflate() to interpret next block
429 BAD -- error in block data
433 - The maximum input bits used by a length/distance pair is 15 bits for the
434 length code, 5 bits for the length extra, 15 bits for the distance code,
435 and 13 bits for the distance extra. This totals 48 bits, or six bytes.
436 Therefore if strm->avail_in >= 6, then there is enough input to avoid
437 checking for available input while decoding.
439 - The maximum bytes that a single length/distance pair can output is 258
440 bytes, which is the maximum length that can be coded. inflate_fast()
441 requires strm->avail_out >= 258 for each loop to avoid checking for
444 void inflate_fast(strm, start)
446 unsigned start; /* inflate()'s starting value for strm->avail_out */
448 struct inflate_state FAR *state;
449 unsigned char FAR *in; /* local strm->next_in */
450 unsigned char FAR *last; /* while in < last, enough input available */
451 unsigned char FAR *out; /* local strm->next_out */
452 unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
453 unsigned char FAR *end; /* while out < end, enough space available */
454 #ifdef INFLATE_STRICT
455 unsigned dmax; /* maximum distance from zlib header */
457 unsigned wsize; /* window size or zero if not using window */
458 unsigned whave; /* valid bytes in the window */
459 unsigned write; /* window write index */
460 unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
461 unsigned long hold; /* local strm->hold */
462 unsigned bits; /* local strm->bits */
463 code const FAR *lcode; /* local strm->lencode */
464 code const FAR *dcode; /* local strm->distcode */
465 unsigned lmask; /* mask for first level of length codes */
466 unsigned dmask; /* mask for first level of distance codes */
467 code this; /* retrieved table entry */
468 unsigned op; /* code bits, operation, extra bits, or */
469 /* window position, window bytes to copy */
470 unsigned len; /* match length, unused bytes */
471 unsigned dist; /* match distance */
472 unsigned char FAR *from; /* where to copy match from */
474 /* copy state to local variables */
475 state = (struct inflate_state FAR *)strm->state;
476 in = strm->next_in - OFF;
477 last = in + (strm->avail_in - 5);
478 out = strm->next_out - OFF;
479 beg = out - (start - strm->avail_out);
480 end = out + (strm->avail_out - 257);
481 #ifdef INFLATE_STRICT
484 wsize = state->wsize;
485 whave = state->whave;
486 write = state->write;
487 window = state->window;
490 lcode = state->lencode;
491 dcode = state->distcode;
492 lmask = (1U << state->lenbits) - 1;
493 dmask = (1U << state->distbits) - 1;
495 /* decode literals and length/distances until end-of-block or not enough
496 input data or output space */
499 hold += (unsigned long)(PUP(in)) << bits;
501 hold += (unsigned long)(PUP(in)) << bits;
504 this = lcode[hold & lmask];
506 op = (unsigned)(this.bits);
509 op = (unsigned)(this.op);
510 if (op == 0) { /* literal */
511 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
512 "inflate: literal '%c'\n" :
513 "inflate: literal 0x%02x\n", this.val));
514 PUP(out) = (unsigned char)(this.val);
516 else if (op & 16) { /* length base */
517 len = (unsigned)(this.val);
518 op &= 15; /* number of extra bits */
521 hold += (unsigned long)(PUP(in)) << bits;
524 len += (unsigned)hold & ((1U << op) - 1);
528 Tracevv((stderr, "inflate: length %u\n", len));
530 hold += (unsigned long)(PUP(in)) << bits;
532 hold += (unsigned long)(PUP(in)) << bits;
535 this = dcode[hold & dmask];
537 op = (unsigned)(this.bits);
540 op = (unsigned)(this.op);
541 if (op & 16) { /* distance base */
542 dist = (unsigned)(this.val);
543 op &= 15; /* number of extra bits */
545 hold += (unsigned long)(PUP(in)) << bits;
548 hold += (unsigned long)(PUP(in)) << bits;
552 dist += (unsigned)hold & ((1U << op) - 1);
553 #ifdef INFLATE_STRICT
555 strm->msg = (char *)"invalid distance too far back";
562 Tracevv((stderr, "inflate: distance %u\n", dist));
563 op = (unsigned)(out - beg); /* max distance in output */
564 if (dist > op) { /* see if copy from window */
565 op = dist - op; /* distance back in window */
567 strm->msg = (char *)"invalid distance too far back";
572 if (write == 0) { /* very common case */
574 if (op < len) { /* some from window */
577 PUP(out) = PUP(from);
579 from = out - dist; /* rest from output */
582 else if (write < op) { /* wrap around window */
583 from += wsize + write - op;
585 if (op < len) { /* some from end of window */
588 PUP(out) = PUP(from);
591 if (write < len) { /* some from start of window */
595 PUP(out) = PUP(from);
597 from = out - dist; /* rest from output */
601 else { /* contiguous in window */
603 if (op < len) { /* some from window */
606 PUP(out) = PUP(from);
608 from = out - dist; /* rest from output */
612 PUP(out) = PUP(from);
613 PUP(out) = PUP(from);
614 PUP(out) = PUP(from);
618 PUP(out) = PUP(from);
620 PUP(out) = PUP(from);
624 unsigned short *sout;
627 from = out - dist; /* copy direct from output */
628 /* minimum length is three */
630 if (!((long)(out - 1 + OFF) & 1)) {
631 PUP(out) = PUP(from);
634 sout = (unsigned short *)(out - OFF);
636 unsigned short *sfrom;
638 sfrom = (unsigned short *)(from - OFF);
641 PUP(sout) = UP_UNALIGNED(sfrom);
643 out = (unsigned char *)sout + OFF;
644 from = (unsigned char *)sfrom + OFF;
645 } else { /* dist == 1 or dist == 2 */
646 unsigned short pat16;
648 pat16 = *(sout-2+2*OFF);
650 #if defined(__BIG_ENDIAN)
651 pat16 = (pat16 & 0xff) | ((pat16 & 0xff ) << 8);
652 #elif defined(__LITTLE_ENDIAN)
653 pat16 = (pat16 & 0xff00) | ((pat16 & 0xff00 ) >> 8);
655 #error __BIG_ENDIAN nor __LITTLE_ENDIAN is defined
661 out = (unsigned char *)sout + OFF;
664 PUP(out) = PUP(from);
667 else if ((op & 64) == 0) { /* 2nd level distance code */
668 this = dcode[this.val + (hold & ((1U << op) - 1))];
672 strm->msg = (char *)"invalid distance code";
677 else if ((op & 64) == 0) { /* 2nd level length code */
678 this = lcode[this.val + (hold & ((1U << op) - 1))];
681 else if (op & 32) { /* end-of-block */
682 Tracevv((stderr, "inflate: end of block\n"));
687 strm->msg = (char *)"invalid literal/length code";
691 } while (in < last && out < end);
693 /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
697 hold &= (1U << bits) - 1;
699 /* update state and return */
700 strm->next_in = in + OFF;
701 strm->next_out = out + OFF;
702 strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
703 strm->avail_out = (unsigned)(out < end ?
704 257 + (end - out) : 257 - (out - end));
711 inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
712 - Using bit fields for code structure
713 - Different op definition to avoid & for extra bits (do & for table bits)
714 - Three separate decoding do-loops for direct, window, and write == 0
715 - Special case for distance > 1 copies to do overlapped load and store copy
716 - Explicit branch predictions (based on measured branch probabilities)
717 - Deferring match copy and interspersed it with decoding subsequent codes
718 - Swapping literal/length else
719 - Swapping window/direct else
720 - Larger unrolled copy loops (three is about right)
721 - Moving len -= 3 statement into middle of loop
725 /* inftrees.c -- generate Huffman trees for efficient decoding
726 * Copyright (C) 1995-2005 Mark Adler
727 * For conditions of distribution and use, see copyright notice in zlib.h
732 If you use the zlib library in a product, an acknowledgment is welcome
733 in the documentation of your product. If for some reason you cannot
734 include such an acknowledgment, I would appreciate that you keep this
735 copyright string in the executable of your product.
739 Build a set of tables to decode the provided canonical Huffman code.
740 The code lengths are lens[0..codes-1]. The result starts at *table,
741 whose indices are 0..2^bits-1. work is a writable array of at least
742 lens shorts, which is used as a work area. type is the type of code
743 to be generated, CODES, LENS, or DISTS. On return, zero is success,
744 -1 is an invalid code, and +1 means that ENOUGH isn't enough. table
745 on return points to the next available entry's address. bits is the
746 requested root table index bits, and on return it is the actual root
747 table index bits. It will differ if the request is greater than the
748 longest code or if it is less than the shortest code.
750 int inflate_table(type, lens, codes, table, bits, work)
752 unsigned short FAR *lens;
754 code FAR * FAR *table;
756 unsigned short FAR *work;
758 unsigned len; /* a code's length in bits */
759 unsigned sym; /* index of code symbols */
760 unsigned min, max; /* minimum and maximum code lengths */
761 unsigned root; /* number of index bits for root table */
762 unsigned curr; /* number of index bits for current table */
763 unsigned drop; /* code bits to drop for sub-table */
764 int left; /* number of prefix codes available */
765 unsigned used; /* code entries in table used */
766 unsigned huff; /* Huffman code */
767 unsigned incr; /* for incrementing code, index */
768 unsigned fill; /* index for replicating entries */
769 unsigned low; /* low bits for current root entry */
770 unsigned mask; /* mask for low root bits */
771 code this; /* table entry for duplication */
772 code FAR *next; /* next available space in table */
773 const unsigned short FAR *base; /* base value table to use */
774 const unsigned short FAR *extra; /* extra bits table to use */
775 int end; /* use base and extra for symbol > end */
776 unsigned short count[MAXBITS+1]; /* number of codes of each length */
777 unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
778 static const unsigned short lbase[31] = { /* Length codes 257..285 base */
779 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
780 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
781 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
782 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
783 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196};
784 static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
785 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
786 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
787 8193, 12289, 16385, 24577, 0, 0};
788 static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
789 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
790 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
791 28, 28, 29, 29, 64, 64};
794 Process a set of code lengths to create a canonical Huffman code. The
795 code lengths are lens[0..codes-1]. Each length corresponds to the
796 symbols 0..codes-1. The Huffman code is generated by first sorting the
797 symbols by length from short to long, and retaining the symbol order
798 for codes with equal lengths. Then the code starts with all zero bits
799 for the first code of the shortest length, and the codes are integer
800 increments for the same length, and zeros are appended as the length
801 increases. For the deflate format, these bits are stored backwards
802 from their more natural integer increment ordering, and so when the
803 decoding tables are built in the large loop below, the integer codes
804 are incremented backwards.
806 This routine assumes, but does not check, that all of the entries in
807 lens[] are in the range 0..MAXBITS. The caller must assure this.
808 1..MAXBITS is interpreted as that code length. zero means that that
809 symbol does not occur in this code.
811 The codes are sorted by computing a count of codes for each length,
812 creating from that a table of starting indices for each length in the
813 sorted table, and then entering the symbols in order in the sorted
814 table. The sorted table is work[], with that space being provided by
817 The length counts are used for other purposes as well, i.e. finding
818 the minimum and maximum length codes, determining if there are any
819 codes at all, checking for a valid set of lengths, and looking ahead
820 at length counts to determine sub-table sizes when building the
824 /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
825 for (len = 0; len <= MAXBITS; len++)
827 for (sym = 0; sym < codes; sym++)
830 /* bound code lengths, force root to be within code lengths */
832 for (max = MAXBITS; max >= 1; max--)
833 if (count[max] != 0) break;
834 if (root > max) root = max;
835 if (max == 0) { /* no symbols to code at all */
836 this.op = (unsigned char)64; /* invalid code marker */
837 this.bits = (unsigned char)1;
838 this.val = (unsigned short)0;
839 *(*table)++ = this; /* make a table to force an error */
842 return 0; /* no symbols, but wait for decoding to report error */
844 for (min = 1; min <= MAXBITS; min++)
845 if (count[min] != 0) break;
846 if (root < min) root = min;
848 /* check for an over-subscribed or incomplete set of lengths */
850 for (len = 1; len <= MAXBITS; len++) {
853 if (left < 0) return -1; /* over-subscribed */
855 if (left > 0 && (type == CODES || max != 1))
856 return -1; /* incomplete set */
858 /* generate offsets into symbol table for each length for sorting */
860 for (len = 1; len < MAXBITS; len++)
861 offs[len + 1] = offs[len] + count[len];
863 /* sort symbols by length, by symbol order within each length */
864 for (sym = 0; sym < codes; sym++)
865 if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
868 Create and fill in decoding tables. In this loop, the table being
869 filled is at next and has curr index bits. The code being used is huff
870 with length len. That code is converted to an index by dropping drop
871 bits off of the bottom. For codes where len is less than drop + curr,
872 those top drop + curr - len bits are incremented through all values to
873 fill the table with replicated entries.
875 root is the number of index bits for the root table. When len exceeds
876 root, sub-tables are created pointed to by the root entry with an index
877 of the low root bits of huff. This is saved in low to check for when a
878 new sub-table should be started. drop is zero when the root table is
879 being filled, and drop is root when sub-tables are being filled.
881 When a new sub-table is needed, it is necessary to look ahead in the
882 code lengths to determine what size sub-table is needed. The length
883 counts are used for this, and so count[] is decremented as codes are
884 entered in the tables.
886 used keeps track of how many table entries have been allocated from the
887 provided *table space. It is checked when a LENS table is being made
888 against the space in *table, ENOUGH, minus the maximum space needed by
889 the worst case distance code, MAXD. This should never happen, but the
890 sufficiency of ENOUGH has not been proven exhaustively, hence the check.
891 This assumes that when type == LENS, bits == 9.
893 sym increments through all symbols, and the loop terminates when
894 all codes of length max, i.e. all codes, have been processed. This
895 routine permits incomplete codes, so another loop after this one fills
896 in the rest of the decoding tables with invalid code markers.
899 /* set up for code type */
902 base = extra = work; /* dummy value--not used */
918 /* initialize state for loop */
919 huff = 0; /* starting code */
920 sym = 0; /* starting code symbol */
921 len = min; /* starting code length */
922 next = *table; /* current table to fill in */
923 curr = root; /* current table index bits */
924 drop = 0; /* current bits to drop from code for index */
925 low = (unsigned)(-1); /* trigger new sub-table when len > root */
926 used = 1U << root; /* use root table entries */
927 mask = used - 1; /* mask for comparing low */
929 /* check available table space */
930 if (type == LENS && used >= ENOUGH - MAXD)
933 /* process all codes and make table entries */
935 /* create table entry */
936 this.bits = (unsigned char)(len - drop);
937 if ((int)(work[sym]) < end) {
938 this.op = (unsigned char)0;
939 this.val = work[sym];
941 else if ((int)(work[sym]) > end) {
942 this.op = (unsigned char)(extra[work[sym]]);
943 this.val = base[work[sym]];
946 this.op = (unsigned char)(32 + 64); /* end of block */
950 /* replicate for those indices with low len bits equal to huff */
951 incr = 1U << (len - drop);
953 min = fill; /* save offset to next table */
956 next[(huff >> drop) + fill] = this;
959 /* backwards increment the len-bit code huff */
960 incr = 1U << (len - 1);
970 /* go to next symbol, update count, len */
972 if (--(count[len]) == 0) {
973 if (len == max) break;
974 len = lens[work[sym]];
977 /* create new sub-table if needed */
978 if (len > root && (huff & mask) != low) {
979 /* if first time, transition to sub-tables */
983 /* increment past last table */
984 next += min; /* here min is 1 << curr */
986 /* determine length of next table */
988 left = (int)(1 << curr);
989 while (curr + drop < max) {
990 left -= count[curr + drop];
991 if (left <= 0) break;
996 /* check for enough space */
998 if (type == LENS && used >= ENOUGH - MAXD)
1001 /* point entry in root table to sub-table */
1003 (*table)[low].op = (unsigned char)curr;
1004 (*table)[low].bits = (unsigned char)root;
1005 (*table)[low].val = (unsigned short)(next - *table);
1010 Fill in rest of table for incomplete codes. This loop is similar to the
1011 loop above in incrementing huff for table indices. It is assumed that
1012 len is equal to curr + drop, so there is no loop needed to increment
1013 through high index bits. When the current sub-table is filled, the loop
1014 drops back to the root table to fill in any remaining entries there.
1016 this.op = (unsigned char)64; /* invalid code marker */
1017 this.bits = (unsigned char)(len - drop);
1018 this.val = (unsigned short)0;
1020 /* when done with sub-table, drop back to root table */
1021 if (drop != 0 && (huff & mask) != low) {
1025 this.bits = (unsigned char)len;
1028 /* put invalid code marker in table */
1029 next[huff >> drop] = this;
1031 /* backwards increment the len-bit code huff */
1032 incr = 1U << (len - 1);
1043 /* set return parameters */
1050 /* inflate.c -- zlib decompression
1051 * Copyright (C) 1995-2005 Mark Adler
1052 * For conditions of distribution and use, see copyright notice in zlib.h
1054 local void fixedtables OF((struct inflate_state FAR *state));
1055 local int updatewindow OF((z_streamp strm, unsigned out));
1057 int ZEXPORT inflateReset(strm)
1060 struct inflate_state FAR *state;
1062 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1063 state = (struct inflate_state FAR *)strm->state;
1064 strm->total_in = strm->total_out = state->total = 0;
1066 strm->adler = 1; /* to support ill-conceived Java test suite */
1069 state->havedict = 0;
1070 state->dmax = 32768U;
1071 state->head = Z_NULL;
1077 state->lencode = state->distcode = state->next = state->codes;
1078 if (strm->outcb != Z_NULL)
1079 (*strm->outcb)(Z_NULL, 0);
1080 Tracev((stderr, "inflate: reset\n"));
1084 int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
1087 const char *version;
1090 struct inflate_state FAR *state;
1092 if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
1093 stream_size != (int)(sizeof(z_stream)))
1094 return Z_VERSION_ERROR;
1095 if (strm == Z_NULL) return Z_STREAM_ERROR;
1096 strm->msg = Z_NULL; /* in case we return an error */
1097 if (strm->zalloc == (alloc_func)0) {
1098 strm->zalloc = zcalloc;
1099 strm->opaque = (voidpf)0;
1101 if (strm->zfree == (free_func)0) strm->zfree = zcfree;
1102 state = (struct inflate_state FAR *)
1103 ZALLOC(strm, 1, sizeof(struct inflate_state));
1104 if (state == Z_NULL) return Z_MEM_ERROR;
1105 Tracev((stderr, "inflate: allocated\n"));
1106 strm->state = (struct internal_state FAR *)state;
1107 if (windowBits < 0) {
1109 windowBits = -windowBits;
1112 state->wrap = (windowBits >> 4) + 1;
1114 if (windowBits < 48) windowBits &= 15;
1117 if (windowBits < 8 || windowBits > 15) {
1119 strm->state = Z_NULL;
1120 return Z_STREAM_ERROR;
1122 state->wbits = (unsigned)windowBits;
1123 state->window = Z_NULL;
1124 return inflateReset(strm);
1127 int ZEXPORT inflateInit_(strm, version, stream_size)
1129 const char *version;
1132 return inflateInit2_(strm, DEF_WBITS, version, stream_size);
1135 local void fixedtables(state)
1136 struct inflate_state FAR *state;
1138 state->lencode = lenfix;
1140 state->distcode = distfix;
1141 state->distbits = 5;
1145 Update the window with the last wsize (normally 32K) bytes written before
1146 returning. If window does not exist yet, create it. This is only called
1147 when a window is already in use, or when output has been written during this
1148 inflate call, but the end of the deflate stream has not been reached yet.
1149 It is also called to create a window for dictionary data when a dictionary
1152 Providing output buffers larger than 32K to inflate() should provide a speed
1153 advantage, since only the last 32K of output is copied to the sliding window
1154 upon return from inflate(), and since all distances after the first 32K of
1155 output will fall in the output data, making match copies simpler and faster.
1156 The advantage may be dependent on the size of the processor's data caches.
1158 local int updatewindow(strm, out)
1162 struct inflate_state FAR *state;
1163 unsigned copy, dist;
1165 state = (struct inflate_state FAR *)strm->state;
1167 /* if it hasn't been done already, allocate space for the window */
1168 if (state->window == Z_NULL) {
1169 state->window = (unsigned char FAR *)
1170 ZALLOC(strm, 1U << state->wbits,
1171 sizeof(unsigned char));
1172 if (state->window == Z_NULL) return 1;
1175 /* if window not in use yet, initialize */
1176 if (state->wsize == 0) {
1177 state->wsize = 1U << state->wbits;
1182 /* copy state->wsize or less output bytes into the circular window */
1183 copy = out - strm->avail_out;
1184 if (copy >= state->wsize) {
1185 zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
1187 state->whave = state->wsize;
1190 dist = state->wsize - state->write;
1191 if (dist > copy) dist = copy;
1192 zmemcpy(state->window + state->write, strm->next_out - copy, dist);
1195 zmemcpy(state->window, strm->next_out - copy, copy);
1196 state->write = copy;
1197 state->whave = state->wsize;
1200 state->write += dist;
1201 if (state->write == state->wsize) state->write = 0;
1202 if (state->whave < state->wsize) state->whave += dist;
1208 /* Macros for inflate(): */
1210 /* check function to use adler32() for zlib or crc32() for gzip */
1211 #define UPDATE(check, buf, len) \
1212 (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
1214 /* check macros for header crc */
1215 #define CRC2(check, word) \
1217 hbuf[0] = (unsigned char)(word); \
1218 hbuf[1] = (unsigned char)((word) >> 8); \
1219 check = crc32(check, hbuf, 2); \
1222 #define CRC4(check, word) \
1224 hbuf[0] = (unsigned char)(word); \
1225 hbuf[1] = (unsigned char)((word) >> 8); \
1226 hbuf[2] = (unsigned char)((word) >> 16); \
1227 hbuf[3] = (unsigned char)((word) >> 24); \
1228 check = crc32(check, hbuf, 4); \
1231 /* Load registers with state in inflate() for speed */
1234 put = strm->next_out; \
1235 left = strm->avail_out; \
1236 next = strm->next_in; \
1237 have = strm->avail_in; \
1238 hold = state->hold; \
1239 bits = state->bits; \
1242 /* Restore state from registers in inflate() */
1245 strm->next_out = put; \
1246 strm->avail_out = left; \
1247 strm->next_in = next; \
1248 strm->avail_in = have; \
1249 state->hold = hold; \
1250 state->bits = bits; \
1253 /* Clear the input bit accumulator */
1254 #define INITBITS() \
1260 /* Get a byte of input into the bit accumulator, or return from inflate()
1261 if there is no input available. */
1262 #define PULLBYTE() \
1264 if (have == 0) goto inf_leave; \
1266 hold += (unsigned long)(*next++) << bits; \
1270 /* Assure that there are at least n bits in the bit accumulator. If there is
1271 not enough available input to do that, then return from inflate(). */
1272 #define NEEDBITS(n) \
1274 while (bits < (unsigned)(n)) \
1278 /* Return the low n bits of the bit accumulator (n < 16) */
1280 ((unsigned)hold & ((1U << (n)) - 1))
1282 /* Remove n bits from the bit accumulator */
1283 #define DROPBITS(n) \
1286 bits -= (unsigned)(n); \
1289 /* Remove zero to seven bits as needed to go to a byte boundary */
1290 #define BYTEBITS() \
1292 hold >>= bits & 7; \
1296 /* Reverse the bytes in a 32-bit value */
1297 #define REVERSE(q) \
1298 ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
1299 (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
1302 inflate() uses a state machine to process as much input data and generate as
1303 much output data as possible before returning. The state machine is
1304 structured roughly as follows:
1306 for (;;) switch (state) {
1309 if (not enough input data or output space to make progress)
1311 ... make progress ...
1317 so when inflate() is called again, the same case is attempted again, and
1318 if the appropriate resources are provided, the machine proceeds to the
1319 next state. The NEEDBITS() macro is usually the way the state evaluates
1320 whether it can proceed or should return. NEEDBITS() does the return if
1321 the requested bits are not available. The typical use of the BITS macros
1325 ... do something with BITS(n) ...
1328 where NEEDBITS(n) either returns from inflate() if there isn't enough
1329 input left to load n bits into the accumulator, or it continues. BITS(n)
1330 gives the low n bits in the accumulator. When done, DROPBITS(n) drops
1331 the low n bits off the accumulator. INITBITS() clears the accumulator
1332 and sets the number of available bits to zero. BYTEBITS() discards just
1333 enough bits to put the accumulator on a byte boundary. After BYTEBITS()
1334 and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
1336 NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
1337 if there is no input available. The decoding of variable length codes uses
1338 PULLBYTE() directly in order to pull just enough bytes to decode the next
1341 Some states loop until they get enough input, making sure that enough
1342 state information is maintained to continue the loop where it left off
1343 if NEEDBITS() returns in the loop. For example, want, need, and keep
1344 would all have to actually be part of the saved state in case NEEDBITS()
1348 while (want < need) {
1350 keep[want++] = BITS(n);
1356 As shown above, if the next state is also the next case, then the break
1359 A state may also return if there is not enough output space available to
1360 complete that state. Those states are copying stored data, writing a
1361 literal byte, and copying a matching string.
1363 When returning, a "goto inf_leave" is used to update the total counters,
1364 update the check value, and determine whether any progress has been made
1365 during that inflate() call in order to return the proper return code.
1366 Progress is defined as a change in either strm->avail_in or strm->avail_out.
1367 When there is a window, goto inf_leave will update the window with the last
1368 output written. If a goto inf_leave occurs in the middle of decompression
1369 and there is no window currently, goto inf_leave will create one and copy
1370 output to the window for the next call of inflate().
1372 In this implementation, the flush parameter of inflate() only affects the
1373 return code (per zlib.h). inflate() always writes as much as possible to
1374 strm->next_out, given the space available and the provided input--the effect
1375 documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers
1376 the allocation of and copying into a sliding window until necessary, which
1377 provides the effect documented in zlib.h for Z_FINISH when the entire input
1378 stream available. So the only thing the flush parameter actually does is:
1379 when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it
1380 will return Z_BUF_ERROR if it has not reached the end of the stream.
1382 int ZEXPORT inflate(strm, flush)
1386 struct inflate_state FAR *state;
1387 unsigned char FAR *next; /* next input */
1388 unsigned char FAR *put; /* next output */
1389 unsigned have, left; /* available input and output */
1390 unsigned long hold; /* bit buffer */
1391 unsigned bits; /* bits in bit buffer */
1392 unsigned in, out; /* save starting available input and output */
1393 unsigned copy; /* number of stored or match bytes to copy */
1394 unsigned char FAR *from; /* where to copy match bytes from */
1395 code this; /* current decoding table entry */
1396 code last; /* parent table entry */
1397 unsigned len; /* length to copy for repeats, bits to drop */
1398 int ret; /* return code */
1400 unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
1402 static const unsigned short order[19] = /* permutation of code lengths */
1403 {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
1405 if (strm == Z_NULL || strm->state == Z_NULL ||
1406 (strm->next_in == Z_NULL && strm->avail_in != 0))
1407 return Z_STREAM_ERROR;
1409 state = (struct inflate_state FAR *)strm->state;
1410 if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
1416 switch (state->mode) {
1418 if (state->wrap == 0) {
1419 state->mode = TYPEDO;
1424 if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
1425 state->check = crc32(0L, Z_NULL, 0);
1426 CRC2(state->check, hold);
1428 state->mode = FLAGS;
1431 state->flags = 0; /* expect zlib header */
1432 if (state->head != Z_NULL)
1433 state->head->done = -1;
1434 if (!(state->wrap & 1) || /* check if zlib header allowed */
1438 ((BITS(8) << 8) + (hold >> 8)) % 31) {
1439 strm->msg = (char *)"incorrect header check";
1443 if (BITS(4) != Z_DEFLATED) {
1444 strm->msg = (char *)"unknown compression method";
1450 if (len > state->wbits) {
1451 strm->msg = (char *)"invalid window size";
1455 state->dmax = 1U << len;
1456 Tracev((stderr, "inflate: zlib header ok\n"));
1457 strm->adler = state->check = adler32(0L, Z_NULL, 0);
1458 state->mode = hold & 0x200 ? DICTID : TYPE;
1464 state->flags = (int)(hold);
1465 if ((state->flags & 0xff) != Z_DEFLATED) {
1466 strm->msg = (char *)"unknown compression method";
1470 if (state->flags & 0xe000) {
1471 strm->msg = (char *)"unknown header flags set";
1475 if (state->head != Z_NULL)
1476 state->head->text = (int)((hold >> 8) & 1);
1477 if (state->flags & 0x0200) CRC2(state->check, hold);
1482 if (state->head != Z_NULL)
1483 state->head->time = hold;
1484 if (state->flags & 0x0200) CRC4(state->check, hold);
1489 if (state->head != Z_NULL) {
1490 state->head->xflags = (int)(hold & 0xff);
1491 state->head->os = (int)(hold >> 8);
1493 if (state->flags & 0x0200) CRC2(state->check, hold);
1495 state->mode = EXLEN;
1497 if (state->flags & 0x0400) {
1499 state->length = (unsigned)(hold);
1500 if (state->head != Z_NULL)
1501 state->head->extra_len = (unsigned)hold;
1502 if (state->flags & 0x0200) CRC2(state->check, hold);
1505 else if (state->head != Z_NULL)
1506 state->head->extra = Z_NULL;
1507 state->mode = EXTRA;
1509 if (state->flags & 0x0400) {
1510 copy = state->length;
1511 if (copy > have) copy = have;
1513 if (state->head != Z_NULL &&
1514 state->head->extra != Z_NULL) {
1515 len = state->head->extra_len - state->length;
1516 zmemcpy(state->head->extra + len, next,
1517 len + copy > state->head->extra_max ?
1518 state->head->extra_max - len : copy);
1520 if (state->flags & 0x0200)
1521 state->check = crc32(state->check, next, copy);
1524 state->length -= copy;
1526 if (state->length) goto inf_leave;
1531 if (state->flags & 0x0800) {
1532 if (have == 0) goto inf_leave;
1535 len = (unsigned)(next[copy++]);
1536 if (state->head != Z_NULL &&
1537 state->head->name != Z_NULL &&
1538 state->length < state->head->name_max)
1539 state->head->name[state->length++] = len;
1540 } while (len && copy < have);
1541 if (state->flags & 0x0200)
1542 state->check = crc32(state->check, next, copy);
1545 if (len) goto inf_leave;
1547 else if (state->head != Z_NULL)
1548 state->head->name = Z_NULL;
1550 state->mode = COMMENT;
1552 if (state->flags & 0x1000) {
1553 if (have == 0) goto inf_leave;
1556 len = (unsigned)(next[copy++]);
1557 if (state->head != Z_NULL &&
1558 state->head->comment != Z_NULL &&
1559 state->length < state->head->comm_max)
1560 state->head->comment[state->length++] = len;
1561 } while (len && copy < have);
1562 if (state->flags & 0x0200)
1563 state->check = crc32(state->check, next, copy);
1566 if (len) goto inf_leave;
1568 else if (state->head != Z_NULL)
1569 state->head->comment = Z_NULL;
1572 if (state->flags & 0x0200) {
1574 if (hold != (state->check & 0xffff)) {
1575 strm->msg = (char *)"header crc mismatch";
1581 if (state->head != Z_NULL) {
1582 state->head->hcrc = (int)((state->flags >> 9) & 1);
1583 state->head->done = 1;
1585 strm->adler = state->check = crc32(0L, Z_NULL, 0);
1591 strm->adler = state->check = REVERSE(hold);
1595 if (state->havedict == 0) {
1599 strm->adler = state->check = adler32(0L, Z_NULL, 0);
1602 if (flush == Z_BLOCK) goto inf_leave;
1606 state->mode = CHECK;
1610 state->last = BITS(1);
1613 case 0: /* stored block */
1614 Tracev((stderr, "inflate: stored block%s\n",
1615 state->last ? " (last)" : ""));
1616 state->mode = STORED;
1618 case 1: /* fixed block */
1620 Tracev((stderr, "inflate: fixed codes block%s\n",
1621 state->last ? " (last)" : ""));
1622 state->mode = LEN; /* decode codes */
1624 case 2: /* dynamic block */
1625 Tracev((stderr, "inflate: dynamic codes block%s\n",
1626 state->last ? " (last)" : ""));
1627 state->mode = TABLE;
1630 strm->msg = (char *)"invalid block type";
1636 BYTEBITS(); /* go to byte boundary */
1638 if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
1639 strm->msg = (char *)"invalid stored block lengths";
1643 state->length = (unsigned)hold & 0xffff;
1644 Tracev((stderr, "inflate: stored length %u\n",
1649 copy = state->length;
1651 if (copy > have) copy = have;
1652 if (copy > left) copy = left;
1653 if (copy == 0) goto inf_leave;
1654 zmemcpy(put, next, copy);
1659 state->length -= copy;
1662 Tracev((stderr, "inflate: stored end\n"));
1667 state->nlen = BITS(5) + 257;
1669 state->ndist = BITS(5) + 1;
1671 state->ncode = BITS(4) + 4;
1673 #ifndef PKZIP_BUG_WORKAROUND
1674 if (state->nlen > 286 || state->ndist > 30) {
1675 strm->msg = (char *)"too many length or distance symbols";
1680 Tracev((stderr, "inflate: table sizes ok\n"));
1682 state->mode = LENLENS;
1684 while (state->have < state->ncode) {
1686 state->lens[order[state->have++]] = (unsigned short)BITS(3);
1689 while (state->have < 19)
1690 state->lens[order[state->have++]] = 0;
1691 state->next = state->codes;
1692 state->lencode = (code const FAR *)(state->next);
1694 ret = inflate_table(CODES, state->lens, 19, &(state->next),
1695 &(state->lenbits), state->work);
1697 strm->msg = (char *)"invalid code lengths set";
1701 Tracev((stderr, "inflate: code lengths ok\n"));
1703 state->mode = CODELENS;
1705 while (state->have < state->nlen + state->ndist) {
1707 this = state->lencode[BITS(state->lenbits)];
1708 if ((unsigned)(this.bits) <= bits) break;
1711 if (this.val < 16) {
1712 NEEDBITS(this.bits);
1713 DROPBITS(this.bits);
1714 state->lens[state->have++] = this.val;
1717 if (this.val == 16) {
1718 NEEDBITS(this.bits + 2);
1719 DROPBITS(this.bits);
1720 if (state->have == 0) {
1721 strm->msg = (char *)"invalid bit length repeat";
1725 len = state->lens[state->have - 1];
1729 else if (this.val == 17) {
1730 NEEDBITS(this.bits + 3);
1731 DROPBITS(this.bits);
1737 NEEDBITS(this.bits + 7);
1738 DROPBITS(this.bits);
1740 copy = 11 + BITS(7);
1743 if (state->have + copy > state->nlen + state->ndist) {
1744 strm->msg = (char *)"invalid bit length repeat";
1749 state->lens[state->have++] = (unsigned short)len;
1753 /* handle error breaks in while */
1754 if (state->mode == BAD) break;
1756 /* build code tables */
1757 state->next = state->codes;
1758 state->lencode = (code const FAR *)(state->next);
1760 ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
1761 &(state->lenbits), state->work);
1763 strm->msg = (char *)"invalid literal/lengths set";
1767 state->distcode = (code const FAR *)(state->next);
1768 state->distbits = 6;
1769 ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
1770 &(state->next), &(state->distbits), state->work);
1772 strm->msg = (char *)"invalid distances set";
1776 Tracev((stderr, "inflate: codes ok\n"));
1779 if (strm->outcb != Z_NULL) /* for watchdog (U-Boot) */
1780 (*strm->outcb)(Z_NULL, 0);
1781 if (have >= 6 && left >= 258) {
1783 inflate_fast(strm, out);
1788 this = state->lencode[BITS(state->lenbits)];
1789 if ((unsigned)(this.bits) <= bits) break;
1792 if (this.op && (this.op & 0xf0) == 0) {
1795 this = state->lencode[last.val +
1796 (BITS(last.bits + last.op) >> last.bits)];
1797 if ((unsigned)(last.bits + this.bits) <= bits) break;
1800 DROPBITS(last.bits);
1802 DROPBITS(this.bits);
1803 state->length = (unsigned)this.val;
1804 if ((int)(this.op) == 0) {
1805 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
1806 "inflate: literal '%c'\n" :
1807 "inflate: literal 0x%02x\n", this.val));
1812 Tracevv((stderr, "inflate: end of block\n"));
1817 strm->msg = (char *)"invalid literal/length code";
1821 state->extra = (unsigned)(this.op) & 15;
1822 state->mode = LENEXT;
1825 NEEDBITS(state->extra);
1826 state->length += BITS(state->extra);
1827 DROPBITS(state->extra);
1829 Tracevv((stderr, "inflate: length %u\n", state->length));
1833 this = state->distcode[BITS(state->distbits)];
1834 if ((unsigned)(this.bits) <= bits) break;
1837 if ((this.op & 0xf0) == 0) {
1840 this = state->distcode[last.val +
1841 (BITS(last.bits + last.op) >> last.bits)];
1842 if ((unsigned)(last.bits + this.bits) <= bits) break;
1845 DROPBITS(last.bits);
1847 DROPBITS(this.bits);
1849 strm->msg = (char *)"invalid distance code";
1853 state->offset = (unsigned)this.val;
1854 state->extra = (unsigned)(this.op) & 15;
1855 state->mode = DISTEXT;
1858 NEEDBITS(state->extra);
1859 state->offset += BITS(state->extra);
1860 DROPBITS(state->extra);
1862 #ifdef INFLATE_STRICT
1863 if (state->offset > state->dmax) {
1864 strm->msg = (char *)"invalid distance too far back";
1869 if (state->offset > state->whave + out - left) {
1870 strm->msg = (char *)"invalid distance too far back";
1874 Tracevv((stderr, "inflate: distance %u\n", state->offset));
1875 state->mode = MATCH;
1877 if (left == 0) goto inf_leave;
1879 if (state->offset > copy) { /* copy from window */
1880 copy = state->offset - copy;
1881 if (copy > state->write) {
1882 copy -= state->write;
1883 from = state->window + (state->wsize - copy);
1886 from = state->window + (state->write - copy);
1887 if (copy > state->length) copy = state->length;
1889 else { /* copy from output */
1890 from = put - state->offset;
1891 copy = state->length;
1893 if (copy > left) copy = left;
1895 state->length -= copy;
1899 if (state->length == 0) state->mode = LEN;
1902 if (left == 0) goto inf_leave;
1903 *put++ = (unsigned char)(state->length);
1911 strm->total_out += out;
1912 state->total += out;
1914 strm->adler = state->check =
1915 UPDATE(state->check, put - out, out);
1919 state->flags ? hold :
1921 REVERSE(hold)) != state->check) {
1922 strm->msg = (char *)"incorrect data check";
1927 Tracev((stderr, "inflate: check matches trailer\n"));
1930 state->mode = LENGTH;
1932 if (state->wrap && state->flags) {
1934 if (hold != (state->total & 0xffffffffUL)) {
1935 strm->msg = (char *)"incorrect length check";
1940 Tracev((stderr, "inflate: length matches trailer\n"));
1954 return Z_STREAM_ERROR;
1958 Return from inflate(), updating the total counts and the check value.
1959 If there was no progress during the inflate() call, return a buffer
1960 error. Call updatewindow() to create and/or update the window state.
1961 Note: a memory error from inflate() is non-recoverable.
1965 if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
1966 if (updatewindow(strm, out)) {
1970 in -= strm->avail_in;
1971 out -= strm->avail_out;
1972 strm->total_in += in;
1973 strm->total_out += out;
1974 state->total += out;
1975 if (state->wrap && out)
1976 strm->adler = state->check =
1977 UPDATE(state->check, strm->next_out - out, out);
1978 strm->data_type = state->bits + (state->last ? 64 : 0) +
1979 (state->mode == TYPE ? 128 : 0);
1980 if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1985 int ZEXPORT inflateEnd(strm)
1988 struct inflate_state FAR *state;
1989 if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
1990 return Z_STREAM_ERROR;
1991 state = (struct inflate_state FAR *)strm->state;
1992 if (state->window != Z_NULL) {
1993 if (strm->outcb != Z_NULL)
1994 (*strm->outcb)(Z_NULL, 0);
1995 ZFREE(strm, state->window);
1997 ZFREE(strm, strm->state);
1998 strm->state = Z_NULL;
1999 Tracev((stderr, "inflate: end\n"));
2004 /* zutil.c -- target dependent utility functions for the compression library
2005 * Copyright (C) 1995-2005 Jean-loup Gailly.
2006 * For conditions of distribution and use, see copyright notice in zlib.h
2011 #ifndef NO_DUMMY_DECL
2012 struct internal_state {int dummy;}; /* for buggy compilers */
2015 const char * const z_errmsg[10] = {
2016 "need dictionary", /* Z_NEED_DICT 2 */
2017 "stream end", /* Z_STREAM_END 1 */
2019 "file error", /* Z_ERRNO (-1) */
2020 "stream error", /* Z_STREAM_ERROR (-2) */
2021 "data error", /* Z_DATA_ERROR (-3) */
2022 "insufficient memory", /* Z_MEM_ERROR (-4) */
2023 "buffer error", /* Z_BUF_ERROR (-5) */
2024 "incompatible version",/* Z_VERSION_ERROR (-6) */
2032 int z_verbose = verbose;
2037 fprintf(stderr, "%s\n", m);
2042 /* exported to allow conversion of error code to string for compress() and
2045 #ifndef MY_ZCALLOC /* Any system without a special alloc function */
2048 extern voidp malloc OF((uInt size));
2049 extern voidp calloc OF((uInt items, uInt size));
2050 extern void free OF((voidpf ptr));
2053 voidpf zcalloc (opaque, items, size)
2059 items += size - size; /* make compiler happy */
2060 return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
2061 (voidpf)calloc(items, size);
2064 void zcfree (opaque, ptr, nb)
2071 return; /* make compiler happy */
2074 #endif /* MY_ZCALLOC */
2076 /* adler32.c -- compute the Adler-32 checksum of a data stream
2077 * Copyright (C) 1995-2004 Mark Adler
2078 * For conditions of distribution and use, see copyright notice in zlib.h
2083 #define BASE 65521UL /* largest prime smaller than 65536 */
2085 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
2087 #define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
2088 #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
2089 #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
2090 #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
2091 #define DO16(buf) DO8(buf,0); DO8(buf,8);
2093 /* use NO_DIVIDE if your processor does not do division in hardware */
2097 if (a >= (BASE << 16)) \
2098 a -= (BASE << 16); \
2099 if (a >= (BASE << 15)) \
2100 a -= (BASE << 15); \
2101 if (a >= (BASE << 14)) \
2102 a -= (BASE << 14); \
2103 if (a >= (BASE << 13)) \
2104 a -= (BASE << 13); \
2105 if (a >= (BASE << 12)) \
2106 a -= (BASE << 12); \
2107 if (a >= (BASE << 11)) \
2108 a -= (BASE << 11); \
2109 if (a >= (BASE << 10)) \
2110 a -= (BASE << 10); \
2111 if (a >= (BASE << 9)) \
2113 if (a >= (BASE << 8)) \
2115 if (a >= (BASE << 7)) \
2117 if (a >= (BASE << 6)) \
2119 if (a >= (BASE << 5)) \
2121 if (a >= (BASE << 4)) \
2123 if (a >= (BASE << 3)) \
2125 if (a >= (BASE << 2)) \
2127 if (a >= (BASE << 1)) \
2134 if (a >= (BASE << 4)) \
2136 if (a >= (BASE << 3)) \
2138 if (a >= (BASE << 2)) \
2140 if (a >= (BASE << 1)) \
2146 #define MOD(a) a %= BASE
2147 #define MOD4(a) a %= BASE
2150 /* ========================================================================= */
2151 uLong ZEXPORT adler32(adler, buf, len)
2159 /* split Adler-32 into component sums */
2160 sum2 = (adler >> 16) & 0xffff;
2163 /* in case user likes doing a byte at a time, keep it fast */
2171 return adler | (sum2 << 16);
2174 /* initial Adler-32 value (deferred check for len == 1 speed) */
2178 /* in case short lengths are provided, keep it somewhat fast */
2186 MOD4(sum2); /* only added so many BASE's */
2187 return adler | (sum2 << 16);
2190 /* do length NMAX blocks -- requires just one modulo operation */
2191 while (len >= NMAX) {
2193 n = NMAX / 16; /* NMAX is divisible by 16 */
2195 DO16(buf); /* 16 sums unrolled */
2202 /* do remaining bytes (less than NMAX, still just one modulo) */
2203 if (len) { /* avoid modulos if none remaining */
2217 /* return recombined sums */
2218 return adler | (sum2 << 16);