func: gint64 file_skip(FILE_T file,gint64 delta,int *err) return file_seek ( file , delta , 1 , err ) ; gint64 file_seek(FILE_T file,gint64 offset,int whence,int *err) struct fast_seek_point * here ; if ( whence == 0 )  offset -= file -> pos; if ( file -> seek )  offset += file -> skip; file -> seek = 0; if ( offset < 0 && file -> next )  unsigned int had = ( unsigned int ) ( file -> next - file -> out ) ; if ( - offset <= had )  if ( ( here = fast_seek_find ( file , file -> pos + offset ) ) && ( offset < 0 || offset > 1048576L || here -> compression == 1 ) )  static struct fast_seek_point *fast_seek_find(FILE_T file,gint64 pos) struct fast_seek_point * smallest = ( ( void * ) 0 ) ; struct fast_seek_point * item ; guint low ; guint i ; guint max ; if ( ! file -> fast_seek )  return ( ( void * ) 0 ) ; for ((low = 0 , max = file -> fast_seek -> len); low < max; ) i = ( low + max ) / 2; item = ( ( struct fast_seek_point * ) file -> fast_seek -> pdata [ i ] ); if ( pos < item -> out )  max = i; if ( pos > item -> out )  smallest = item; low = i + 1; return item ; return smallest ; gint64 off ; gint64 off2 ; if ( here -> compression == 2 )  off = here -> in - ( ( here -> data . zlib . bits ? 1 : 0 ) ); if ( here -> compression == 3 )  off = here -> in; off2 = file -> pos + offset; off = here -> in + ( off2 - here -> out ); if ( lseek ( file -> fd , off , 0 ) == ( - 1 ) )  file -> raw_pos = off; file -> have = 0; file -> eof = 0; file -> seek = 0; file -> err = 0; file -> err_info = ( ( void * ) 0 ); file -> avail_in = 0; if ( here -> compression == 2 )  if ( here -> data . zlib . bits )  FILE_T state = file ; int ret = state -> avail_in == 0 && fill_in_buffer ( state ) == - 1 ? - 1 : ( ( state -> avail_in == 0 ? - 1 : ( ( state -> avail_in -- , * ( state -> next_in ++ ) ) ) ) ) ; static int fill_in_buffer(FILE_T state) if ( state -> err )  if ( state -> eof == 0 )  if ( raw_read ( state , state -> in , state -> size , ( ( unsigned int * ) ( & state -> avail_in ) ) ) == - 1 )  static int raw_read(FILE_T state,unsigned char *buf,unsigned int count,unsigned int *have) int ret ; * have = 0; ret = ( read ( state -> fd , ( buf + * have ) , ( count - * have ) ) ); if ( ret <= 0 )  * have += ret; state -> raw_pos += ret; while ( * have < count )  if ( ret < 0 )  state -> err = * __errno_location ( ); state -> err_info = ( ( void * ) 0 ); if ( ret == 0 )  