if (fp->_IO_read_end < fp->_IO_buf_end) {  char ignore[1]; read (fp->_fileno, ignore, 1);
if (fp->_IO_read_ptr < fp->_IO_read_end) return *(unsigned char *) fp->_IO_read_ptr;
_IO_file_underflow_mmap (_IO_FILE *fp){  if (fp->_IO_read_end < fp->_IO_buf_end)    {      /* A stupid requirement in POSIX says that the first read on a	 stream must update the atime.  Just read a single byte.  We	 don't have to worry about repositioning the file descriptor	 since the following seek defines its position anyway.  */      char ignore[1];      read (fp->_fileno, ignore, 1);      if (# ifdef _G_LSEEK64	  _G_LSEEK64 (fp->_fileno, fp->_IO_buf_end - fp->_IO_buf_base,		      SEEK_SET)# else	  __lseek (fp->_fileno, fp->_IO_buf_end - fp->_IO_buf_base, SEEK_SET)# endif	  != fp->_IO_buf_end - fp->_IO_buf_base)	{	  fp->_flags |= _IO_ERR_SEEN;	  return EOF;	}      fp->_offset = fp->_IO_buf_end - fp->_IO_buf_base;      fp->_IO_read_end = fp->_IO_buf_end;      return *(unsigned char *) fp->_IO_read_ptr;    }  fp->_flags |= _IO_EOF_SEEN;  return EOF;}