(deps/libz) Cleanups

This commit is contained in:
twinaphex 2020-07-02 18:55:54 +02:00
parent c86ba43c73
commit 1f86ea1c4c

131
deps/libz/inffast.c vendored
View File

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