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); |