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