| Index: third_party/zlib/inflate.c
|
| diff --git a/third_party/zlib/inflate.c b/third_party/zlib/inflate.c
|
| index 870f89bb4d3646684bf37e2144c4b83c808ab84d..a8431abeacffd97e5028a9e54135a5f173528960 100644
|
| --- a/third_party/zlib/inflate.c
|
| +++ b/third_party/zlib/inflate.c
|
| @@ -1,5 +1,5 @@
|
| /* inflate.c -- zlib decompression
|
| - * Copyright (C) 1995-2012 Mark Adler
|
| + * Copyright (C) 1995-2010 Mark Adler
|
| * For conditions of distribution and use, see copyright notice in zlib.h
|
| */
|
|
|
| @@ -93,15 +93,14 @@
|
|
|
| /* function prototypes */
|
| local void fixedtables OF((struct inflate_state FAR *state));
|
| -local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
|
| - unsigned copy));
|
| +local int updatewindow OF((z_streamp strm, unsigned out));
|
| #ifdef BUILDFIXED
|
| void makefixed OF((void));
|
| #endif
|
| -local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
|
| +local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
|
| unsigned len));
|
|
|
| -int ZEXPORT inflateResetKeep(strm)
|
| +int ZEXPORT inflateReset(strm)
|
| z_streamp strm;
|
| {
|
| struct inflate_state FAR *state;
|
| @@ -110,13 +109,15 @@
|
| state = (struct inflate_state FAR *)strm->state;
|
| strm->total_in = strm->total_out = state->total = 0;
|
| strm->msg = Z_NULL;
|
| - if (state->wrap) /* to support ill-conceived Java test suite */
|
| - strm->adler = state->wrap & 1;
|
| + strm->adler = 1; /* to support ill-conceived Java test suite */
|
| state->mode = HEAD;
|
| state->last = 0;
|
| state->havedict = 0;
|
| state->dmax = 32768U;
|
| state->head = Z_NULL;
|
| + state->wsize = 0;
|
| + state->whave = 0;
|
| + state->wnext = 0;
|
| state->hold = 0;
|
| state->bits = 0;
|
| state->lencode = state->distcode = state->next = state->codes;
|
| @@ -126,19 +127,6 @@
|
| return Z_OK;
|
| }
|
|
|
| -int ZEXPORT inflateReset(strm)
|
| -z_streamp strm;
|
| -{
|
| - struct inflate_state FAR *state;
|
| -
|
| - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
| - state = (struct inflate_state FAR *)strm->state;
|
| - state->wsize = 0;
|
| - state->whave = 0;
|
| - state->wnext = 0;
|
| - return inflateResetKeep(strm);
|
| -}
|
| -
|
| int ZEXPORT inflateReset2(strm, windowBits)
|
| z_streamp strm;
|
| int windowBits;
|
| @@ -192,19 +180,10 @@
|
| if (strm == Z_NULL) return Z_STREAM_ERROR;
|
| strm->msg = Z_NULL; /* in case we return an error */
|
| if (strm->zalloc == (alloc_func)0) {
|
| -#ifdef Z_SOLO
|
| - return Z_STREAM_ERROR;
|
| -#else
|
| strm->zalloc = zcalloc;
|
| strm->opaque = (voidpf)0;
|
| -#endif
|
| - }
|
| - if (strm->zfree == (free_func)0)
|
| -#ifdef Z_SOLO
|
| - return Z_STREAM_ERROR;
|
| -#else
|
| - strm->zfree = zcfree;
|
| -#endif
|
| + }
|
| + if (strm->zfree == (free_func)0) strm->zfree = zcfree;
|
| state = (struct inflate_state FAR *)
|
| ZALLOC(strm, 1, sizeof(struct inflate_state));
|
| if (state == Z_NULL) return Z_MEM_ERROR;
|
| @@ -342,8 +321,8 @@
|
| low = 0;
|
| for (;;) {
|
| if ((low % 7) == 0) printf("\n ");
|
| - printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
|
| - state.lencode[low].bits, state.lencode[low].val);
|
| + printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
|
| + state.lencode[low].val);
|
| if (++low == size) break;
|
| putchar(',');
|
| }
|
| @@ -376,13 +355,12 @@
|
| output will fall in the output data, making match copies simpler and faster.
|
| The advantage may be dependent on the size of the processor's data caches.
|
| */
|
| -local int updatewindow(strm, end, copy)
|
| +local int updatewindow(strm, out)
|
| z_streamp strm;
|
| -const Bytef *end;
|
| -unsigned copy;
|
| +unsigned out;
|
| {
|
| struct inflate_state FAR *state;
|
| - unsigned dist;
|
| + unsigned copy, dist;
|
|
|
| state = (struct inflate_state FAR *)strm->state;
|
|
|
| @@ -402,18 +380,19 @@
|
| }
|
|
|
| /* copy state->wsize or less output bytes into the circular window */
|
| + copy = out - strm->avail_out;
|
| if (copy >= state->wsize) {
|
| - zmemcpy(state->window, end - state->wsize, state->wsize);
|
| + zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
|
| state->wnext = 0;
|
| state->whave = state->wsize;
|
| }
|
| else {
|
| dist = state->wsize - state->wnext;
|
| if (dist > copy) dist = copy;
|
| - zmemcpy(state->window + state->wnext, end - copy, dist);
|
| + zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);
|
| copy -= dist;
|
| if (copy) {
|
| - zmemcpy(state->window, end - copy, copy);
|
| + zmemcpy(state->window, strm->next_out - copy, copy);
|
| state->wnext = copy;
|
| state->whave = state->wsize;
|
| }
|
| @@ -520,6 +499,11 @@
|
| bits -= bits & 7; \
|
| } while (0)
|
|
|
| +/* Reverse the bytes in a 32-bit value */
|
| +#define REVERSE(q) \
|
| + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
|
| + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
|
| +
|
| /*
|
| inflate() uses a state machine to process as much input data and generate as
|
| much output data as possible before returning. The state machine is
|
| @@ -607,7 +591,7 @@
|
| int flush;
|
| {
|
| struct inflate_state FAR *state;
|
| - z_const unsigned char FAR *next; /* next input */
|
| + unsigned char FAR *next; /* next input */
|
| unsigned char FAR *put; /* next output */
|
| unsigned have, left; /* available input and output */
|
| unsigned long hold; /* bit buffer */
|
| @@ -813,7 +797,7 @@
|
| #endif
|
| case DICTID:
|
| NEEDBITS(32);
|
| - strm->adler = state->check = ZSWAP32(hold);
|
| + strm->adler = state->check = REVERSE(hold);
|
| INITBITS();
|
| state->mode = DICT;
|
| case DICT:
|
| @@ -921,7 +905,7 @@
|
| while (state->have < 19)
|
| state->lens[order[state->have++]] = 0;
|
| state->next = state->codes;
|
| - state->lencode = (const code FAR *)(state->next);
|
| + state->lencode = (code const FAR *)(state->next);
|
| state->lenbits = 7;
|
| ret = inflate_table(CODES, state->lens, 19, &(state->next),
|
| &(state->lenbits), state->work);
|
| @@ -941,6 +925,7 @@
|
| PULLBYTE();
|
| }
|
| if (here.val < 16) {
|
| + NEEDBITS(here.bits);
|
| DROPBITS(here.bits);
|
| state->lens[state->have++] = here.val;
|
| }
|
| @@ -995,7 +980,7 @@
|
| values here (9 and 6) without reading the comments in inftrees.h
|
| concerning the ENOUGH constants, which depend on those values */
|
| state->next = state->codes;
|
| - state->lencode = (const code FAR *)(state->next);
|
| + state->lencode = (code const FAR *)(state->next);
|
| state->lenbits = 9;
|
| ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
|
| &(state->lenbits), state->work);
|
| @@ -1004,7 +989,7 @@
|
| state->mode = BAD;
|
| break;
|
| }
|
| - state->distcode = (const code FAR *)(state->next);
|
| + state->distcode = (code const FAR *)(state->next);
|
| state->distbits = 6;
|
| ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
|
| &(state->next), &(state->distbits), state->work);
|
| @@ -1185,7 +1170,7 @@
|
| #ifdef GUNZIP
|
| state->flags ? hold :
|
| #endif
|
| - ZSWAP32(hold)) != state->check) {
|
| + REVERSE(hold)) != state->check) {
|
| strm->msg = (char *)"incorrect data check";
|
| state->mode = BAD;
|
| break;
|
| @@ -1229,9 +1214,8 @@
|
| */
|
| inf_leave:
|
| RESTORE();
|
| - if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
|
| - (state->mode < CHECK || flush != Z_FINISH)))
|
| - if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
|
| + if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
|
| + if (updatewindow(strm, out)) {
|
| state->mode = MEM;
|
| return Z_MEM_ERROR;
|
| }
|
| @@ -1265,37 +1249,13 @@
|
| return Z_OK;
|
| }
|
|
|
| -int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
|
| -z_streamp strm;
|
| -Bytef *dictionary;
|
| -uInt *dictLength;
|
| -{
|
| - struct inflate_state FAR *state;
|
| -
|
| - /* check state */
|
| - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
| - state = (struct inflate_state FAR *)strm->state;
|
| -
|
| - /* copy dictionary */
|
| - if (state->whave && dictionary != Z_NULL) {
|
| - zmemcpy(dictionary, state->window + state->wnext,
|
| - state->whave - state->wnext);
|
| - zmemcpy(dictionary + state->whave - state->wnext,
|
| - state->window, state->wnext);
|
| - }
|
| - if (dictLength != Z_NULL)
|
| - *dictLength = state->whave;
|
| - return Z_OK;
|
| -}
|
| -
|
| int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
|
| z_streamp strm;
|
| const Bytef *dictionary;
|
| uInt dictLength;
|
| {
|
| struct inflate_state FAR *state;
|
| - unsigned long dictid;
|
| - int ret;
|
| + unsigned long id;
|
|
|
| /* check state */
|
| if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
|
| @@ -1303,20 +1263,28 @@
|
| if (state->wrap != 0 && state->mode != DICT)
|
| return Z_STREAM_ERROR;
|
|
|
| - /* check for correct dictionary identifier */
|
| + /* check for correct dictionary id */
|
| if (state->mode == DICT) {
|
| - dictid = adler32(0L, Z_NULL, 0);
|
| - dictid = adler32(dictid, dictionary, dictLength);
|
| - if (dictid != state->check)
|
| + id = adler32(0L, Z_NULL, 0);
|
| + id = adler32(id, dictionary, dictLength);
|
| + if (id != state->check)
|
| return Z_DATA_ERROR;
|
| }
|
|
|
| - /* copy dictionary to window using updatewindow(), which will amend the
|
| - existing dictionary if appropriate */
|
| - ret = updatewindow(strm, dictionary + dictLength, dictLength);
|
| - if (ret) {
|
| + /* copy dictionary to window */
|
| + if (updatewindow(strm, strm->avail_out)) {
|
| state->mode = MEM;
|
| return Z_MEM_ERROR;
|
| + }
|
| + if (dictLength > state->wsize) {
|
| + zmemcpy(state->window, dictionary + dictLength - state->wsize,
|
| + state->wsize);
|
| + state->whave = state->wsize;
|
| + }
|
| + else {
|
| + zmemcpy(state->window + state->wsize - dictLength, dictionary,
|
| + dictLength);
|
| + state->whave = dictLength;
|
| }
|
| state->havedict = 1;
|
| Tracev((stderr, "inflate: dictionary set\n"));
|
| @@ -1353,7 +1321,7 @@
|
| */
|
| local unsigned syncsearch(have, buf, len)
|
| unsigned FAR *have;
|
| -const unsigned char FAR *buf;
|
| +unsigned char FAR *buf;
|
| unsigned len;
|
| {
|
| unsigned got;
|
| @@ -1465,8 +1433,8 @@
|
| }
|
|
|
| /* copy state */
|
| - zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
|
| - zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
|
| + zmemcpy(dest, source, sizeof(z_stream));
|
| + zmemcpy(copy, state, sizeof(struct inflate_state));
|
| if (state->lencode >= state->codes &&
|
| state->lencode <= state->codes + ENOUGH - 1) {
|
| copy->lencode = copy->codes + (state->lencode - state->codes);
|
|
|