]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(gobble_file): Do not fall back on lstat if stat
authorJim Meyering <jim@meyering.net>
Sat, 2 Dec 2000 20:55:02 +0000 (20:55 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 2 Dec 2000 20:55:02 +0000 (20:55 +0000)
fails; POSIX.2 does not allow this.  Invoke acl only on
non-symlinks, and only if lstat or stat succeeds.

src/ls.c

index 146b5aa5d52cccc3290d9165606be15aa8c42a8d..6fb10edf559c959bc596b49319c0e89337de36a7 100644 (file)
--- a/src/ls.c
+++ b/src/ls.c
@@ -1887,23 +1887,9 @@ gobble_file (const char *name, enum filetype type, int explicit_arg,
          attach (path, dirname, name);
        }
 
-      if (trace_links)
-       {
-         val = stat (path, &files[files_index].stat);
-         if (val < 0)
-           {
-             /* Perhaps a symbolically-linked to file doesn't exist; stat
-                the link instead. */
-             val = lstat (path, &files[files_index].stat);
-           }
-       }
-      else
-       {
-         val = lstat (path, &files[files_index].stat);
-#if USE_ACL
-         files[files_index].have_acl = (acl (path, GETACLCNT, 0, NULL) > 4);
-#endif
-       }
+      val = (trace_links
+            ? stat (path, &files[files_index].stat)
+            : lstat (path, &files[files_index].stat));
 
       if (val < 0)
        {
@@ -1912,6 +1898,11 @@ gobble_file (const char *name, enum filetype type, int explicit_arg,
          return 0;
        }
 
+#if USE_ACL
+      if (! S_ISLNK (files[files_index].stat.st_mode))
+       files[files_index].have_acl = 4 < acl (path, GETACLCNT, 0, NULL);
+#endif
+
       if (S_ISLNK (files[files_index].stat.st_mode)
          && (explicit_arg || format == long_format || check_symlink_color))
        {