mirror of
https://github.com/libretro/RetroArch
synced 2025-04-09 21:45:45 +00:00
(deps/libz) Cleanups
This commit is contained in:
parent
c86ba43c73
commit
1f86ea1c4c
131
deps/libz/inffast.c
vendored
131
deps/libz/inffast.c
vendored
@ -47,18 +47,6 @@ output space.
|
|||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start)
|
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start)
|
||||||
{
|
{
|
||||||
unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
|
|
||||||
unsigned char FAR *end; /* while out < end, enough space available */
|
|
||||||
unsigned wsize; /* window size or zero if not using window */
|
|
||||||
unsigned whave; /* valid bytes in the window */
|
|
||||||
unsigned wnext; /* window write index */
|
|
||||||
unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
|
|
||||||
unsigned long hold; /* local strm->hold */
|
|
||||||
unsigned bits; /* local strm->bits */
|
|
||||||
code const FAR *lcode; /* local strm->lencode */
|
|
||||||
code const FAR *dcode; /* local strm->distcode */
|
|
||||||
unsigned lmask; /* mask for first level of length codes */
|
|
||||||
unsigned dmask; /* mask for first level of distance codes */
|
|
||||||
code here; /* retrieved table entry */
|
code here; /* retrieved table entry */
|
||||||
unsigned op; /* code bits, operation, extra bits, or */
|
unsigned op; /* code bits, operation, extra bits, or */
|
||||||
/* window position, window bytes to copy */
|
/* window position, window bytes to copy */
|
||||||
@ -69,25 +57,27 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start)
|
|||||||
/* copy state to local variables */
|
/* copy state to local variables */
|
||||||
struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state;
|
struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state;
|
||||||
unsigned char FAR *in = strm->next_in;
|
unsigned char FAR *in = strm->next_in;
|
||||||
unsigned char FAR *last = last = in + (strm->avail_in - 5);
|
unsigned char FAR *last = in + (strm->avail_in - 5);
|
||||||
unsigned char FAR *out = strm->next_out;
|
unsigned char FAR *out = strm->next_out;
|
||||||
beg = out - (start - strm->avail_out);
|
unsigned char FAR *beg = out - (start - strm->avail_out);
|
||||||
end = out + (strm->avail_out - 257);
|
unsigned char FAR *end = out + (strm->avail_out - 257);
|
||||||
wsize = state->wsize;
|
unsigned wsize = state->wsize;
|
||||||
whave = state->whave;
|
unsigned whave = state->whave;
|
||||||
wnext = state->wnext;
|
unsigned wnext = state->wnext;
|
||||||
window = state->window;
|
unsigned char FAR *window = state->window;
|
||||||
hold = state->hold;
|
unsigned long hold = state->hold;
|
||||||
bits = state->bits;
|
unsigned bits = state->bits;
|
||||||
lcode = state->lencode;
|
code const FAR *lcode = state->lencode;
|
||||||
dcode = state->distcode;
|
code const FAR *dcode = state->distcode;
|
||||||
lmask = (1U << state->lenbits) - 1;
|
unsigned lmask = (1U << state->lenbits) - 1;
|
||||||
dmask = (1U << state->distbits) - 1;
|
unsigned dmask = (1U << state->distbits) - 1;
|
||||||
|
|
||||||
/* decode literals and length/distances until end-of-block or not enough
|
/* decode literals and length/distances until end-of-block or not enough
|
||||||
input data or output space */
|
input data or output space */
|
||||||
do {
|
do
|
||||||
if (bits < 15) {
|
{
|
||||||
|
if (bits < 15)
|
||||||
|
{
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
@ -99,14 +89,16 @@ dolen:
|
|||||||
hold >>= op;
|
hold >>= op;
|
||||||
bits -= op;
|
bits -= op;
|
||||||
op = (unsigned)(here.op);
|
op = (unsigned)(here.op);
|
||||||
if (op == 0) { /* literal */
|
if (op == 0) /* literal */
|
||||||
*out++ = (unsigned char)(here.val);
|
*out++ = (unsigned char)(here.val);
|
||||||
}
|
else if (op & 16) /* length base */
|
||||||
else if (op & 16) { /* length base */
|
{
|
||||||
len = (unsigned)(here.val);
|
len = (unsigned)(here.val);
|
||||||
op &= 15; /* number of extra bits */
|
op &= 15; /* number of extra bits */
|
||||||
if (op) {
|
if (op)
|
||||||
if (bits < op) {
|
{
|
||||||
|
if (bits < op)
|
||||||
|
{
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
}
|
}
|
||||||
@ -114,25 +106,32 @@ dolen:
|
|||||||
hold >>= op;
|
hold >>= op;
|
||||||
bits -= op;
|
bits -= op;
|
||||||
}
|
}
|
||||||
if (bits < 15) {
|
|
||||||
|
if (bits < 15)
|
||||||
|
{
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
here = dcode[hold & dmask];
|
here = dcode[hold & dmask];
|
||||||
|
|
||||||
dodist:
|
dodist:
|
||||||
op = (unsigned)(here.bits);
|
op = (unsigned)(here.bits);
|
||||||
hold >>= op;
|
hold >>= op;
|
||||||
bits -= op;
|
bits -= op;
|
||||||
op = (unsigned)(here.op);
|
op = (unsigned)(here.op);
|
||||||
if (op & 16) { /* distance base */
|
if (op & 16) /* distance base */
|
||||||
|
{
|
||||||
dist = (unsigned)(here.val);
|
dist = (unsigned)(here.val);
|
||||||
op &= 15; /* number of extra bits */
|
op &= 15; /* number of extra bits */
|
||||||
if (bits < op) {
|
if (bits < op)
|
||||||
|
{
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
if (bits < op) {
|
if (bits < op)
|
||||||
|
{
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
}
|
}
|
||||||
@ -141,10 +140,13 @@ dodist:
|
|||||||
hold >>= op;
|
hold >>= op;
|
||||||
bits -= op;
|
bits -= op;
|
||||||
op = (unsigned)(out - beg); /* max distance in output */
|
op = (unsigned)(out - beg); /* max distance in output */
|
||||||
if (dist > op) { /* see if copy from window */
|
if (dist > op) /* see if copy from window */
|
||||||
|
{
|
||||||
op = dist - op; /* distance back in window */
|
op = dist - op; /* distance back in window */
|
||||||
if (op > whave) {
|
if (op > whave)
|
||||||
if (state->sane) {
|
{
|
||||||
|
if (state->sane)
|
||||||
|
{
|
||||||
strm->msg =
|
strm->msg =
|
||||||
(char *)"invalid distance too far back";
|
(char *)"invalid distance too far back";
|
||||||
state->mode = BAD;
|
state->mode = BAD;
|
||||||
@ -152,9 +154,11 @@ dodist:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
from = window;
|
from = window;
|
||||||
if (wnext == 0) { /* very common case */
|
if (wnext == 0) /* very common case */
|
||||||
|
{
|
||||||
from += wsize - op;
|
from += wsize - op;
|
||||||
if (op < len) { /* some from window */
|
if (op < len) /* some from window */
|
||||||
|
{
|
||||||
len -= op;
|
len -= op;
|
||||||
do {
|
do {
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
@ -162,16 +166,19 @@ dodist:
|
|||||||
from = out - dist; /* rest from output */
|
from = out - dist; /* rest from output */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (wnext < op) { /* wrap around window */
|
else if (wnext < op) /* wrap around window */
|
||||||
|
{
|
||||||
from += wsize + wnext - op;
|
from += wsize + wnext - op;
|
||||||
op -= wnext;
|
op -= wnext;
|
||||||
if (op < len) { /* some from end of window */
|
if (op < len) /* some from end of window */
|
||||||
|
{
|
||||||
len -= op;
|
len -= op;
|
||||||
do {
|
do {
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
} while (--op);
|
} while (--op);
|
||||||
from = window;
|
from = window;
|
||||||
if (wnext < len) { /* some from start of window */
|
if (wnext < len) /* some from start of window */
|
||||||
|
{
|
||||||
op = wnext;
|
op = wnext;
|
||||||
len -= op;
|
len -= op;
|
||||||
do {
|
do {
|
||||||
@ -181,9 +188,11 @@ dodist:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* contiguous in window */
|
else /* contiguous in window */
|
||||||
|
{
|
||||||
from += wnext - op;
|
from += wnext - op;
|
||||||
if (op < len) { /* some from window */
|
if (op < len) /* some from window */
|
||||||
|
{
|
||||||
len -= op;
|
len -= op;
|
||||||
do {
|
do {
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
@ -191,19 +200,24 @@ dodist:
|
|||||||
from = out - dist; /* rest from output */
|
from = out - dist; /* rest from output */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (len > 2) {
|
|
||||||
|
while (len > 2)
|
||||||
|
{
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
len -= 3;
|
len -= 3;
|
||||||
}
|
}
|
||||||
if (len) {
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
if (len > 1)
|
if (len > 1)
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
from = out - dist; /* copy direct from output */
|
from = out - dist; /* copy direct from output */
|
||||||
do { /* minimum length is three */
|
do { /* minimum length is three */
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
@ -211,32 +225,39 @@ dodist:
|
|||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
len -= 3;
|
len -= 3;
|
||||||
}while(len > 2);
|
}while(len > 2);
|
||||||
if (len) {
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
if (len > 1)
|
if (len > 1)
|
||||||
*out++ = *from++;
|
*out++ = *from++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((op & 64) == 0) { /* 2nd level distance code */
|
else if ((op & 64) == 0) /* 2nd level distance code */
|
||||||
|
{
|
||||||
here = dcode[here.val + (hold & ((1U << op) - 1))];
|
here = dcode[here.val + (hold & ((1U << op) - 1))];
|
||||||
goto dodist;
|
goto dodist;
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
strm->msg = (char *)"invalid distance code";
|
strm->msg = (char *)"invalid distance code";
|
||||||
state->mode = BAD;
|
state->mode = BAD;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((op & 64) == 0) { /* 2nd level length code */
|
else if ((op & 64) == 0) /* 2nd level length code */
|
||||||
|
{
|
||||||
here = lcode[here.val + (hold & ((1U << op) - 1))];
|
here = lcode[here.val + (hold & ((1U << op) - 1))];
|
||||||
goto dolen;
|
goto dolen;
|
||||||
}
|
}
|
||||||
else if (op & 32) { /* end-of-block */
|
else if (op & 32) /* end-of-block */
|
||||||
|
{
|
||||||
state->mode = TYPE;
|
state->mode = TYPE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
strm->msg = (char *)"invalid literal/length code";
|
strm->msg = (char *)"invalid literal/length code";
|
||||||
state->mode = BAD;
|
state->mode = BAD;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user