From 0513ec136b8fb7e2c65e18e2a5bbc0ac597b64e9 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 10 Mar 2012 11:13:08 +0100 Subject: [PATCH] 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(). --- src/lib/empthread/io.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/lib/empthread/io.c b/src/lib/empthread/io.c index 47a2b1093..0e65c86ed 100644 --- a/src/lib/empthread/io.c +++ b/src/lib/empthread/io.c @@ -128,9 +128,8 @@ io_close(struct iop *iop) /* * Return number of bytes read on success, zero on timeout, early - * wakeup or EOF, -1 on error, with errno set appropriately. In - * particular, return -1 with errno set to EAGAIN or EWOULDBLOCK when - * no data is available for non-blocking input (WAITFORINPUT false). + * wakeup or EOF, -1 on error. In particular, return 0 when no data + * is available for non-blocking input (WAITFORINPUT false). * Use io_eof() to distinguish timeout and early wakeup from EOF. */ int @@ -140,14 +139,10 @@ io_input(struct iop *iop, int waitforinput) int cc; int res; - if ((iop->flags & IO_READ) == 0) { - errno = EBADF; + if ((iop->flags & IO_READ) == 0) return -1; - } - if (iop->flags & IO_ERROR) { - errno = EBADF; + if (iop->flags & IO_ERROR) return -1; - } if (iop->flags & IO_EOF) return 0; @@ -164,9 +159,9 @@ io_input(struct iop *iop, int waitforinput) /* Do the actual read. */ cc = read(iop->fd, buf, sizeof(buf)); if (cc < 0) { - if (errno != EAGAIN && errno != EWOULDBLOCK) - /* Some form of file error occurred... */ - iop->flags |= IO_ERROR; + if (errno == EAGAIN || errno == EWOULDBLOCK) + return 0; + iop->flags |= IO_ERROR; return -1; } -- 2.43.0