- /* No need to handle buffers > INT_MAX, as PDCLib doesn't allow them */
- ssize_t rc = read( stream->handle, stream->buffer, stream->bufsize );
- if ( rc > 0 )
- {
- /* Reading successful. */
- if ( ! ( stream->status & _PDCLIB_FBIN ) )
- {
- /* TODO: Text stream conversion here */
- }
- stream->pos.offset += rc;
- stream->bufend = rc;
- stream->bufidx = 0;
- return 0;
- }
- if ( rc < 0 )
- {
- /* Reading error */
- switch ( errno )
- {
- case EBADF:
- case EFAULT:
- case EINTR:
- case EINVAL:
- case EIO:
- _PDCLIB_errno = _PDCLIB_EIO;
- break;
- default:
- _PDCLIB_errno = _PDCLIB_EUNKNOWN;
- break;
- }
- stream->status |= _PDCLIB_ERRORFLAG;
- return EOF;
- }
- /* End-of-File */