zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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  */
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 
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 }
Definition: infutil.h:17
Definition: infutil.h:16
unsigned nlen
Definition: inflate.h:112
unsigned short val
Definition: inftrees.h:27
GLint left
Definition: glew.h:7291
unsigned wnext
Definition: inflate.h:95
unsigned ndist
Definition: inflate.h:113
#define Z_STREAM_ERROR
Definition: zlib.h:136
#define DROPBITS(n)
Definition: infback.c:185
static const code lenfix[512]
Definition: inffixed.h:10
#define ZLIB_VERSION
Definition: zlib.h:40
int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc)
Definition: infback.c:241
unsigned wsize
Definition: inflate.h:93
unsigned have
Definition: inflate.h:114
void zmemcpy(Bytef *dest, const Bytef *source, uInt len)
Definition: zutil.c:17
unsigned distbits
Definition: inflate.h:109
#define local
Definition: zutil.h:30
SDL_Keycode sym
Definition: SDL_pspevents.c:51
#define Tracevv(x)
Definition: zutil.h:199
unsigned extra
Definition: inflate.h:104
code const FAR * distcode
Definition: inflate.h:107
#define Z_DATA_ERROR
Definition: zlib.h:137
GLuint in
Definition: glew.h:10672
int const char * version
Definition: zlib.h:813
#define ZEXPORT(x)
Definition: zconf.h:202
void zcfree(voidpf opaque, voidpf ptr)
Definition: zutil.c:173
unsigned char op
Definition: inftrees.h:25
Byte FAR * voidpf
Definition: zconf.h:239
GLenum GLsizei len
Definition: glew.h:7035
#define bits
Definition: infblock.c:15
#define LOAD()
Definition: infback.c:119
unsigned lenbits
Definition: inflate.h:108
if(!yyg->yy_init)
unsigned short lens[320]
Definition: inflate.h:116
int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)
Definition: infback.c:28
#define Tracev(x)
Definition: zutil.h:198
#define INITBITS()
Definition: infback.c:141
#define PULLBYTE()
Definition: infback.c:163
#define Z_BUF_ERROR
Definition: zlib.h:139
#define NEEDBITS(n)
Definition: infback.c:174
#define Z_NULL
Definition: zlib.h:164
unsigned ncode
Definition: inflate.h:111
ret
Definition: glew_str_glx.c:2
int const char int stream_size
Definition: zlib.h:813
#define Z_OK
Definition: zlib.h:132
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start)
Definition: inffast.c:67
Definition: infcodes.c:18
code FAR * next
Definition: inflate.h:115
#define ZFREE(strm, addr)
Definition: zutil.h:212
code codes[ENOUGH]
Definition: inflate.h:118
Definition: infutil.h:21
for(;;)
unsigned long hold
Definition: inflate.h:98
#define ZALLOC(strm, items, size)
Definition: zutil.h:210
#define ROOM()
Definition: infback.c:201
int ZEXPORT inflateBackEnd(z_streamp strm)
Definition: infback.c:623
#define FAR
Definition: zconf.h:215
unsigned short work[288]
Definition: inflate.h:117
#define BAD
Definition: inflate.c:10
int windowBits
Definition: zlib.h:813
unsigned char bits
Definition: inftrees.h:26
#define RESTORE()
Definition: infback.c:130
#define BITS(n)
Definition: infback.c:181
#define OF(args)
Definition: zconf.h:146
#define Z_VERSION_ERROR
Definition: zlib.h:140
Definition: inftrees.h:24
unsigned dmax
Definition: inflate.h:87
z_stream FAR * z_streamp
Definition: zlib.h:89
#define Z_STREAM_END
Definition: zlib.h:133
static const code distfix[32]
Definition: inffixed.h:87
voidpf zcalloc(voidpf opaque, unsigned items, unsigned size)
Definition: zutil.c:164
#define const
Definition: zconf.h:91
Definition: infutil.h:18
local void fixedtables(struct inflate_state FAR *state)
Definition: infback.c:73
unsigned char FAR * window
Definition: inflate.h:96
inflate_mode mode
Definition: inflate.h:82
GLuint GLdouble GLdouble GLint GLint order
Definition: glew.h:3337
#define PULL()
Definition: infback.c:149
#define Z_MEM_ERROR
Definition: zlib.h:138
unsigned whave
Definition: inflate.h:94
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
unsigned offset
Definition: inflate.h:102
Definition: infutil.h:15
#define BYTEBITS()
Definition: infback.c:192
code const FAR * lencode
Definition: inflate.h:106
Definition: inftrees.h:57
#define DONE
Definition: inflate.c:9
unsigned wbits
Definition: inflate.h:92
unsigned length
Definition: inflate.h:101