| Bsoft 1.9 Bernard's software package

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

infback.c
Go to the documentation of this file.
1 /* infback.c -- inflate using a call-back interface
2 * Copyright (C) 1995-2009 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 This code is largely copied from inflate.c. Normally either infback.o or
8 inflate.o would be linked into an application--not both. The interface
9 with inffast.c is retained so that optimized assembler-coded versions of
10 inflate_fast() can be used with either inflate.c or infback.c.
11 */
12
13 #include "zutil.h"
14 #include "inftrees.h"
15 #include "inflate.h"
16 #include "inffast.h"
17
18 /* function prototypes */
19 local void fixedtables OF((struct inflate_state FAR *state));
20
21 /*
22 strm provides memory allocation functions in zalloc and zfree, or
23 Z_NULL to use the library memory allocation functions.
24
25 windowBits is in the range 8..15, and window is a user-supplied
26 window and output buffer that is 2**windowBits bytes.
27 */
28 int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
29 z_streamp strm;
30 int windowBits;
31 unsigned char FAR *window;
32 const char *version;
33 int stream_size;
34 {
35 struct inflate_state FAR *state;
36
37 if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
38 stream_size != (int)(sizeof(z_stream)))
39 return Z_VERSION_ERROR;
40 if (strm == Z_NULL || window == Z_NULL ||
41 windowBits < 8 || windowBits > 15)
42 return Z_STREAM_ERROR;
43 strm->msg = Z_NULL; /* in case we return an error */
44 if (strm->zalloc == (alloc_func)0) {
45 strm->zalloc = zcalloc;
46 strm->opaque = (voidpf)0;
47 }
48 if (strm->zfree == (free_func)0) strm->zfree = zcfree;
49 state = (struct inflate_state FAR *)ZALLOC(strm, 1,
50 sizeof(struct inflate_state));
51 if (state == Z_NULL) return Z_MEM_ERROR;
52 Tracev((stderr, "inflate: allocated\n"));
53 strm->state = (struct internal_state FAR *)state;
54 state->dmax = 32768U;
55 state->wbits = windowBits;
56 state->wsize = 1U << windowBits;
57 state->window = window;
58 state->wnext = 0;
59 state->whave = 0;
60 return Z_OK;
61 }
62
63 /*
64 Return state with length and distance decoding tables and index sizes set to
65 fixed code decoding. Normally this returns fixed tables from inffixed.h.
66 If BUILDFIXED is defined, then instead this routine builds the tables the
67 first time it's called, and returns those tables the first time and
68 thereafter. This reduces the size of the code by about 2K bytes, in
69 exchange for a little execution time. However, BUILDFIXED should not be
70 used for threaded applications, since the rewriting of the tables and virgin
71 may not be thread-safe.
72 */
73 local void fixedtables(state)
74 struct inflate_state FAR *state;
75 {
76 #ifdef BUILDFIXED
77 static int virgin = 1;
78 static code *lenfix, *distfix;
79 static code fixed[544];
80
81 /* build fixed huffman tables if first call (may not be thread safe) */
82 if (virgin) {
83 unsigned sym, bits;
84 static code *next;
85
86 /* literal/length table */
87 sym = 0;
88 while (sym < 144) state->lens[sym++] = 8;
89 while (sym < 256) state->lens[sym++] = 9;
90 while (sym < 280) state->lens[sym++] = 7;
91 while (sym < 288) state->lens[sym++] = 8;
92 next = fixed;
93 lenfix = next;
94 bits = 9;
95 inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
96
97 /* distance table */
98 sym = 0;
99 while (sym < 32) state->lens[sym++] = 5;
100 distfix = next;
101 bits = 5;
102 inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
103
104 /* do this just once */
105 virgin = 0;
106 }
107 #else /* !BUILDFIXED */
108 # include "inffixed.h"
109 #endif /* BUILDFIXED */
110 state->lencode = lenfix;
111 state->lenbits = 9;
112 state->distcode = distfix;
113 state->distbits = 5;
114 }
115
116 /* Macros for inflateBack(): */
117
118 /* Load returned state from inflate_fast() */
119 #define LOAD() \
120 do { \
121 put = strm->next_out; \
122 left = strm->avail_out; \
123 next = strm->next_in; \
124 have = strm->avail_in; \
125 hold = state->hold; \
126 bits = state->bits; \
127 } while (0)
128
129 /* Set state from registers for inflate_fast() */
130 #define RESTORE() \
131 do { \
132 strm->next_out = put; \
133 strm->avail_out = left; \
134 strm->next_in = next; \
135 strm->avail_in = have; \
136 state->hold = hold; \
137 state->bits = bits; \
138 } while (0)
139
140 /* Clear the input bit accumulator */
141 #define INITBITS() \
142 do { \
143 hold = 0; \
144 bits = 0; \
145 } while (0)
146
147 /* Assure that some input is available. If input is requested, but denied,
148 then return a Z_BUF_ERROR from inflateBack(). */
149 #define PULL() \
150 do { \
151 if (have == 0) { \
152 have = in(in_desc, &next); \
153 if (have == 0) { \
154 next = Z_NULL; \
155 ret = Z_BUF_ERROR; \
156 goto inf_leave; \
157 } \
158 } \
159 } while (0)
160
161 /* Get a byte of input into the bit accumulator, or return from inflateBack()
162 with an error if there is no input available. */
163 #define PULLBYTE() \
164 do { \
165 PULL(); \
166 have--; \
167 hold += (unsigned long)(*next++) << bits; \
168 bits += 8; \
169 } while (0)
170
171 /* Assure that there are at least n bits in the bit accumulator. If there is
172 not enough available input to do that, then return from inflateBack() with
173 an error. */
174 #define NEEDBITS(n) \
175 do { \
176 while (bits < (unsigned)(n)) \
177 PULLBYTE(); \
178 } while (0)
179
180 /* Return the low n bits of the bit accumulator (n < 16) */
181 #define BITS(n) \
182 ((unsigned)hold & ((1U << (n)) - 1))
183
184 /* Remove n bits from the bit accumulator */
185 #define DROPBITS(n) \
186 do { \
187 hold >>= (n); \
188 bits -= (unsigned)(n); \
189 } while (0)
190
191 /* Remove zero to seven bits as needed to go to a byte boundary */
192 #define BYTEBITS() \
193 do { \
194 hold >>= bits & 7; \
195 bits -= bits & 7; \
196 } while (0)
197
198 /* Assure that some output space is available, by writing out the window
199 if it's full. If the write fails, return from inflateBack() with a
200 Z_BUF_ERROR. */
201 #define ROOM() \
202 do { \
203 if (left == 0) { \
204 put = state->window; \
205 left = state->wsize; \
206 state->whave = left; \
207 if (out(out_desc, put, left)) { \
208 ret = Z_BUF_ERROR; \
209 goto inf_leave; \
210 } \
211 } \
212 } while (0)
213
214 /*
215 strm provides the memory allocation functions and window buffer on input,
216 and provides information on the unused input on return. For Z_DATA_ERROR
217 returns, strm will also provide an error message.
218
219 in() and out() are the call-back input and output functions. When
220 inflateBack() needs more input, it calls in(). When inflateBack() has
221 filled the window with output, or when it completes with data in the
222 window, it calls out() to write out the data. The application must not
223 change the provided input until in() is called again or inflateBack()
224 returns. The application must not change the window/output buffer until
225 inflateBack() returns.
226
227 in() and out() are called with a descriptor parameter provided in the
228 inflateBack() call. This parameter can be a structure that provides the
229 information required to do the read or write, as well as accumulated
230 information on the input and output such as totals and check values.
231
232 in() should return zero on failure. out() should return non-zero on
233 failure. If either in() or out() fails, than inflateBack() returns a
234 Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it
235 was in() or out() that caused in the error. Otherwise, inflateBack()
236 returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
237 error, or Z_MEM_ERROR if it could not allocate memory for the state.
238 inflateBack() can also return Z_STREAM_ERROR if the input parameters
239 are not correct, i.e. strm is Z_NULL or the state was not initialized.
240 */
241 int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
242 z_streamp strm;
243 in_func in;
244 void FAR *in_desc;
245 out_func out;
246 void FAR *out_desc;
247 {
248 struct inflate_state FAR *state;
249 unsigned char FAR *next; /* next input */
250 unsigned char FAR *put; /* next output */
251 unsigned have, left; /* available input and output */
252 unsigned long hold; /* bit buffer */
253 unsigned bits; /* bits in bit buffer */
254 unsigned copy; /* number of stored or match bytes to copy */
255 unsigned char FAR *from; /* where to copy match bytes from */
256 code here; /* current decoding table entry */
257 code last; /* parent table entry */
258 unsigned len; /* length to copy for repeats, bits to drop */
259 int ret; /* return code */
260 static const unsigned short order[19] = /* permutation of code lengths */
261 {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
262
263 /* Check that the strm exists and that the state was initialized */
264 if (strm == Z_NULL || strm->state == Z_NULL)
265 return Z_STREAM_ERROR;
266 state = (struct inflate_state FAR *)strm->state;
267
268 /* Reset the state */
269 strm->msg = Z_NULL;
270 state->mode = TYPE;
271 state->last = 0;
272 state->whave = 0;
273 next = strm->next_in;
274 have = next != Z_NULL ? strm->avail_in : 0;
275 hold = 0;
276 bits = 0;
277 put = state->window;
278 left = state->wsize;
279
280 /* Inflate until end of block marked as last */
281 for (;;)
282 switch (state->mode) {
283 case TYPE:
284 /* determine and dispatch block type */
285 if (state->last) {
286 BYTEBITS();
287 state->mode = DONE;
288 break;
289 }
290 NEEDBITS(3);
291 state->last = BITS(1);
292 DROPBITS(1);
293 switch (BITS(2)) {
294 case 0: /* stored block */
295 Tracev((stderr, "inflate: stored block%s\n",
296 state->last ? " (last)" : ""));
297 state->mode = STORED;
298 break;
299 case 1: /* fixed block */
300 fixedtables(state);
301 Tracev((stderr, "inflate: fixed codes block%s\n",
302 state->last ? " (last)" : ""));
303 state->mode = LEN; /* decode codes */
304 break;
305 case 2: /* dynamic block */
306 Tracev((stderr, "inflate: dynamic codes block%s\n",
307 state->last ? " (last)" : ""));
308 state->mode = TABLE;
309 break;
310 case 3:
311 strm->msg = (char *)"invalid block type";
312 state->mode = BAD;
313 }
314 DROPBITS(2);
315 break;
316
317 case STORED:
318 /* get and verify stored block length */
319 BYTEBITS(); /* go to byte boundary */
320 NEEDBITS(32);
321 if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
322 strm->msg = (char *)"invalid stored block lengths";
323 state->mode = BAD;
324 break;
325 }
326 state->length = (unsigned)hold & 0xffff;
327 Tracev((stderr, "inflate: stored length %u\n",
328 state->length));
329 INITBITS();
330
331 /* copy stored block from input to output */
332 while (state->length != 0) {
333 copy = state->length;
334 PULL();
335 ROOM();
336 if (copy > have) copy = have;
337 if (copy > left) copy = left;
338 zmemcpy(put, next, copy);
339 have -= copy;
340 next += copy;
341 left -= copy;
342 put += copy;
343 state->length -= copy;
344 }
345 Tracev((stderr, "inflate: stored end\n"));
346 state->mode = TYPE;
347 break;
348
349 case TABLE:
350 /* get dynamic table entries descriptor */
351 NEEDBITS(14);
352 state->nlen = BITS(5) + 257;
353 DROPBITS(5);
354 state->ndist = BITS(5) + 1;
355 DROPBITS(5);
356 state->ncode = BITS(4) + 4;
357 DROPBITS(4);
358 #ifndef PKZIP_BUG_WORKAROUND
359 if (state->nlen > 286 || state->ndist > 30) {
360 strm->msg = (char *)"too many length or distance symbols";
361 state->mode = BAD;
362 break;
363 }
364 #endif
365 Tracev((stderr, "inflate: table sizes ok\n"));
366
367 /* get code length code lengths (not a typo) */
368 state->have = 0;
369 while (state->have < state->ncode) {
370 NEEDBITS(3);
371 state->lens[order[state->have++]] = (unsigned short)BITS(3);
372 DROPBITS(3);
373 }
374 while (state->have < 19)
375 state->lens[order[state->have++]] = 0;
376 state->next = state->codes;
377 state->lencode = (code const FAR *)(state->next);
378 state->lenbits = 7;
379 ret = inflate_table(CODES, state->lens, 19, &(state->next),
380 &(state->lenbits), state->work);
381 if (ret) {
382 strm->msg = (char *)"invalid code lengths set";
383 state->mode = BAD;
384 break;
385 }
386 Tracev((stderr, "inflate: code lengths ok\n"));
387
388 /* get length and distance code code lengths */
389 state->have = 0;
390 while (state->have < state->nlen + state->ndist) {
391 for (;;) {
392 here = state->lencode[BITS(state->lenbits)];
393 if ((unsigned)(here.bits) <= bits) break;
394 PULLBYTE();
395 }
396 if (here.val < 16) {
397 NEEDBITS(here.bits);
398 DROPBITS(here.bits);
399 state->lens[state->have++] = here.val;
400 }
401 else {
402 if (here.val == 16) {
403 NEEDBITS(here.bits + 2);
404 DROPBITS(here.bits);
405 if (state->have == 0) {
406 strm->msg = (char *)"invalid bit length repeat";
407 state->mode = BAD;
408 break;
409 }
410 len = (unsigned)(state->lens[state->have - 1]);
411 copy = 3 + BITS(2);
412 DROPBITS(2);
413 }
414 else if (here.val == 17) {
415 NEEDBITS(here.bits + 3);
416 DROPBITS(here.bits);
417 len = 0;
418 copy = 3 + BITS(3);
419 DROPBITS(3);
420 }
421 else {
422 NEEDBITS(here.bits + 7);
423 DROPBITS(here.bits);
424 len = 0;
425 copy = 11 + BITS(7);
426 DROPBITS(7);
427 }
428 if (state->have + copy > state->nlen + state->ndist) {
429 strm->msg = (char *)"invalid bit length repeat";
430 state->mode = BAD;
431 break;
432 }
433 while (copy--)
434 state->lens[state->have++] = (unsigned short)len;
435 }
436 }
437
438 /* handle error breaks in while */
439 if (state->mode == BAD) break;
440
441 /* check for end-of-block code (better have one) */
442 if (state->lens[256] == 0) {
443 strm->msg = (char *)"invalid code -- missing end-of-block";
444 state->mode = BAD;
445 break;
446 }
447
448 /* build code tables -- note: do not change the lenbits or distbits
449 values here (9 and 6) without reading the comments in inftrees.h
450 concerning the ENOUGH constants, which depend on those values */
451 state->next = state->codes;
452 state->lencode = (code const FAR *)(state->next);
453 state->lenbits = 9;
454 ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
455 &(state->lenbits), state->work);
456 if (ret) {
457 strm->msg = (char *)"invalid literal/lengths set";
458 state->mode = BAD;
459 break;
460 }
461 state->distcode = (code const FAR *)(state->next);
462 state->distbits = 6;
463 ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
464 &(state->next), &(state->distbits), state->work);
465 if (ret) {
466 strm->msg = (char *)"invalid distances set";
467 state->mode = BAD;
468 break;
469 }
470 Tracev((stderr, "inflate: codes ok\n"));
471 state->mode = LEN;
472
473 case LEN:
474 /* use inflate_fast() if we have enough input and output */
475 if (have >= 6 && left >= 258) {
476 RESTORE();
477 if (state->whave < state->wsize)
478 state->whave = state->wsize - left;
479 inflate_fast(strm, state->wsize);
480 LOAD();
481 break;
482 }
483
484 /* get a literal, length, or end-of-block code */
485 for (;;) {
486 here = state->lencode[BITS(state->lenbits)];
487 if ((unsigned)(here.bits) <= bits) break;
488 PULLBYTE();
489 }
490 if (here.op && (here.op & 0xf0) == 0) {
491 last = here;
492 for (;;) {
493 here = state->lencode[last.val +
494 (BITS(last.bits + last.op) >> last.bits)];
495 if ((unsigned)(last.bits + here.bits) <= bits) break;
496 PULLBYTE();
497 }
498 DROPBITS(last.bits);
499 }
500 DROPBITS(here.bits);
501 state->length = (unsigned)here.val;
502
503 /* process literal */
504 if (here.op == 0) {
505 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
506 "inflate: literal '%c'\n" :
507 "inflate: literal 0x%02x\n", here.val));
508 ROOM();
509 *put++ = (unsigned char)(state->length);
510 left--;
511 state->mode = LEN;
512 break;
513 }
514
515 /* process end of block */
516 if (here.op & 32) {
517 Tracevv((stderr, "inflate: end of block\n"));
518 state->mode = TYPE;
519 break;
520 }
521
522 /* invalid code */
523 if (here.op & 64) {
524 strm->msg = (char *)"invalid literal/length code";
525 state->mode = BAD;
526 break;
527 }
528
529 /* length code -- get extra bits, if any */
530 state->extra = (unsigned)(here.op) & 15;
531 if (state->extra != 0) {
532 NEEDBITS(state->extra);
533 state->length += BITS(state->extra);
534 DROPBITS(state->extra);
535 }
536 Tracevv((stderr, "inflate: length %u\n", state->length));
537
538 /* get distance code */
539 for (;;) {
540 here = state->distcode[BITS(state->distbits)];
541 if ((unsigned)(here.bits) <= bits) break;
542 PULLBYTE();
543 }
544 if ((here.op & 0xf0) == 0) {
545 last = here;
546 for (;;) {
547 here = state->distcode[last.val +
548 (BITS(last.bits + last.op) >> last.bits)];
549 if ((unsigned)(last.bits + here.bits) <= bits) break;
550 PULLBYTE();
551 }
552 DROPBITS(last.bits);
553 }
554 DROPBITS(here.bits);
555 if (here.op & 64) {
556 strm->msg = (char *)"invalid distance code";
557 state->mode = BAD;
558 break;
559 }
560 state->offset = (unsigned)here.val;
561
562 /* get distance extra bits, if any */
563 state->extra = (unsigned)(here.op) & 15;
564 if (state->extra != 0) {
565 NEEDBITS(state->extra);
566 state->offset += BITS(state->extra);
567 DROPBITS(state->extra);
568 }
569 if (state->offset > state->wsize - (state->whave < state->wsize ?
570 left : 0)) {
571 strm->msg = (char *)"invalid distance too far back";
572 state->mode = BAD;
573 break;
574 }
575 Tracevv((stderr, "inflate: distance %u\n", state->offset));
576
577 /* copy match from window to output */
578 do {
579 ROOM();
580 copy = state->wsize - state->offset;
581 if (copy < left) {
582 from = put + copy;
583 copy = left - copy;
584 }
585 else {
586 from = put - state->offset;
587 copy = left;
588 }
589 if (copy > state->length) copy = state->length;
590 state->length -= copy;
591 left -= copy;
592 do {
593 *put++ = *from++;
594 } while (--copy);
595 } while (state->length != 0);
596 break;
597
598 case DONE:
599 /* inflate stream terminated properly -- write leftover output */
600 ret = Z_STREAM_END;
601 if (left < state->wsize) {
602 if (out(out_desc, state->window, state->wsize - left))
603 ret = Z_BUF_ERROR;
604 }
605 goto inf_leave;
606
607 case BAD:
608 ret = Z_DATA_ERROR;
609 goto inf_leave;
610
611 default: /* can't happen, but makes compilers happy */
612 ret = Z_STREAM_ERROR;
613 goto inf_leave;
614 }
615
616 /* Return unused input */
617 inf_leave:
618 strm->next_in = next;
619 strm->avail_in = have;
620 return ret;
621 }
622
623 int ZEXPORT inflateBackEnd(strm)
624 z_streamp strm;
625 {
626 if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
627 return Z_STREAM_ERROR;
628 ZFREE(strm, strm->state);
629 strm->state = Z_NULL;
630 Tracev((stderr, "inflate: end\n"));
631 return Z_OK;
632 }
inflate_state::nlen
unsigned nlen
Definition: inflate.h:112
code::val
unsigned short val
Definition: inftrees.h:27
voidpf
Byte FAR * voidpf
Definition: zconf.h:355
inflate_state
Definition: inflate.h:81
internal_state::window
Bytef * window
Definition: deflate.h:113
STORED
Definition: inflate.h:34
inflate_state::wnext
unsigned wnext
Definition: inflate.h:95
inflate_state::ndist
unsigned ndist
Definition: inflate.h:113
DROPBITS
#define DROPBITS(n)
Definition: infback.c:185
inflateBack
int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc)
Definition: infback.c:241
inflate_state::wsize
unsigned wsize
Definition: inflate.h:93
inflate_state::have
unsigned have
Definition: inflate.h:114
inflate_state::distbits
unsigned distbits
Definition: inflate.h:109
version
int version
Definition: jpeglib.h:901
inflate_state::extra
unsigned extra
Definition: inflate.h:104
DISTS
Definition: inftrees.h:57
inflate_state::distcode
code const FAR * distcode
Definition: inflate.h:107
inflate_state::last
int last
Definition: inflate.h:83
inflate.h
Tracev
#define Tracev(x)
Definition: zutil.h:258
DONE
Definition: inflate.h:49
code::op
unsigned char op
Definition: inftrees.h:25
TYPE
Definition: inflate.h:32
Z_STREAM_ERROR
#define Z_STREAM_ERROR
Definition: zlib.h:177
LOAD
#define LOAD()
Definition: infback.c:119
inflate_state::lenbits
unsigned lenbits
Definition: inflate.h:108
inflate_state::lens
unsigned short lens[320]
Definition: inflate.h:116
inflateBackInit_
int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)
Definition: infback.c:28
INITBITS
#define INITBITS()
Definition: infback.c:141
PULLBYTE
#define PULLBYTE()
Definition: infback.c:163
LEN
Definition: inflate.h:41
NEEDBITS
#define NEEDBITS(n)
Definition: infback.c:174
inflate_state::ncode
unsigned ncode
Definition: inflate.h:111
TABLE
Definition: inflate.h:37
ZALLOC
#define ZALLOC(strm, items, size)
Definition: zutil.h:269
inflate_fast
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start)
Definition: inffast.c:67
inflate_table
int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, unsigned codes, code FAR *FAR *table, unsigned FAR *bits, unsigned short FAR *work)
Definition: inftrees.c:32
inflate_state::next
code FAR * next
Definition: inflate.h:115
internal_state::strm
z_streamp strm
Definition: deflate.h:95
OF
local void fixedtables OF((struct inflate_state FAR *state))
inflate_state::codes
code codes[ENOUGH]
Definition: inflate.h:118
inflate_state::hold
unsigned long hold
Definition: inflate.h:98
CODES
Definition: inftrees.h:55
Z_DATA_ERROR
#define Z_DATA_ERROR
Definition: zlib.h:178
ROOM
#define ROOM()
Definition: infback.c:201
ZFREE
#define ZFREE(strm, addr)
Definition: zutil.h:271
bits
unsigned int bits
Definition: tif_acorn.c:68
Z_STREAM_END
#define Z_STREAM_END
Definition: zlib.h:174
local
#define local
Definition: adler32.c:10
FAR
#define FAR
Definition: jmorecfg.h:215
inflateBackEnd
int ZEXPORT inflateBackEnd(z_streamp strm)
Definition: infback.c:623
inflate_state::work
unsigned short work[288]
Definition: inflate.h:117
zmemcpy
void ZLIB_INTERNAL zmemcpy(Bytef *dest, const Bytef *source, uInt len)
Definition: zutil.c:149
Z_MEM_ERROR
#define Z_MEM_ERROR
Definition: zlib.h:179
code::bits
unsigned char bits
Definition: inftrees.h:26
RESTORE
#define RESTORE()
Definition: infback.c:130
inffast.h
BITS
#define BITS(n)
Definition: infback.c:181
ZLIB_VERSION
#define ZLIB_VERSION
Definition: zlib.h:40
code
Definition: inftrees.h:24
inflate_state::dmax
unsigned dmax
Definition: inflate.h:87
Z_VERSION_ERROR
#define Z_VERSION_ERROR
Definition: zlib.h:181
internal_state
Definition: deflate.h:94
fixedtables
local void fixedtables(struct inflate_state FAR *state)
Definition: infback.c:73
Z_BUF_ERROR
#define Z_BUF_ERROR
Definition: zlib.h:180
inflate_state::window
unsigned char FAR * window
Definition: inflate.h:96
inflate_state::mode
inflate_mode mode
Definition: inflate.h:82
Z_OK
#define Z_OK
Definition: zlib.h:173
LENS
Definition: inftrees.h:56
BAD
Definition: inflate.h:50
PULL
#define PULL()
Definition: infback.c:149
inftrees.h
Z_NULL
#define Z_NULL
Definition: zlib.h:208
zutil.h
inflate_state::whave
unsigned whave
Definition: inflate.h:94
const
#define const
Definition: zconf.h:196
inflate_state::offset
unsigned offset
Definition: inflate.h:102
z_streamp
z_stream FAR * z_streamp
Definition: zlib.h:106
ZEXPORT
#define ZEXPORT
Definition: zconf.h:322
zcalloc
voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size)
Definition: zutil.c:300
BYTEBITS
#define BYTEBITS()
Definition: infback.c:192
inflate_state::lencode
code const FAR * lencode
Definition: inflate.h:106
inflate_state::wbits
unsigned wbits
Definition: inflate.h:92
z_stream_s
Definition: zlib.h:85
Tracevv
#define Tracevv(x)
Definition: zutil.h:259
zcfree
void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr)
Definition: zutil.c:310
inflate_state::length
unsigned length
Definition: inflate.h:101
inffixed.h