|
|
@ -70,7 +70,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
|
|
|
code const FAR *dcode; /* local strm->distcode */ |
|
|
|
code const FAR *dcode; /* local strm->distcode */ |
|
|
|
unsigned lmask; /* mask for first level of length codes */ |
|
|
|
unsigned lmask; /* mask for first level of length codes */ |
|
|
|
unsigned dmask; /* mask for first level of distance codes */ |
|
|
|
unsigned dmask; /* mask for first level of distance codes */ |
|
|
|
code here; /* retrieved table entry */ |
|
|
|
code const *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 */ |
|
|
|
unsigned len; /* match length, unused bytes */ |
|
|
|
unsigned len; /* match length, unused bytes */ |
|
|
@ -107,20 +107,20 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
|
|
|
hold += (unsigned long)(*in++) << bits; |
|
|
|
hold += (unsigned long)(*in++) << bits; |
|
|
|
bits += 8; |
|
|
|
bits += 8; |
|
|
|
} |
|
|
|
} |
|
|
|
here = lcode[hold & lmask]; |
|
|
|
here = lcode + (hold & lmask); |
|
|
|
dolen: |
|
|
|
dolen: |
|
|
|
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 == 0) { /* literal */ |
|
|
|
if (op == 0) { /* literal */ |
|
|
|
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? |
|
|
|
Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ? |
|
|
|
"inflate: literal '%c'\n" : |
|
|
|
"inflate: literal '%c'\n" : |
|
|
|
"inflate: literal 0x%02x\n", here.val)); |
|
|
|
"inflate: literal 0x%02x\n", here->val)); |
|
|
|
*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) { |
|
|
@ -138,14 +138,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
|
|
|
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; |
|
|
@ -264,7 +264,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
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 { |
|
|
@ -274,7 +274,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
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 */ |
|
|
|