* src/ls.c (file_has_acl_cache): When a file system doesn't support acls, fail with errno set to ENOTSUP. (gobble_file): Don't treat lack of acl support as an error. --- src/ls.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/src/ls.c b/src/ls.c index b308dd3..884e042 100644 --- a/src/ls.c +++ b/src/ls.c @@ -2866,7 +2866,7 @@ getfilecon_cache (char const *file, struct fileinfo *f, bool deref) /* Cache file_has_acl failure, when it's trivial to do. Like file_has_acl, but when F's st_dev says it's on a file - system lacking ACL support, return 0 with ENOTSUP immediately. */ + system lacking ACL support, fail with ENOTSUP immediately. */ static int file_has_acl_cache (char const *file, struct fileinfo *f) { @@ -2877,14 +2877,11 @@ file_has_acl_cache (char const *file, struct fileinfo *f) if (f->stat.st_dev == unsupported_device) { errno = ENOTSUP; - return 0; + return -1; } - /* Zero errno so that we can distinguish between two 0-returning cases: - "has-ACL-support, but only a default ACL" and "no ACL support". */ - errno = 0; int n = file_has_acl (file, &f->stat); - if (n <= 0 && errno_unsupported (errno)) + if (n < 0 && errno_unsupported (errno)) unsupported_device = f->stat.st_dev; return n; } @@ -3076,7 +3073,7 @@ gobble_file (char const *name, enum filetype type, ino_t inode, if (err == 0 && format == long_format) { int n = file_has_acl_cache (absolute_name, f); - err = (n < 0); + err = (n < 0 && ! errno_unsupported (errno)); have_acl = (0 < n); } -- 2.1.0