COSMOS core  1.0.2 (beta)
Comprehensive Open-architecture Solution for Mission Operations Systems
inflate.c File Reference
#include "zutil.h"
#include "inftrees.h"
#include "inflate.h"
#include "inffast.h"
#include "inffixed.h"
Include dependency graph for inflate.c:

Macros

#define UPDATE(check, buf, len)   (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
 
#define CRC2(check, word)
 
#define CRC4(check, word)
 
#define LOAD()
 
#define RESTORE()
 
#define INITBITS()
 
#define PULLBYTE()
 
#define NEEDBITS(n)
 
#define BITS(n)   ((unsigned)hold & ((1U << (n)) - 1))
 
#define DROPBITS(n)
 
#define BYTEBITS()
 

Functions

static void fixedtables OF ((struct inflate_state FAR *state))
 
static int updatewindow OF ((z_streamp strm, const unsigned char FAR *end, unsigned copy))
 
static unsigned syncsearch OF ((unsigned FAR *have, const unsigned char FAR *buf, unsigned len))
 
int ZEXPORT inflateResetKeep (z_streamp strm)
 
int ZEXPORT inflateReset (z_streamp strm)
 
int ZEXPORT inflateReset2 (z_streamp strm, int windowBits)
 
int ZEXPORT inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size)
 
int ZEXPORT inflateInit_ (z_streamp strm, const char *version, int stream_size)
 
int ZEXPORT inflatePrime (z_streamp strm, int bits, int value)
 
static void fixedtables (struct inflate_state FAR *state)
 
static int updatewindow (z_streamp strm, const Bytef *end, unsigned copy)
 
int ZEXPORT inflate (z_streamp strm, int flush)
 
int ZEXPORT inflateEnd (z_streamp strm)
 
int ZEXPORT inflateGetDictionary (z_streamp strm, Bytef *dictionary, uInt *dictLength)
 
int ZEXPORT inflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength)
 
int ZEXPORT inflateGetHeader (z_streamp strm, gz_headerp head)
 
static unsigned syncsearch (unsigned FAR *have, const unsigned char FAR *buf, unsigned len)
 
int ZEXPORT inflateSync (z_streamp strm)
 
int ZEXPORT inflateSyncPoint (z_streamp strm)
 
int ZEXPORT inflateCopy (z_streamp dest, z_streamp source)
 
int ZEXPORT inflateUndermine (z_streamp strm, int subvert)
 
long ZEXPORT inflateMark (z_streamp strm)
 

Macro Definition Documentation

#define UPDATE (   check,
  buf,
  len 
)    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
#define CRC2 (   check,
  word 
)
Value:
do { \
hbuf[0] = (unsigned char)(word); \
hbuf[1] = (unsigned char)((word) >> 8); \
check = crc32(check, hbuf, 2); \
} while (0)
unsigned long check
Definition: inflate.h:88
unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, uInt len)
Definition: crc32.c:204
#define CRC4 (   check,
  word 
)
Value:
do { \
hbuf[0] = (unsigned char)(word); \
hbuf[1] = (unsigned char)((word) >> 8); \
hbuf[2] = (unsigned char)((word) >> 16); \
hbuf[3] = (unsigned char)((word) >> 24); \
check = crc32(check, hbuf, 4); \
} while (0)
unsigned long check
Definition: inflate.h:88
unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, uInt len)
Definition: crc32.c:204
#define LOAD ( )
Value:
do { \
put = strm->next_out; \
left = strm->avail_out; \
next = strm->next_in; \
have = strm->avail_in; \
hold = state->hold; \
bits = state->bits; \
} while (0)
unsigned have
Definition: inflate.h:114
code FAR * next
Definition: inflate.h:115
unsigned long hold
Definition: inflate.h:98
unsigned bits
Definition: inflate.h:99
#define RESTORE ( )
Value:
do { \
strm->next_out = put; \
strm->avail_out = left; \
strm->next_in = next; \
strm->avail_in = have; \
state->hold = hold; \
state->bits = bits; \
} while (0)
unsigned have
Definition: inflate.h:114
code FAR * next
Definition: inflate.h:115
unsigned long hold
Definition: inflate.h:98
unsigned bits
Definition: inflate.h:99
#define INITBITS ( )
Value:
do { \
hold = 0; \
bits = 0; \
} while (0)
unsigned long hold
Definition: inflate.h:98
unsigned bits
Definition: inflate.h:99
#define PULLBYTE ( )
Value:
do { \
if (have == 0) goto inf_leave; \
have--; \
hold += (unsigned long)(*next++) << bits; \
bits += 8; \
} while (0)
unsigned have
Definition: inflate.h:114
code FAR * next
Definition: inflate.h:115
unsigned long hold
Definition: inflate.h:98
unsigned bits
Definition: inflate.h:99
#define NEEDBITS (   n)
Value:
do { \
while (bits < (unsigned)(n)) \
} while (0)
unsigned bits
Definition: inflate.h:99
#define PULLBYTE()
Definition: inflate.c:489
#define BITS (   n)    ((unsigned)hold & ((1U << (n)) - 1))
#define DROPBITS (   n)
Value:
do { \
hold >>= (n); \
bits -= (unsigned)(n); \
} while (0)
unsigned long hold
Definition: inflate.h:98
unsigned bits
Definition: inflate.h:99
#define BYTEBITS ( )
Value:
do { \
hold >>= bits & 7; \
bits -= bits & 7; \
} while (0)
unsigned long hold
Definition: inflate.h:98
unsigned bits
Definition: inflate.h:99

Function Documentation

static void fixedtables OF ( (struct inflate_state FAR *state)  )
static
static int updatewindow OF ( (z_streamp strm, const unsigned char FAR *end, unsigned copy)  )
static
static unsigned syncsearch OF ( (unsigned FAR *have, const unsigned char FAR *buf, unsigned len)  )
static
int ZEXPORT inflateResetKeep ( z_streamp  strm)
106 {
107  struct inflate_state FAR *state;
108 
109  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
110  state = (struct inflate_state FAR *)strm->state;
111  strm->total_in = strm->total_out = state->total = 0;
112  strm->msg = Z_NULL;
113  if (state->wrap) /* to support ill-conceived Java test suite */
114  strm->adler = state->wrap & 1;
115  state->mode = HEAD;
116  state->last = 0;
117  state->havedict = 0;
118  state->dmax = 32768U;
119  state->head = Z_NULL;
120  state->hold = 0;
121  state->bits = 0;
122  state->lencode = state->distcode = state->next = state->codes;
123  state->sane = 1;
124  state->back = -1;
125  Tracev((stderr, "inflate: reset\n"));
126  return Z_OK;
127 }
Definition: inflate.h:81
int havedict
Definition: inflate.h:85
unsigned long total
Definition: inflate.h:89
gz_headerp head
Definition: inflate.h:90
int sane
Definition: inflate.h:119
code const FAR * distcode
Definition: inflate.h:107
int last
Definition: inflate.h:83
#define Tracev(x)
Definition: zutil.h:232
char * msg
Definition: zlib.h:94
#define Z_STREAM_ERROR
Definition: zlib.h:177
code FAR * next
Definition: inflate.h:115
code codes[ENOUGH]
Definition: inflate.h:118
unsigned long hold
Definition: inflate.h:98
uLong total_in
Definition: zlib.h:88
#define FAR
Definition: jmorecfg.h:215
Definition: inflate.h:21
unsigned dmax
Definition: inflate.h:87
unsigned bits
Definition: inflate.h:99
uLong adler
Definition: zlib.h:102
uLong total_out
Definition: zlib.h:92
int back
Definition: inflate.h:120
inflate_mode mode
Definition: inflate.h:82
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
code const FAR * lencode
Definition: inflate.h:106
int wrap
Definition: inflate.h:84
int ZEXPORT inflateReset ( z_streamp  strm)
131 {
132  struct inflate_state FAR *state;
133 
134  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
135  state = (struct inflate_state FAR *)strm->state;
136  state->wsize = 0;
137  state->whave = 0;
138  state->wnext = 0;
139  return inflateResetKeep(strm);
140 }
Definition: inflate.h:81
unsigned wnext
Definition: inflate.h:95
unsigned wsize
Definition: inflate.h:93
int ZEXPORT inflateResetKeep(z_streamp strm)
Definition: inflate.c:104
#define Z_STREAM_ERROR
Definition: zlib.h:177
#define FAR
Definition: jmorecfg.h:215
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
unsigned whave
Definition: inflate.h:94
int ZEXPORT inflateReset2 ( z_streamp  strm,
int  windowBits 
)
145 {
146  int wrap;
147  struct inflate_state FAR *state;
148 
149  /* get the state */
150  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
151  state = (struct inflate_state FAR *)strm->state;
152 
153  /* extract wrap request from windowBits parameter */
154  if (windowBits < 0) {
155  wrap = 0;
156  windowBits = -windowBits;
157  }
158  else {
159  wrap = (windowBits >> 4) + 1;
160 #ifdef GUNZIP
161  if (windowBits < 48)
162  windowBits &= 15;
163 #endif
164  }
165 
166  /* set number of window bits, free window if different */
167  if (windowBits && (windowBits < 8 || windowBits > 15))
168  return Z_STREAM_ERROR;
169  if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
170  ZFREE(strm, state->window);
171  state->window = Z_NULL;
172  }
173 
174  /* update state and reset the rest of it */
175  state->wrap = wrap;
176  state->wbits = (unsigned)windowBits;
177  return inflateReset(strm);
178 }
Definition: inflate.h:81
int ZEXPORT inflateReset(z_streamp strm)
Definition: inflate.c:129
#define Z_STREAM_ERROR
Definition: zlib.h:177
#define ZFREE(strm, addr)
Definition: zutil.h:246
#define FAR
Definition: jmorecfg.h:215
unsigned char FAR * window
Definition: inflate.h:96
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
unsigned wbits
Definition: inflate.h:92
int wrap
Definition: inflate.h:84
int ZEXPORT inflateInit2_ ( z_streamp  strm,
int  windowBits,
const char *  version,
int  stream_size 
)
185 {
186  int ret;
187  struct inflate_state FAR *state;
188 
189  if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
190  stream_size != (int)(sizeof(z_stream)))
191  return Z_VERSION_ERROR;
192  if (strm == Z_NULL) return Z_STREAM_ERROR;
193  strm->msg = Z_NULL; /* in case we return an error */
194  if (strm->zalloc == (alloc_func)0) {
195 #ifdef Z_SOLO
196  return Z_STREAM_ERROR;
197 #else
198  strm->zalloc = zcalloc;
199  strm->opaque = (voidpf)0;
200 #endif
201  }
202  if (strm->zfree == (free_func)0)
203 #ifdef Z_SOLO
204  return Z_STREAM_ERROR;
205 #else
206  strm->zfree = zcfree;
207 #endif
208  state = (struct inflate_state FAR *)
209  ZALLOC(strm, 1, sizeof(struct inflate_state));
210  if (state == Z_NULL) return Z_MEM_ERROR;
211  Tracev((stderr, "inflate: allocated\n"));
212  strm->state = (struct internal_state FAR *)state;
213  state->window = Z_NULL;
214  ret = inflateReset2(strm, windowBits);
215  if (ret != Z_OK) {
216  ZFREE(strm, state);
217  strm->state = Z_NULL;
218  }
219  return ret;
220 }
void zcfree(voidpf opaque, voidpf ptr)
Definition: zutil.c:314
voidpf(* alloc_func)()
Definition: zlib.h:80
Definition: inflate.h:81
#define Tracev(x)
Definition: zutil.h:232
char * msg
Definition: zlib.h:94
Byte * voidpf
Definition: zconf.h:390
#define Z_STREAM_ERROR
Definition: zlib.h:177
int ZEXPORT inflateReset2(z_streamp strm, int windowBits)
Definition: inflate.c:142
voidpf opaque
Definition: zlib.h:99
free_func zfree
Definition: zlib.h:98
#define ZALLOC(strm, items, size)
Definition: zutil.h:244
voidpf zcalloc(voidpf opaque, unsigned items, unsigned size)
Definition: zutil.c:304
#define ZFREE(strm, addr)
Definition: zutil.h:246
#define FAR
Definition: jmorecfg.h:215
alloc_func zalloc
Definition: zlib.h:97
#define Z_MEM_ERROR
Definition: zlib.h:179
#define ZLIB_VERSION
Definition: zlib.h:40
#define Z_VERSION_ERROR
Definition: zlib.h:181
Definition: deflate.h:97
unsigned char FAR * window
Definition: inflate.h:96
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
void(* free_func)()
Definition: zlib.h:81
Definition: zlib.h:85
int ZEXPORT inflateInit_ ( z_streamp  strm,
const char *  version,
int  stream_size 
)
226 {
227  return inflateInit2_(strm, DEF_WBITS, version, stream_size);
228 }
#define DEF_WBITS
Definition: zutil.h:59
int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, const char *version, int stream_size)
Definition: inflate.c:180
int ZEXPORT inflatePrime ( z_streamp  strm,
int  bits,
int  value 
)
234 {
235  struct inflate_state FAR *state;
236 
237  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
238  state = (struct inflate_state FAR *)strm->state;
239  if (bits < 0) {
240  state->hold = 0;
241  state->bits = 0;
242  return Z_OK;
243  }
244  if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
245  value &= (1L << bits) - 1;
246  state->hold += value << state->bits;
247  state->bits += bits;
248  return Z_OK;
249 }
Definition: inflate.h:81
#define Z_STREAM_ERROR
Definition: zlib.h:177
unsigned long hold
Definition: inflate.h:98
#define FAR
Definition: jmorecfg.h:215
unsigned bits
Definition: inflate.h:99
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
static void fixedtables ( struct inflate_state FAR state)
static
263 {
264 #ifdef BUILDFIXED
265  static int virgin = 1;
266  static code *lenfix, *distfix;
267  static code fixed[544];
268 
269  /* build fixed huffman tables if first call (may not be thread safe) */
270  if (virgin) {
271  unsigned sym, bits;
272  static code *next;
273 
274  /* literal/length table */
275  sym = 0;
276  while (sym < 144) state->lens[sym++] = 8;
277  while (sym < 256) state->lens[sym++] = 9;
278  while (sym < 280) state->lens[sym++] = 7;
279  while (sym < 288) state->lens[sym++] = 8;
280  next = fixed;
281  lenfix = next;
282  bits = 9;
283  inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
284 
285  /* distance table */
286  sym = 0;
287  while (sym < 32) state->lens[sym++] = 5;
288  distfix = next;
289  bits = 5;
290  inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
291 
292  /* do this just once */
293  virgin = 0;
294  }
295 #else /* !BUILDFIXED */
296 # include "inffixed.h"
297 #endif /* BUILDFIXED */
298  state->lencode = lenfix;
299  state->lenbits = 9;
300  state->distcode = distfix;
301  state->distbits = 5;
302 }
Definition: inftrees.h:57
static const code lenfix[512]
Definition: inffixed.h:10
int 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
code FAR * next
Definition: inflate.h:115
static const code distfix[32]
Definition: inffixed.h:87
Definition: inftrees.h:24
unsigned bits
Definition: inflate.h:99
Definition: inftrees.h:56
static int updatewindow ( z_streamp  strm,
const Bytef end,
unsigned  copy 
)
static
383 {
384  struct inflate_state FAR *state;
385  unsigned dist;
386 
387  state = (struct inflate_state FAR *)strm->state;
388 
389  /* if it hasn't been done already, allocate space for the window */
390  if (state->window == Z_NULL) {
391  state->window = (unsigned char FAR *)
392  ZALLOC(strm, 1U << state->wbits,
393  sizeof(unsigned char));
394  if (state->window == Z_NULL) return 1;
395  }
396 
397  /* if window not in use yet, initialize */
398  if (state->wsize == 0) {
399  state->wsize = 1U << state->wbits;
400  state->wnext = 0;
401  state->whave = 0;
402  }
403 
404  /* copy state->wsize or less output bytes into the circular window */
405  if (copy >= state->wsize) {
406  zmemcpy(state->window, end - state->wsize, state->wsize);
407  state->wnext = 0;
408  state->whave = state->wsize;
409  }
410  else {
411  dist = state->wsize - state->wnext;
412  if (dist > copy) dist = copy;
413  zmemcpy(state->window + state->wnext, end - copy, dist);
414  copy -= dist;
415  if (copy) {
416  zmemcpy(state->window, end - copy, copy);
417  state->wnext = copy;
418  state->whave = state->wsize;
419  }
420  else {
421  state->wnext += dist;
422  if (state->wnext == state->wsize) state->wnext = 0;
423  if (state->whave < state->wsize) state->whave += dist;
424  }
425  }
426  return 0;
427 }
Definition: inflate.h:81
void zmemcpy(Bytef *dest, const Bytef *source, uInt len)
Definition: zutil.c:152
unsigned wnext
Definition: inflate.h:95
unsigned wsize
Definition: inflate.h:93
#define ZALLOC(strm, items, size)
Definition: zutil.h:244
#define FAR
Definition: jmorecfg.h:215
unsigned char FAR * window
Definition: inflate.h:96
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
unsigned whave
Definition: inflate.h:94
unsigned wbits
Definition: inflate.h:92
int ZEXPORT inflate ( z_streamp  strm,
int  flush 
)
608 {
609  struct inflate_state FAR *state;
610  z_const unsigned char FAR *next; /* next input */
611  unsigned char FAR *put; /* next output */
612  unsigned have, left; /* available input and output */
613  unsigned long hold; /* bit buffer */
614  unsigned bits; /* bits in bit buffer */
615  unsigned in, out; /* save starting available input and output */
616  unsigned copy; /* number of stored or match bytes to copy */
617  unsigned char FAR *from; /* where to copy match bytes from */
618  code here; /* current decoding table entry */
619  code last; /* parent table entry */
620  unsigned len; /* length to copy for repeats, bits to drop */
621  int ret; /* return code */
622 #ifdef GUNZIP
623  unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
624 #endif
625  static const unsigned short order[19] = /* permutation of code lengths */
626  {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
627 
628  if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
629  (strm->next_in == Z_NULL && strm->avail_in != 0))
630  return Z_STREAM_ERROR;
631 
632  state = (struct inflate_state FAR *)strm->state;
633  if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
634  LOAD();
635  in = have;
636  out = left;
637  ret = Z_OK;
638  for (;;)
639  switch (state->mode) {
640  case HEAD:
641  if (state->wrap == 0) {
642  state->mode = TYPEDO;
643  break;
644  }
645  NEEDBITS(16);
646 #ifdef GUNZIP
647  if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
648  state->check = crc32(0L, Z_NULL, 0);
649  CRC2(state->check, hold);
650  INITBITS();
651  state->mode = FLAGS;
652  break;
653  }
654  state->flags = 0; /* expect zlib header */
655  if (state->head != Z_NULL)
656  state->head->done = -1;
657  if (!(state->wrap & 1) || /* check if zlib header allowed */
658 #else
659  if (
660 #endif
661  ((BITS(8) << 8) + (hold >> 8)) % 31) {
662  strm->msg = (char *)"incorrect header check";
663  state->mode = BAD;
664  break;
665  }
666  if (BITS(4) != Z_DEFLATED) {
667  strm->msg = (char *)"unknown compression method";
668  state->mode = BAD;
669  break;
670  }
671  DROPBITS(4);
672  len = BITS(4) + 8;
673  if (state->wbits == 0)
674  state->wbits = len;
675  else if (len > state->wbits) {
676  strm->msg = (char *)"invalid window size";
677  state->mode = BAD;
678  break;
679  }
680  state->dmax = 1U << len;
681  Tracev((stderr, "inflate: zlib header ok\n"));
682  strm->adler = state->check = adler32(0L, Z_NULL, 0);
683  state->mode = hold & 0x200 ? DICTID : TYPE;
684  INITBITS();
685  break;
686 #ifdef GUNZIP
687  case FLAGS:
688  NEEDBITS(16);
689  state->flags = (int)(hold);
690  if ((state->flags & 0xff) != Z_DEFLATED) {
691  strm->msg = (char *)"unknown compression method";
692  state->mode = BAD;
693  break;
694  }
695  if (state->flags & 0xe000) {
696  strm->msg = (char *)"unknown header flags set";
697  state->mode = BAD;
698  break;
699  }
700  if (state->head != Z_NULL)
701  state->head->text = (int)((hold >> 8) & 1);
702  if (state->flags & 0x0200) CRC2(state->check, hold);
703  INITBITS();
704  state->mode = TIME;
705  case TIME:
706  NEEDBITS(32);
707  if (state->head != Z_NULL)
708  state->head->time = hold;
709  if (state->flags & 0x0200) CRC4(state->check, hold);
710  INITBITS();
711  state->mode = OS;
712  case OS:
713  NEEDBITS(16);
714  if (state->head != Z_NULL) {
715  state->head->xflags = (int)(hold & 0xff);
716  state->head->os = (int)(hold >> 8);
717  }
718  if (state->flags & 0x0200) CRC2(state->check, hold);
719  INITBITS();
720  state->mode = EXLEN;
721  case EXLEN:
722  if (state->flags & 0x0400) {
723  NEEDBITS(16);
724  state->length = (unsigned)(hold);
725  if (state->head != Z_NULL)
726  state->head->extra_len = (unsigned)hold;
727  if (state->flags & 0x0200) CRC2(state->check, hold);
728  INITBITS();
729  }
730  else if (state->head != Z_NULL)
731  state->head->extra = Z_NULL;
732  state->mode = EXTRA;
733  case EXTRA:
734  if (state->flags & 0x0400) {
735  copy = state->length;
736  if (copy > have) copy = have;
737  if (copy) {
738  if (state->head != Z_NULL &&
739  state->head->extra != Z_NULL) {
740  len = state->head->extra_len - state->length;
741  zmemcpy(state->head->extra + len, next,
742  len + copy > state->head->extra_max ?
743  state->head->extra_max - len : copy);
744  }
745  if (state->flags & 0x0200)
746  state->check = crc32(state->check, next, copy);
747  have -= copy;
748  next += copy;
749  state->length -= copy;
750  }
751  if (state->length) goto inf_leave;
752  }
753  state->length = 0;
754  state->mode = NAME;
755  case NAME:
756  if (state->flags & 0x0800) {
757  if (have == 0) goto inf_leave;
758  copy = 0;
759  do {
760  len = (unsigned)(next[copy++]);
761  if (state->head != Z_NULL &&
762  state->head->name != Z_NULL &&
763  state->length < state->head->name_max)
764  state->head->name[state->length++] = len;
765  } while (len && copy < have);
766  if (state->flags & 0x0200)
767  state->check = crc32(state->check, next, copy);
768  have -= copy;
769  next += copy;
770  if (len) goto inf_leave;
771  }
772  else if (state->head != Z_NULL)
773  state->head->name = Z_NULL;
774  state->length = 0;
775  state->mode = COMMENT;
776  case COMMENT:
777  if (state->flags & 0x1000) {
778  if (have == 0) goto inf_leave;
779  copy = 0;
780  do {
781  len = (unsigned)(next[copy++]);
782  if (state->head != Z_NULL &&
783  state->head->comment != Z_NULL &&
784  state->length < state->head->comm_max)
785  state->head->comment[state->length++] = len;
786  } while (len && copy < have);
787  if (state->flags & 0x0200)
788  state->check = crc32(state->check, next, copy);
789  have -= copy;
790  next += copy;
791  if (len) goto inf_leave;
792  }
793  else if (state->head != Z_NULL)
794  state->head->comment = Z_NULL;
795  state->mode = HCRC;
796  case HCRC:
797  if (state->flags & 0x0200) {
798  NEEDBITS(16);
799  if (hold != (state->check & 0xffff)) {
800  strm->msg = (char *)"header crc mismatch";
801  state->mode = BAD;
802  break;
803  }
804  INITBITS();
805  }
806  if (state->head != Z_NULL) {
807  state->head->hcrc = (int)((state->flags >> 9) & 1);
808  state->head->done = 1;
809  }
810  strm->adler = state->check = crc32(0L, Z_NULL, 0);
811  state->mode = TYPE;
812  break;
813 #endif
814  case DICTID:
815  NEEDBITS(32);
816  strm->adler = state->check = ZSWAP32(hold);
817  INITBITS();
818  state->mode = DICT;
819  case DICT:
820  if (state->havedict == 0) {
821  RESTORE();
822  return Z_NEED_DICT;
823  }
824  strm->adler = state->check = adler32(0L, Z_NULL, 0);
825  state->mode = TYPE;
826  case TYPE:
827  if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
828  case TYPEDO:
829  if (state->last) {
830  BYTEBITS();
831  state->mode = CHECK;
832  break;
833  }
834  NEEDBITS(3);
835  state->last = BITS(1);
836  DROPBITS(1);
837  switch (BITS(2)) {
838  case 0: /* stored block */
839  Tracev((stderr, "inflate: stored block%s\n",
840  state->last ? " (last)" : ""));
841  state->mode = STORED;
842  break;
843  case 1: /* fixed block */
844  fixedtables(state);
845  Tracev((stderr, "inflate: fixed codes block%s\n",
846  state->last ? " (last)" : ""));
847  state->mode = LEN_; /* decode codes */
848  if (flush == Z_TREES) {
849  DROPBITS(2);
850  goto inf_leave;
851  }
852  break;
853  case 2: /* dynamic block */
854  Tracev((stderr, "inflate: dynamic codes block%s\n",
855  state->last ? " (last)" : ""));
856  state->mode = TABLE;
857  break;
858  case 3:
859  strm->msg = (char *)"invalid block type";
860  state->mode = BAD;
861  }
862  DROPBITS(2);
863  break;
864  case STORED:
865  BYTEBITS(); /* go to byte boundary */
866  NEEDBITS(32);
867  if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
868  strm->msg = (char *)"invalid stored block lengths";
869  state->mode = BAD;
870  break;
871  }
872  state->length = (unsigned)hold & 0xffff;
873  Tracev((stderr, "inflate: stored length %u\n",
874  state->length));
875  INITBITS();
876  state->mode = COPY_;
877  if (flush == Z_TREES) goto inf_leave;
878  case COPY_:
879  state->mode = COPY;
880  case COPY:
881  copy = state->length;
882  if (copy) {
883  if (copy > have) copy = have;
884  if (copy > left) copy = left;
885  if (copy == 0) goto inf_leave;
886  zmemcpy(put, next, copy);
887  have -= copy;
888  next += copy;
889  left -= copy;
890  put += copy;
891  state->length -= copy;
892  break;
893  }
894  Tracev((stderr, "inflate: stored end\n"));
895  state->mode = TYPE;
896  break;
897  case TABLE:
898  NEEDBITS(14);
899  state->nlen = BITS(5) + 257;
900  DROPBITS(5);
901  state->ndist = BITS(5) + 1;
902  DROPBITS(5);
903  state->ncode = BITS(4) + 4;
904  DROPBITS(4);
905 #ifndef PKZIP_BUG_WORKAROUND
906  if (state->nlen > 286 || state->ndist > 30) {
907  strm->msg = (char *)"too many length or distance symbols";
908  state->mode = BAD;
909  break;
910  }
911 #endif
912  Tracev((stderr, "inflate: table sizes ok\n"));
913  state->have = 0;
914  state->mode = LENLENS;
915  case LENLENS:
916  while (state->have < state->ncode) {
917  NEEDBITS(3);
918  state->lens[order[state->have++]] = (unsigned short)BITS(3);
919  DROPBITS(3);
920  }
921  while (state->have < 19)
922  state->lens[order[state->have++]] = 0;
923  state->next = state->codes;
924  state->lencode = (const code FAR *)(state->next);
925  state->lenbits = 7;
926  ret = inflate_table(CODES, state->lens, 19, &(state->next),
927  &(state->lenbits), state->work);
928  if (ret) {
929  strm->msg = (char *)"invalid code lengths set";
930  state->mode = BAD;
931  break;
932  }
933  Tracev((stderr, "inflate: code lengths ok\n"));
934  state->have = 0;
935  state->mode = CODELENS;
936  case CODELENS:
937  while (state->have < state->nlen + state->ndist) {
938  for (;;) {
939  here = state->lencode[BITS(state->lenbits)];
940  if ((unsigned)(here.bits) <= bits) break;
941  PULLBYTE();
942  }
943  if (here.val < 16) {
944  DROPBITS(here.bits);
945  state->lens[state->have++] = here.val;
946  }
947  else {
948  if (here.val == 16) {
949  NEEDBITS(here.bits + 2);
950  DROPBITS(here.bits);
951  if (state->have == 0) {
952  strm->msg = (char *)"invalid bit length repeat";
953  state->mode = BAD;
954  break;
955  }
956  len = state->lens[state->have - 1];
957  copy = 3 + BITS(2);
958  DROPBITS(2);
959  }
960  else if (here.val == 17) {
961  NEEDBITS(here.bits + 3);
962  DROPBITS(here.bits);
963  len = 0;
964  copy = 3 + BITS(3);
965  DROPBITS(3);
966  }
967  else {
968  NEEDBITS(here.bits + 7);
969  DROPBITS(here.bits);
970  len = 0;
971  copy = 11 + BITS(7);
972  DROPBITS(7);
973  }
974  if (state->have + copy > state->nlen + state->ndist) {
975  strm->msg = (char *)"invalid bit length repeat";
976  state->mode = BAD;
977  break;
978  }
979  while (copy--)
980  state->lens[state->have++] = (unsigned short)len;
981  }
982  }
983 
984  /* handle error breaks in while */
985  if (state->mode == BAD) break;
986 
987  /* check for end-of-block code (better have one) */
988  if (state->lens[256] == 0) {
989  strm->msg = (char *)"invalid code -- missing end-of-block";
990  state->mode = BAD;
991  break;
992  }
993 
994  /* build code tables -- note: do not change the lenbits or distbits
995  values here (9 and 6) without reading the comments in inftrees.h
996  concerning the ENOUGH constants, which depend on those values */
997  state->next = state->codes;
998  state->lencode = (const code FAR *)(state->next);
999  state->lenbits = 9;
1000  ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
1001  &(state->lenbits), state->work);
1002  if (ret) {
1003  strm->msg = (char *)"invalid literal/lengths set";
1004  state->mode = BAD;
1005  break;
1006  }
1007  state->distcode = (const code FAR *)(state->next);
1008  state->distbits = 6;
1009  ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
1010  &(state->next), &(state->distbits), state->work);
1011  if (ret) {
1012  strm->msg = (char *)"invalid distances set";
1013  state->mode = BAD;
1014  break;
1015  }
1016  Tracev((stderr, "inflate: codes ok\n"));
1017  state->mode = LEN_;
1018  if (flush == Z_TREES) goto inf_leave;
1019  case LEN_:
1020  state->mode = LEN;
1021  case LEN:
1022  if (have >= 6 && left >= 258) {
1023  RESTORE();
1024  inflate_fast(strm, out);
1025  LOAD();
1026  if (state->mode == TYPE)
1027  state->back = -1;
1028  break;
1029  }
1030  state->back = 0;
1031  for (;;) {
1032  here = state->lencode[BITS(state->lenbits)];
1033  if ((unsigned)(here.bits) <= bits) break;
1034  PULLBYTE();
1035  }
1036  if (here.op && (here.op & 0xf0) == 0) {
1037  last = here;
1038  for (;;) {
1039  here = state->lencode[last.val +
1040  (BITS(last.bits + last.op) >> last.bits)];
1041  if ((unsigned)(last.bits + here.bits) <= bits) break;
1042  PULLBYTE();
1043  }
1044  DROPBITS(last.bits);
1045  state->back += last.bits;
1046  }
1047  DROPBITS(here.bits);
1048  state->back += here.bits;
1049  state->length = (unsigned)here.val;
1050  if ((int)(here.op) == 0) {
1051  Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
1052  "inflate: literal '%c'\n" :
1053  "inflate: literal 0x%02x\n", here.val));
1054  state->mode = LIT;
1055  break;
1056  }
1057  if (here.op & 32) {
1058  Tracevv((stderr, "inflate: end of block\n"));
1059  state->back = -1;
1060  state->mode = TYPE;
1061  break;
1062  }
1063  if (here.op & 64) {
1064  strm->msg = (char *)"invalid literal/length code";
1065  state->mode = BAD;
1066  break;
1067  }
1068  state->extra = (unsigned)(here.op) & 15;
1069  state->mode = LENEXT;
1070  case LENEXT:
1071  if (state->extra) {
1072  NEEDBITS(state->extra);
1073  state->length += BITS(state->extra);
1074  DROPBITS(state->extra);
1075  state->back += state->extra;
1076  }
1077  Tracevv((stderr, "inflate: length %u\n", state->length));
1078  state->was = state->length;
1079  state->mode = DIST;
1080  case DIST:
1081  for (;;) {
1082  here = state->distcode[BITS(state->distbits)];
1083  if ((unsigned)(here.bits) <= bits) break;
1084  PULLBYTE();
1085  }
1086  if ((here.op & 0xf0) == 0) {
1087  last = here;
1088  for (;;) {
1089  here = state->distcode[last.val +
1090  (BITS(last.bits + last.op) >> last.bits)];
1091  if ((unsigned)(last.bits + here.bits) <= bits) break;
1092  PULLBYTE();
1093  }
1094  DROPBITS(last.bits);
1095  state->back += last.bits;
1096  }
1097  DROPBITS(here.bits);
1098  state->back += here.bits;
1099  if (here.op & 64) {
1100  strm->msg = (char *)"invalid distance code";
1101  state->mode = BAD;
1102  break;
1103  }
1104  state->offset = (unsigned)here.val;
1105  state->extra = (unsigned)(here.op) & 15;
1106  state->mode = DISTEXT;
1107  case DISTEXT:
1108  if (state->extra) {
1109  NEEDBITS(state->extra);
1110  state->offset += BITS(state->extra);
1111  DROPBITS(state->extra);
1112  state->back += state->extra;
1113  }
1114 #ifdef INFLATE_STRICT
1115  if (state->offset > state->dmax) {
1116  strm->msg = (char *)"invalid distance too far back";
1117  state->mode = BAD;
1118  break;
1119  }
1120 #endif
1121  Tracevv((stderr, "inflate: distance %u\n", state->offset));
1122  state->mode = MATCH;
1123  case MATCH:
1124  if (left == 0) goto inf_leave;
1125  copy = out - left;
1126  if (state->offset > copy) { /* copy from window */
1127  copy = state->offset - copy;
1128  if (copy > state->whave) {
1129  if (state->sane) {
1130  strm->msg = (char *)"invalid distance too far back";
1131  state->mode = BAD;
1132  break;
1133  }
1134 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1135  Trace((stderr, "inflate.c too far\n"));
1136  copy -= state->whave;
1137  if (copy > state->length) copy = state->length;
1138  if (copy > left) copy = left;
1139  left -= copy;
1140  state->length -= copy;
1141  do {
1142  *put++ = 0;
1143  } while (--copy);
1144  if (state->length == 0) state->mode = LEN;
1145  break;
1146 #endif
1147  }
1148  if (copy > state->wnext) {
1149  copy -= state->wnext;
1150  from = state->window + (state->wsize - copy);
1151  }
1152  else
1153  from = state->window + (state->wnext - copy);
1154  if (copy > state->length) copy = state->length;
1155  }
1156  else { /* copy from output */
1157  from = put - state->offset;
1158  copy = state->length;
1159  }
1160  if (copy > left) copy = left;
1161  left -= copy;
1162  state->length -= copy;
1163  do {
1164  *put++ = *from++;
1165  } while (--copy);
1166  if (state->length == 0) state->mode = LEN;
1167  break;
1168  case LIT:
1169  if (left == 0) goto inf_leave;
1170  *put++ = (unsigned char)(state->length);
1171  left--;
1172  state->mode = LEN;
1173  break;
1174  case CHECK:
1175  if (state->wrap) {
1176  NEEDBITS(32);
1177  out -= left;
1178  strm->total_out += out;
1179  state->total += out;
1180  if (out)
1181  strm->adler = state->check =
1182  UPDATE(state->check, put - out, out);
1183  out = left;
1184  if ((
1185 #ifdef GUNZIP
1186  state->flags ? hold :
1187 #endif
1188  ZSWAP32(hold)) != state->check) {
1189  strm->msg = (char *)"incorrect data check";
1190  state->mode = BAD;
1191  break;
1192  }
1193  INITBITS();
1194  Tracev((stderr, "inflate: check matches trailer\n"));
1195  }
1196 #ifdef GUNZIP
1197  state->mode = LENGTH;
1198  case LENGTH:
1199  if (state->wrap && state->flags) {
1200  NEEDBITS(32);
1201  if (hold != (state->total & 0xffffffffUL)) {
1202  strm->msg = (char *)"incorrect length check";
1203  state->mode = BAD;
1204  break;
1205  }
1206  INITBITS();
1207  Tracev((stderr, "inflate: length matches trailer\n"));
1208  }
1209 #endif
1210  state->mode = DONE;
1211  case DONE:
1212  ret = Z_STREAM_END;
1213  goto inf_leave;
1214  case BAD:
1215  ret = Z_DATA_ERROR;
1216  goto inf_leave;
1217  case MEM:
1218  return Z_MEM_ERROR;
1219  case SYNC:
1220  default:
1221  return Z_STREAM_ERROR;
1222  }
1223 
1224  /*
1225  Return from inflate(), updating the total counts and the check value.
1226  If there was no progress during the inflate() call, return a buffer
1227  error. Call updatewindow() to create and/or update the window state.
1228  Note: a memory error from inflate() is non-recoverable.
1229  */
1230  inf_leave:
1231  RESTORE();
1232  if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
1233  (state->mode < CHECK || flush != Z_FINISH)))
1234  if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
1235  state->mode = MEM;
1236  return Z_MEM_ERROR;
1237  }
1238  in -= strm->avail_in;
1239  out -= strm->avail_out;
1240  strm->total_in += in;
1241  strm->total_out += out;
1242  state->total += out;
1243  if (state->wrap && out)
1244  strm->adler = state->check =
1245  UPDATE(state->check, strm->next_out - out, out);
1246  strm->data_type = state->bits + (state->last ? 64 : 0) +
1247  (state->mode == TYPE ? 128 : 0) +
1248  (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1249  if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1250  ret = Z_BUF_ERROR;
1251  return ret;
1252 }
#define RESTORE()
Definition: inflate.c:470
Definition: inflate.h:28
int xflags
Definition: zlib.h:115
Bytef * extra
Definition: zlib.h:117
#define Z_BLOCK
Definition: zlib.h:169
unsigned nlen
Definition: inflate.h:112
Definition: inflate.h:36
unsigned short val
Definition: inftrees.h:27
#define NEEDBITS(n)
Definition: inflate.c:499
int text
Definition: zlib.h:113
Definition: inflate.h:81
int havedict
Definition: inflate.h:85
Bytef * next_in
Definition: zlib.h:86
Definition: inflate.h:34
void zmemcpy(Bytef *dest, const Bytef *source, uInt len)
Definition: zutil.c:152
Definition: inflate.h:44
unsigned wnext
Definition: inflate.h:95
int hcrc
Definition: zlib.h:124
unsigned ndist
Definition: inflate.h:113
unsigned long total
Definition: inflate.h:89
gz_headerp head
Definition: inflate.h:90
uLong time
Definition: zlib.h:114
unsigned wsize
Definition: inflate.h:93
int sane
Definition: inflate.h:119
unsigned have
Definition: inflate.h:114
uInt avail_in
Definition: zlib.h:87
unsigned distbits
Definition: inflate.h:109
#define Z_NEED_DICT
Definition: zlib.h:175
unsigned extra
Definition: inflate.h:104
Bytef * name
Definition: zlib.h:120
Definition: inftrees.h:57
code const FAR * distcode
Definition: inflate.h:107
int last
Definition: inflate.h:83
#define Tracev(x)
Definition: zutil.h:232
unsigned long check
Definition: inflate.h:88
uInt extra_max
Definition: zlib.h:119
char * msg
Definition: zlib.h:94
#define ZSWAP32(q)
Definition: zutil.h:250
uInt name_max
Definition: zlib.h:121
Definition: inflate.h:49
int done
Definition: zlib.h:125
Definition: inflate.h:27
unsigned char op
Definition: inftrees.h:25
Definition: inflate.h:32
Definition: inflate.h:30
Definition: inflate.h:24
#define Z_STREAM_ERROR
Definition: zlib.h:177
unsigned lenbits
Definition: inflate.h:108
unsigned short lens[320]
Definition: inflate.h:116
#define z_const
Definition: zconf.h:224
Definition: inflate.h:41
Definition: inflate.h:38
unsigned ncode
Definition: inflate.h:111
Definition: inflate.h:37
int 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
#define Z_FINISH
Definition: zlib.h:168
#define CRC2(check, word)
Definition: inflate.c:441
#define BYTEBITS()
Definition: inflate.c:517
uInt extra_len
Definition: zlib.h:118
Definition: inflate.h:48
#define LOAD()
Definition: inflate.c:459
code FAR * next
Definition: inflate.h:115
Definition: inflate.h:52
int data_type
Definition: zlib.h:101
Definition: inflate.h:26
code codes[ENOUGH]
Definition: inflate.h:118
unsigned long hold
Definition: inflate.h:98
Definition: inflate.h:47
Definition: inftrees.h:55
#define Z_DEFLATED
Definition: zlib.h:205
Definition: inflate.h:42
#define Z_DATA_ERROR
Definition: zlib.h:178
Definition: inflate.h:46
int os
Definition: zlib.h:116
uLong total_in
Definition: zlib.h:88
#define Z_TREES
Definition: zlib.h:170
Definition: inflate.h:23
#define Z_STREAM_END
Definition: zlib.h:174
Definition: inflate.h:31
#define FAR
Definition: jmorecfg.h:215
unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, uInt len)
Definition: crc32.c:204
Bytef * next_out
Definition: zlib.h:90
#define BITS(n)
Definition: inflate.c:506
#define UPDATE(check, buf, len)
Definition: inflate.c:433
#define GUNZIP
Definition: inflate.h:16
unsigned short work[288]
Definition: inflate.h:117
Definition: inflate.h:29
Definition: inflate.h:21
#define Z_MEM_ERROR
Definition: zlib.h:179
unsigned char bits
Definition: inftrees.h:26
#define Trace(x)
Definition: zutil.h:231
Definition: inftrees.h:24
unsigned dmax
Definition: inflate.h:87
Bytef * comment
Definition: zlib.h:122
unsigned bits
Definition: inflate.h:99
Definition: inflate.h:45
uLong adler
Definition: zlib.h:102
uLong total_out
Definition: zlib.h:92
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
Definition: adler32.c:65
Definition: inflate.h:33
#define INITBITS()
Definition: inflate.c:481
uInt comm_max
Definition: zlib.h:123
#define Z_BUF_ERROR
Definition: zlib.h:180
int back
Definition: inflate.h:120
Definition: inflate.h:25
unsigned char FAR * window
Definition: inflate.h:96
inflate_mode mode
Definition: inflate.h:82
Definition: inflate.h:40
uInt avail_out
Definition: zlib.h:91
#define Z_OK
Definition: zlib.h:173
Definition: inflate.h:35
Definition: inftrees.h:56
Definition: inflate.h:50
void inflate_fast(z_streamp strm, unsigned start)
Definition: inffast.c:67
static int updatewindow(z_streamp strm, const Bytef *end, unsigned copy)
Definition: inflate.c:379
struct internal_state * state
Definition: zlib.h:95
#define PULLBYTE()
Definition: inflate.c:489
#define CRC4(check, word)
Definition: inflate.c:448
#define Z_NULL
Definition: zlib.h:208
Definition: inflate.h:39
unsigned whave
Definition: inflate.h:94
unsigned offset
Definition: inflate.h:102
Definition: inflate.h:43
unsigned was
Definition: inflate.h:121
int flags
Definition: inflate.h:86
code const FAR * lencode
Definition: inflate.h:106
Definition: inflate.h:22
unsigned wbits
Definition: inflate.h:92
int wrap
Definition: inflate.h:84
Definition: inflate.h:51
#define DROPBITS(n)
Definition: inflate.c:510
#define Tracevv(x)
Definition: zutil.h:233
unsigned length
Definition: inflate.h:101
static void fixedtables(struct inflate_state FAR *state)
Definition: inflate.c:261
int ZEXPORT inflateEnd ( z_streamp  strm)
1256 {
1257  struct inflate_state FAR *state;
1258  if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
1259  return Z_STREAM_ERROR;
1260  state = (struct inflate_state FAR *)strm->state;
1261  if (state->window != Z_NULL) ZFREE(strm, state->window);
1262  ZFREE(strm, strm->state);
1263  strm->state = Z_NULL;
1264  Tracev((stderr, "inflate: end\n"));
1265  return Z_OK;
1266 }
Definition: inflate.h:81
#define Tracev(x)
Definition: zutil.h:232
#define Z_STREAM_ERROR
Definition: zlib.h:177
free_func zfree
Definition: zlib.h:98
#define ZFREE(strm, addr)
Definition: zutil.h:246
#define FAR
Definition: jmorecfg.h:215
unsigned char FAR * window
Definition: inflate.h:96
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
void(* free_func)()
Definition: zlib.h:81
int ZEXPORT inflateGetDictionary ( z_streamp  strm,
Bytef dictionary,
uInt dictLength 
)
1272 {
1273  struct inflate_state FAR *state;
1274 
1275  /* check state */
1276  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1277  state = (struct inflate_state FAR *)strm->state;
1278 
1279  /* copy dictionary */
1280  if (state->whave && dictionary != Z_NULL) {
1281  zmemcpy(dictionary, state->window + state->wnext,
1282  state->whave - state->wnext);
1283  zmemcpy(dictionary + state->whave - state->wnext,
1284  state->window, state->wnext);
1285  }
1286  if (dictLength != Z_NULL)
1287  *dictLength = state->whave;
1288  return Z_OK;
1289 }
Definition: inflate.h:81
void zmemcpy(Bytef *dest, const Bytef *source, uInt len)
Definition: zutil.c:152
unsigned wnext
Definition: inflate.h:95
#define Z_STREAM_ERROR
Definition: zlib.h:177
#define FAR
Definition: jmorecfg.h:215
unsigned char FAR * window
Definition: inflate.h:96
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
unsigned whave
Definition: inflate.h:94
int ZEXPORT inflateSetDictionary ( z_streamp  strm,
const Bytef dictionary,
uInt  dictLength 
)
1295 {
1296  struct inflate_state FAR *state;
1297  unsigned long dictid;
1298  int ret;
1299 
1300  /* check state */
1301  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1302  state = (struct inflate_state FAR *)strm->state;
1303  if (state->wrap != 0 && state->mode != DICT)
1304  return Z_STREAM_ERROR;
1305 
1306  /* check for correct dictionary identifier */
1307  if (state->mode == DICT) {
1308  dictid = adler32(0L, Z_NULL, 0);
1309  dictid = adler32(dictid, dictionary, dictLength);
1310  if (dictid != state->check)
1311  return Z_DATA_ERROR;
1312  }
1313 
1314  /* copy dictionary to window using updatewindow(), which will amend the
1315  existing dictionary if appropriate */
1316  ret = updatewindow(strm, dictionary + dictLength, dictLength);
1317  if (ret) {
1318  state->mode = MEM;
1319  return Z_MEM_ERROR;
1320  }
1321  state->havedict = 1;
1322  Tracev((stderr, "inflate: dictionary set\n"));
1323  return Z_OK;
1324 }
Definition: inflate.h:81
int havedict
Definition: inflate.h:85
#define Tracev(x)
Definition: zutil.h:232
unsigned long check
Definition: inflate.h:88
#define Z_STREAM_ERROR
Definition: zlib.h:177
#define Z_DATA_ERROR
Definition: zlib.h:178
Definition: inflate.h:31
#define FAR
Definition: jmorecfg.h:215
#define Z_MEM_ERROR
Definition: zlib.h:179
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
Definition: adler32.c:65
inflate_mode mode
Definition: inflate.h:82
#define Z_OK
Definition: zlib.h:173
static int updatewindow(z_streamp strm, const Bytef *end, unsigned copy)
Definition: inflate.c:379
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
int wrap
Definition: inflate.h:84
Definition: inflate.h:51
int ZEXPORT inflateGetHeader ( z_streamp  strm,
gz_headerp  head 
)
1329 {
1330  struct inflate_state FAR *state;
1331 
1332  /* check state */
1333  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1334  state = (struct inflate_state FAR *)strm->state;
1335  if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
1336 
1337  /* save header structure */
1338  state->head = head;
1339  head->done = 0;
1340  return Z_OK;
1341 }
Definition: inflate.h:81
gz_headerp head
Definition: inflate.h:90
int done
Definition: zlib.h:125
#define Z_STREAM_ERROR
Definition: zlib.h:177
static cssl_t * head
Definition: cssl_lib.cpp:29
#define FAR
Definition: jmorecfg.h:215
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
int wrap
Definition: inflate.h:84
static unsigned syncsearch ( unsigned FAR have,
const unsigned char FAR buf,
unsigned  len 
)
static
1358 {
1359  unsigned got;
1360  unsigned next;
1361 
1362  got = *have;
1363  next = 0;
1364  while (next < len && got < 4) {
1365  if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
1366  got++;
1367  else if (buf[next])
1368  got = 0;
1369  else
1370  got = 4 - got;
1371  next++;
1372  }
1373  *have = got;
1374  return next;
1375 }
unsigned have
Definition: inflate.h:114
code FAR * next
Definition: inflate.h:115
char buf[128]
Definition: rw_test.cpp:40
int ZEXPORT inflateSync ( z_streamp  strm)
1379 {
1380  unsigned len; /* number of bytes to look at or looked at */
1381  unsigned long in, out; /* temporary to save total_in and total_out */
1382  unsigned char buf[4]; /* to restore bit buffer to byte string */
1383  struct inflate_state FAR *state;
1384 
1385  /* check parameters */
1386  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1387  state = (struct inflate_state FAR *)strm->state;
1388  if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
1389 
1390  /* if first time, start search in bit buffer */
1391  if (state->mode != SYNC) {
1392  state->mode = SYNC;
1393  state->hold <<= state->bits & 7;
1394  state->bits -= state->bits & 7;
1395  len = 0;
1396  while (state->bits >= 8) {
1397  buf[len++] = (unsigned char)(state->hold);
1398  state->hold >>= 8;
1399  state->bits -= 8;
1400  }
1401  state->have = 0;
1402  syncsearch(&(state->have), buf, len);
1403  }
1404 
1405  /* search available input */
1406  len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
1407  strm->avail_in -= len;
1408  strm->next_in += len;
1409  strm->total_in += len;
1410 
1411  /* return no joy or set up to restart inflate() on a new block */
1412  if (state->have != 4) return Z_DATA_ERROR;
1413  in = strm->total_in; out = strm->total_out;
1414  inflateReset(strm);
1415  strm->total_in = in; strm->total_out = out;
1416  state->mode = TYPE;
1417  return Z_OK;
1418 }
Definition: inflate.h:81
int ZEXPORT inflateReset(z_streamp strm)
Definition: inflate.c:129
Bytef * next_in
Definition: zlib.h:86
unsigned have
Definition: inflate.h:114
uInt avail_in
Definition: zlib.h:87
Definition: inflate.h:32
#define Z_STREAM_ERROR
Definition: zlib.h:177
Definition: inflate.h:52
unsigned long hold
Definition: inflate.h:98
#define Z_DATA_ERROR
Definition: zlib.h:178
uLong total_in
Definition: zlib.h:88
#define FAR
Definition: jmorecfg.h:215
unsigned bits
Definition: inflate.h:99
uLong total_out
Definition: zlib.h:92
#define Z_BUF_ERROR
Definition: zlib.h:180
inflate_mode mode
Definition: inflate.h:82
#define Z_OK
Definition: zlib.h:173
char buf[128]
Definition: rw_test.cpp:40
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
static unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, unsigned len)
Definition: inflate.c:1354
int ZEXPORT inflateSyncPoint ( z_streamp  strm)
1430 {
1431  struct inflate_state FAR *state;
1432 
1433  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1434  state = (struct inflate_state FAR *)strm->state;
1435  return state->mode == STORED && state->bits == 0;
1436 }
Definition: inflate.h:81
Definition: inflate.h:34
#define Z_STREAM_ERROR
Definition: zlib.h:177
#define FAR
Definition: jmorecfg.h:215
unsigned bits
Definition: inflate.h:99
inflate_mode mode
Definition: inflate.h:82
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
int ZEXPORT inflateCopy ( z_streamp  dest,
z_streamp  source 
)
1441 {
1442  struct inflate_state FAR *state;
1443  struct inflate_state FAR *copy;
1444  unsigned char FAR *window;
1445  unsigned wsize;
1446 
1447  /* check input */
1448  if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
1449  source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
1450  return Z_STREAM_ERROR;
1451  state = (struct inflate_state FAR *)source->state;
1452 
1453  /* allocate space */
1454  copy = (struct inflate_state FAR *)
1455  ZALLOC(source, 1, sizeof(struct inflate_state));
1456  if (copy == Z_NULL) return Z_MEM_ERROR;
1457  window = Z_NULL;
1458  if (state->window != Z_NULL) {
1459  window = (unsigned char FAR *)
1460  ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
1461  if (window == Z_NULL) {
1462  ZFREE(source, copy);
1463  return Z_MEM_ERROR;
1464  }
1465  }
1466 
1467  /* copy state */
1468  zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
1469  zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
1470  if (state->lencode >= state->codes &&
1471  state->lencode <= state->codes + ENOUGH - 1) {
1472  copy->lencode = copy->codes + (state->lencode - state->codes);
1473  copy->distcode = copy->codes + (state->distcode - state->codes);
1474  }
1475  copy->next = copy->codes + (state->next - state->codes);
1476  if (window != Z_NULL) {
1477  wsize = 1U << state->wbits;
1478  zmemcpy(window, state->window, wsize);
1479  }
1480  copy->window = window;
1481  dest->state = (struct internal_state FAR *)copy;
1482  return Z_OK;
1483 }
voidpf(* alloc_func)()
Definition: zlib.h:80
Definition: inflate.h:81
void zmemcpy(Bytef *dest, const Bytef *source, uInt len)
Definition: zutil.c:152
unsigned wsize
Definition: inflate.h:93
#define ENOUGH
Definition: inftrees.h:51
Byte * voidpf
Definition: zconf.h:390
#define Z_STREAM_ERROR
Definition: zlib.h:177
free_func zfree
Definition: zlib.h:98
#define ZALLOC(strm, items, size)
Definition: zutil.h:244
#define ZFREE(strm, addr)
Definition: zutil.h:246
#define FAR
Definition: jmorecfg.h:215
alloc_func zalloc
Definition: zlib.h:97
#define Z_MEM_ERROR
Definition: zlib.h:179
Definition: deflate.h:97
unsigned char FAR * window
Definition: inflate.h:96
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
unsigned wbits
Definition: inflate.h:92
void(* free_func)()
Definition: zlib.h:81
Definition: zlib.h:85
int ZEXPORT inflateUndermine ( z_streamp  strm,
int  subvert 
)
1488 {
1489  struct inflate_state FAR *state;
1490 
1491  if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1492  state = (struct inflate_state FAR *)strm->state;
1493  state->sane = !subvert;
1494 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1495  return Z_OK;
1496 #else
1497  state->sane = 1;
1498  return Z_DATA_ERROR;
1499 #endif
1500 }
Definition: inflate.h:81
int sane
Definition: inflate.h:119
#define Z_STREAM_ERROR
Definition: zlib.h:177
#define Z_DATA_ERROR
Definition: zlib.h:178
#define FAR
Definition: jmorecfg.h:215
#define Z_OK
Definition: zlib.h:173
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
long ZEXPORT inflateMark ( z_streamp  strm)
1504 {
1505  struct inflate_state FAR *state;
1506 
1507  if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
1508  state = (struct inflate_state FAR *)strm->state;
1509  return ((long)(state->back) << 16) +
1510  (state->mode == COPY ? state->length :
1511  (state->mode == MATCH ? state->was - state->length : 0));
1512 }
Definition: inflate.h:36
Definition: inflate.h:81
#define FAR
Definition: jmorecfg.h:215
Definition: inflate.h:45
int back
Definition: inflate.h:120
inflate_mode mode
Definition: inflate.h:82
struct internal_state * state
Definition: zlib.h:95
#define Z_NULL
Definition: zlib.h:208
unsigned was
Definition: inflate.h:121
unsigned length
Definition: inflate.h:101