ls: allow stat-free use of --color
authorJim Meyering <meyering@redhat.com>
Wed, 11 May 2011 15:13:53 +0000 (17:13 +0200)
committerJim Meyering <meyering@redhat.com>
Fri, 13 May 2011 16:28:43 +0000 (18:28 +0200)
commita085b6fc6c8fa03dac20f01f2f2b64b50b8bdf66
tree817f262f34c1aa38bbf703b7d627a4266e48b755
parent6bc73ee56ee525b30053cf7ec06215ef39f9e8de
ls: allow stat-free use of --color

Even on a system with d_type support, the default use of --color
makes ls stat every file in order to be able to honor settings like
EXEC, STICKY, ORPHAN, SETUID, etc., because those settings require
information that is not provided by dirent.d_type.  However, if
for a potentially large performance gain, you are willing to disable
those settings, you can now make ls --color give type-related coloring
and perform no stat calls at all (other than the unavoidable call-per-
command-line argument).  Before this change, even with all of those
attributes disabled, ls --color would still stat every directory.
Now, we're down to the minimum of one stat call per command-line arg.
* src/ls.c (gobble_file): With --color, don't stat a
non-command-line-specified directory when no directory-coloring
attribute is enabled.
* tests/init.cfg (require_dirent_d_type_): New function.
* tests/d_type-check: New script, mostly from Pádraig Brady.
* tests/Makefile.am (EXTRA_DIST): Add it.
* tests/ls/stat-free-color: New test.
* tests/Makefile.am (TESTS): Add it.
* doc/coreutils.texi (General output formatting): Describe how
to use dircolors to make ls --color refrain from calling stat
on a d_type-enabled file system.
Prompted by a query from Josef Bacik.
doc/coreutils.texi
src/ls.c
tests/Makefile.am
tests/d_type-check [new file with mode: 0644]
tests/init.cfg
tests/ls/stat-free-color [new file with mode: 0755]