(gobble_file): Do not fall back on lstat if stat

fails; POSIX.2 does not allow this.  Invoke acl only on
non-symlinks, and only if lstat or stat succeeds.
This commit is contained in:
Jim Meyering
2000-12-02 20:55:02 +00:00
parent e05c32a868
commit e49511faef
+8 -17
View File
@@ -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))
{