summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2016-05-04 09:39:34 +0200
committerAndrew Gregory <andrew.gregory.8@gmail.com>2017-05-09 05:27:40 +0200
commit2f1797783efcb7594d9185ae01c7e1a80096b1af (patch)
treeb20bca80c1cdee2c228ce57ea71fc03764ab18ff
parenta9bec8bed88865a2b5ca1d8f56665ac1326bb238 (diff)
downloadpacman-2f1797783efcb7594d9185ae01c7e1a80096b1af.tar.gz
pacman-2f1797783efcb7594d9185ae01c7e1a80096b1af.tar.xz
Avoid logical OR duplication warning from gcc-6
The value EAGAIN is allowed by POSIX to be the same as EWOULDBLOCK, but this is not guaranteed. Thus on some systems (e.g. glibc Linux), we get a warning that the logical OR is being performed on two expressions of the same type. We can not get rid of this test in case any system defines these as unique values. Suggested-by: Dave Reisner Signed-off-by: Allan McRae <allan@archlinux.org> (cherry picked from commit 3729ef7a9acf75080fb6f60d13ea80cfd36d855d)
-rw-r--r--lib/libalpm/util.c14
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 */