diff options
Diffstat (limited to 'lib/libalpm')
-rw-r--r-- | lib/libalpm/util.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index 4a4847de..1e554632 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -446,6 +446,16 @@ ssize_t _alpm_files_in_directory(alpm_handle_t *handle, const char *path, return files; } +static int should_retry(int errnum) +{ + return errnum == EAGAIN +/* EAGAIN may be the same value as EWOULDBLOCK (POSIX.1) - prevent GCC warning */ +#if EAGAIN != EWOULDBLOCK + || errnum == EWOULDBLOCK +#endif + || errnum == EINTR; +} + static int _alpm_chroot_write_to_child(alpm_handle_t *handle, int fd, char *buf, ssize_t *buf_size, ssize_t buf_limit, _alpm_cb_io out_cb, void *cb_ctx) @@ -476,7 +486,7 @@ static int _alpm_chroot_write_to_child(alpm_handle_t *handle, int fd, /* write was successful, remove the written data from the buffer */ *buf_size -= nwrite; memmove(buf, buf + nwrite, *buf_size); - } else if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) { + } else if(should_retry(errno)) { /* nothing written, try again later */ } else { _alpm_log(handle, ALPM_LOG_ERROR, @@ -530,7 +540,7 @@ static int _alpm_chroot_read_from_child(alpm_handle_t *handle, int fd, _alpm_chroot_process_output(handle, buf); } return -1; - } else if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) { + } else if(should_retry(errno)) { /* nothing read, try again */ } else { /* read error */ |