summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <meyering@fb.com>2015-05-09 10:57:54 -0700
committerJim Meyering <meyering@fb.com>2015-05-09 22:49:07 -0700
commitaa7f31fc4a3f4d0c99086660d5ff008c559d657b (patch)
tree7aa9cd1d8bc4d1300e90039a8de93cc61c1fd064
parente981643ae3e57affdf3f4f6aa8bf53cf06433f17 (diff)
downloadcoreutils-aa7f31fc4a3f4d0c99086660d5ff008c559d657b.tar.xz
build: avoid a warning form gcc's new -Wlogical-op
Without this change, very recent gcc (e.g., version 6.0.0 20150509) would print the following when configured with --enable-gcc-warnings: src/copy.c:165:30: error: logical 'or' of equal expressions \ [-Werror=logical-op] && (errno == EOPNOTSUPP || errno == ENOTSUP || errno == ENOSYS)) ^ * src/system.h (is_ENOTSUP): New function. * src/copy.c (punch_hole): Use it. * src/ls.c (errno_unsupported, gobble_file): Use it.
-rw-r--r--src/copy.c3
-rw-r--r--src/ls.c7
-rw-r--r--src/system.h14
3 files changed, 17 insertions, 7 deletions
diff --git a/src/copy.c b/src/copy.c
index b93c53313..3af42957a 100644
--- a/src/copy.c
+++ b/src/copy.c
@@ -161,8 +161,7 @@ punch_hole (int fd, off_t offset, off_t length)
# if defined FALLOC_FL_PUNCH_HOLE && defined FALLOC_FL_KEEP_SIZE
ret = fallocate (fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
offset, length);
- if (ret < 0
- && (errno == EOPNOTSUPP || errno == ENOTSUP || errno == ENOSYS))
+ if (ret < 0 && (is_ENOTSUP (errno) || errno == ENOSYS))
ret = 0;
# endif
#endif
diff --git a/src/ls.c b/src/ls.c
index b308dd33e..01404e25c 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -2828,10 +2828,7 @@ clear_files (void)
static bool
errno_unsupported (int err)
{
- return (err == EINVAL
- || err == ENOSYS
- || err == ENOTSUP
- || err == EOPNOTSUPP);
+ return (err == EINVAL || err == ENOSYS || is_ENOTSUP (err));
}
/* Cache *getfilecon failure, when it's trivial to do so.
@@ -3069,7 +3066,7 @@ gobble_file (char const *name, enum filetype type, ino_t inode,
ls fail just because the file (even a command line argument)
isn't on the right type of file system. I.e., a getfilecon
failure isn't in the same class as a stat failure. */
- if (errno == ENOTSUP || errno == EOPNOTSUPP || errno == ENODATA)
+ if (is_ENOTSUP (errno) || errno == ENODATA)
err = 0;
}
diff --git a/src/system.h b/src/system.h
index c55f6d8bd..0e25bc414 100644
--- a/src/system.h
+++ b/src/system.h
@@ -695,3 +695,17 @@ stzncpy (char *restrict dest, char const *restrict src, size_t len)
in selinux.h before libselinux-2.3 (May 2014).
When version >= 2.3 is ubiquitous remove this function. */
static inline char * se_const (char const * sctx) { return (char *) sctx; }
+
+/* Return true if ERR is ENOTSUP or EOPNOTSUPP, otherwise false.
+ This wrapper function avoids the redundant 'or'd comparison on
+ systems like Linux for which they have the same value. It also
+ avoids the gcc warning to that effect. */
+static inline bool
+is_ENOTSUP (int err)
+{
+ return err == EOPNOTSUPP
+#if ENOTSUP != EOPNOTSUPP
+ || err == ENOTSUP
+#endif
+ ;
+}