Visualization Library 2.0.0-b5

A lightweight C++ OpenGL middleware for 2D/3D graphics

VL     Star     Watch     Fork     Issue

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