diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-12-12 03:12:58 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-12-12 13:35:32 +0100 |
commit | 6ce830fa612ca3f3159253c4c37aa9c81e7178ea (patch) | |
tree | 35eb14462ab4957cd0c6175538fa8c54ad0c660a /src/shared/util.c | |
parent | 0c3c42847da2f614f1a3f93c7cc96cd241e17e3a (diff) |
util: minor simplification for loop_write() and loop_read()
Diffstat (limited to 'src/shared/util.c')
-rw-r--r-- | src/shared/util.c | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index 273552f622..254b5637ae 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -2268,21 +2268,25 @@ ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) { ssize_t k; k = read(fd, p, nbytes); - if (k < 0 && errno == EINTR) - continue; + if (k < 0) { + if (errno == EINTR) + continue; - if (k < 0 && errno == EAGAIN && do_poll) { + if (errno == EAGAIN && do_poll) { - /* We knowingly ignore any return value here, - * and expect that any error/EOF is reported - * via read() */ + /* We knowingly ignore any return value here, + * and expect that any error/EOF is reported + * via read() */ - fd_wait_for_event(fd, POLLIN, USEC_INFINITY); - continue; + fd_wait_for_event(fd, POLLIN, USEC_INFINITY); + continue; + } + + return n > 0 ? n : -errno; } - if (k <= 0) - return n > 0 ? n : (k < 0 ? -errno : 0); + if (k == 0) + return n; p += k; nbytes -= k; @@ -2294,7 +2298,6 @@ ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) { int loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) { const uint8_t *p = buf; - ssize_t n = 0; assert(fd >= 0); assert(buf); @@ -2305,26 +2308,27 @@ int loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) { ssize_t k; k = write(fd, p, nbytes); - if (k < 0 && errno == EINTR) - continue; + if (k < 0) { + if (errno == EINTR) + continue; - if (k < 0 && errno == EAGAIN && do_poll) { + if (errno == EAGAIN && do_poll) { + /* We knowingly ignore any return value here, + * and expect that any error/EOF is reported + * via write() */ - /* We knowingly ignore any return value here, - * and expect that any error/EOF is reported - * via write() */ + fd_wait_for_event(fd, POLLOUT, USEC_INFINITY); + continue; + } - fd_wait_for_event(fd, POLLOUT, USEC_INFINITY); - continue; + return -errno; } - if (k <= 0) - /* We were not done yet, and a write error occured. */ - return errno ? -errno : -EIO; + if (k == 0) /* Can't really happen */ + return -EIO; p += k; nbytes -= k; - n += k; } return 0; |