@ -93,11 +93,12 @@
/* function prototypes */
local void fixedtables OF ( ( struct inflate_state FAR * state ) ) ;
local int updatewindow OF ( ( z_streamp strm , unsigned out ) ) ;
local int updatewindow OF ( ( z_streamp strm , const unsigned char FAR * end ,
unsigned copy ) ) ;
# ifdef BUILDFIXED
void makefixed OF ( ( void ) ) ;
# endif
local unsigned syncsearch OF ( ( unsigned FAR * have , unsigned char FAR * buf ,
local unsigned syncsearch OF ( ( unsigned FAR * have , const unsigned char FAR * buf ,
unsigned len ) ) ;
int ZEXPORT inflateResetKeep ( strm )
@ -375,12 +376,13 @@ void makefixed()
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 , out )
local int updatewindow ( strm , end , copy )
z_streamp strm ;
unsigned out ;
const Bytef * end ;
unsigned copy ;
{
struct inflate_state FAR * state ;
unsigned copy , dist ;
unsigned dist ;
state = ( struct inflate_state FAR * ) strm - > state ;
@ -400,19 +402,18 @@ unsigned out;
}
/* copy state->wsize or less output bytes into the circular window */
copy = out - strm - > avail_out ;
if ( copy > = state - > wsize ) {
zmemcpy ( state - > window , strm - > next_out - state - > wsize , state - > wsize ) ;
zmemcpy ( state - > window , end - 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 , strm - > next_out - copy , dist ) ;
zmemcpy ( state - > window + state - > wnext , end - copy , dist ) ;
copy - = dist ;
if ( copy ) {
zmemcpy ( state - > window , strm - > next_out - copy , copy ) ;
zmemcpy ( state - > window , end - copy , copy ) ;
state - > wnext = copy ;
state - > whave = state - > wsize ;
}
@ -606,7 +607,7 @@ z_streamp strm;
int flush ;
{
struct inflate_state FAR * state ;
unsigned char FAR * next ; /* next input */
z_const unsigned char FAR * next ; /* next input */
unsigned char FAR * put ; /* next output */
unsigned have , left ; /* available input and output */
unsigned long hold ; /* bit buffer */
@ -920,7 +921,7 @@ int flush;
while ( state - > have < 19 )
state - > lens [ order [ state - > have + + ] ] = 0 ;
state - > next = state - > codes ;
state - > lencode = ( code const FAR * ) ( state - > next ) ;
state - > lencode = ( const code FAR * ) ( state - > next ) ;
state - > lenbits = 7 ;
ret = inflate_table ( CODES , state - > lens , 19 , & ( state - > next ) ,
& ( state - > lenbits ) , state - > work ) ;
@ -994,7 +995,7 @@ int flush;
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 = ( code const FAR * ) ( state - > next ) ;
state - > lencode = ( const code FAR * ) ( state - > next ) ;
state - > lenbits = 9 ;
ret = inflate_table ( LENS , state - > lens , state - > nlen , & ( state - > next ) ,
& ( state - > lenbits ) , state - > work ) ;
@ -1003,7 +1004,7 @@ int flush;
state - > mode = BAD ;
break ;
}
state - > distcode = ( code const FAR * ) ( state - > next ) ;
state - > distcode = ( const code FAR * ) ( state - > next ) ;
state - > distbits = 6 ;
ret = inflate_table ( DISTS , state - > lens + state - > nlen , state - > ndist ,
& ( state - > next ) , & ( state - > distbits ) , state - > work ) ;
@ -1230,7 +1231,7 @@ int flush;
RESTORE ( ) ;
if ( state - > wsize | | ( out ! = strm - > avail_out & & state - > mode < BAD & &
( state - > mode < CHECK | | flush ! = Z_FINISH ) ) )
if ( updatewindow ( strm , out ) ) {
if ( updatewindow ( strm , strm - > next_out , out - strm - > avail_ out) ) {
state - > mode = MEM ;
return Z_MEM_ERROR ;
}
@ -1294,8 +1295,6 @@ uInt dictLength;
{
struct inflate_state FAR * state ;
unsigned long dictid ;
unsigned char * next ;
unsigned avail ;
int ret ;
/* check state */
@ -1314,13 +1313,7 @@ uInt dictLength;
/* copy dictionary to window using updatewindow(), which will amend the
existing dictionary if appropriate */
next = strm - > next_out ;
avail = strm - > avail_out ;
strm - > next_out = ( Bytef * ) dictionary + dictLength ;
strm - > avail_out = 0 ;
ret = updatewindow ( strm , dictLength ) ;
strm - > avail_out = avail ;
strm - > next_out = next ;
ret = updatewindow ( strm , dictionary + dictLength , dictLength ) ;
if ( ret ) {
state - > mode = MEM ;
return Z_MEM_ERROR ;
@ -1360,7 +1353,7 @@ gz_headerp head;
*/
local unsigned syncsearch ( have , buf , len )
unsigned FAR * have ;
unsigned char FAR * buf ;
const unsigned char FAR * buf ;
unsigned len ;
{
unsigned got ;