func: int file_getc(FILE_T file) unsigned char buf [ 1 ] ; int ret ; if ( file -> err )  if ( file -> have )  file -> have --; file -> pos ++; return ( * ( file -> next ++ ) ) ; ret = file_read ( buf , 1 , file ); int file_read(void *buf,unsigned int len,FILE_T file) unsigned int n ; if ( len == 0 )  if ( file -> seek )  file -> seek = 0; if ( gz_skip ( file , file -> skip ) == - 1 )  if ( file -> have )  n = ( file -> have > len ? len : file -> have ); file -> next += n; file -> have -= n; if ( file -> err )  if ( file -> eof && file -> avail_in == 0 )  if ( fill_out_buffer ( file ) == - 1 )  len -= n; file -> pos += n; while ( len )  static int fill_out_buffer(FILE_T state) if ( state -> compression == 0 )  if ( gz_head ( state ) == - 1 )  if ( state -> have )  if ( state -> compression == 1 )  if ( raw_read ( state , state -> out , state -> size , & state -> have ) == - 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 )  