Clean up io_input() for the "no input available" case
Return zero when no input is available, regardless of parameter waitforinput. Before, it returned -1 with errno set to EAGAIN or EWOULDBLOCK when not waiting for input. Current callers all wait. Drop errno from the function's contract, for consistency with io_output().
This commit is contained in:
parent
5501efa278
commit
0513ec136b
1 changed files with 7 additions and 12 deletions
|
@ -128,9 +128,8 @@ io_close(struct iop *iop)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return number of bytes read on success, zero on timeout, early
|
* Return number of bytes read on success, zero on timeout, early
|
||||||
* wakeup or EOF, -1 on error, with errno set appropriately. In
|
* wakeup or EOF, -1 on error. In particular, return 0 when no data
|
||||||
* particular, return -1 with errno set to EAGAIN or EWOULDBLOCK when
|
* is available for non-blocking input (WAITFORINPUT false).
|
||||||
* no data is available for non-blocking input (WAITFORINPUT false).
|
|
||||||
* Use io_eof() to distinguish timeout and early wakeup from EOF.
|
* Use io_eof() to distinguish timeout and early wakeup from EOF.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
|
@ -140,14 +139,10 @@ io_input(struct iop *iop, int waitforinput)
|
||||||
int cc;
|
int cc;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if ((iop->flags & IO_READ) == 0) {
|
if ((iop->flags & IO_READ) == 0)
|
||||||
errno = EBADF;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
if (iop->flags & IO_ERROR)
|
||||||
if (iop->flags & IO_ERROR) {
|
|
||||||
errno = EBADF;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
if (iop->flags & IO_EOF)
|
if (iop->flags & IO_EOF)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -164,9 +159,9 @@ io_input(struct iop *iop, int waitforinput)
|
||||||
/* Do the actual read. */
|
/* Do the actual read. */
|
||||||
cc = read(iop->fd, buf, sizeof(buf));
|
cc = read(iop->fd, buf, sizeof(buf));
|
||||||
if (cc < 0) {
|
if (cc < 0) {
|
||||||
if (errno != EAGAIN && errno != EWOULDBLOCK)
|
if (errno == EAGAIN || errno == EWOULDBLOCK)
|
||||||
/* Some form of file error occurred... */
|
return 0;
|
||||||
iop->flags |= IO_ERROR;
|
iop->flags |= IO_ERROR;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue