summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
+ ;
+}