Bernhard Voelker wrote: > On 06/21/2011 03:41 PM, Jim Meyering wrote: >> Bernhard Voelker wrote: >> ... >>> LS_COLORS='rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=00:su=00:sg=00:ca=00:tw=00:ow=00:st=00:ex=00:mh=00:' >>> ++ export LS_COLORS >>> + strace -o log -e stat,lstat,stat64,lstat64 ls --color=always . >>> color-without-stat >>> dangle-1 >>> dangle-2 >>> dangle-3 >>> log >>> ++ wc -l >>> + n_lines=5 >>> + case $n_lines in >>> + fail=1 >> ... >>> How can I help? >> >> Thanks for testing and the report. >> If you apply the patch below and rerun the test like this, >> >> make check -C tests TESTS=ls/stat-free-color VERBOSE=yes >> >> then the offending strace output should help understand where >> the extra stat calls are coming from. >> >> For reference, I get this single call on Fedora 15: >> >> stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 >> >> diff --git a/tests/ls/stat-free-color b/tests/ls/stat-free-color >> index b1c4744..a1f6418 100755 >> --- a/tests/ls/stat-free-color >> +++ b/tests/ls/stat-free-color >> @@ -55,7 +55,7 @@ n_lines=$(wc -l< log) >> # Expect one or two stat calls. >> case $n_lines in >> 1|2) ;; >> - *) fail=1 ;; >> + *) fail=1; cat log;; >> esac >> >> Exit $fail >> >> -------------------------- >> >> It might be useful to see the entire strace output, too. >> To get that, remove the "-e stat,lstat,stat64,lstat64" argument >> from the strace invocation, and rerun the test. > > The output of both runs is attached. > stat("/usr/lib64/mpi/gcc/openmpi/lib64") and friends is the culprit.
Thanks. > I can't remember to have anything un-OpenSuSE-11.4-like in my toolchain. > > To me it seems that the test should count the difference of the > number of stat,lstat,stat64,lstat64 calls when run > a) as a dummy: ls --color=always --help > and > b) for ".": ls --color=always . That would be more robust. Do you feel like writing the patch? ... > + cat log > execve("/media/sdb5/berny/coreutils/src/ls", ["ls", "--color=always", > "."], [/* 112 vars */]) = 0 > brk(0) = 0x61e000 > mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0x7fe74c75f000 > access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or > directory) > open("/usr/lib64/mpi/gcc/openmpi/lib64/tls/x86_64/librt.so.1", > O_RDONLY) = -1 ENOENT (No such file or directory) > stat("/usr/lib64/mpi/gcc/openmpi/lib64/tls/x86_64", 0x7fffaa485600) = > -1 ENOENT (No such file or directory) > open("/usr/lib64/mpi/gcc/openmpi/lib64/tls/librt.so.1", O_RDONLY) = -1 > ENOENT (No such file or directory) > stat("/usr/lib64/mpi/gcc/openmpi/lib64/tls", 0x7fffaa485600) = -1 > ENOENT (No such file or directory) > open("/usr/lib64/mpi/gcc/openmpi/lib64/x86_64/librt.so.1", O_RDONLY) = > -1 ENOENT (No such file or directory) > stat("/usr/lib64/mpi/gcc/openmpi/lib64/x86_64", 0x7fffaa485600) = -1 > ENOENT (No such file or directory) > open("/usr/lib64/mpi/gcc/openmpi/lib64/librt.so.1", O_RDONLY) = -1 > ENOENT (No such file or directory) > stat("/usr/lib64/mpi/gcc/openmpi/lib64", {st_mode=S_IFDIR|0755, > st_size=4096, ...}) = 0 > open("/etc/ld.so.cache", O_RDONLY) = 3 > fstat(3, {st_mode=S_IFREG|0644, st_size=115701, ...}) = 0 > mmap(NULL, 115701, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fe74c742000 > close(3) = 0 > open("/lib64/librt.so.1", O_RDONLY) = 3 > read(3, > "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\"\0\0\0\0\0\0"..., > 832) = 832 > fstat(3, {st_mode=S_IFREG|0755, st_size=47329, ...}) = 0 > mmap(NULL, 2133008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, > 0) = 0x7fe74c33a000 > fadvise64(3, 0, 2133008, POSIX_FADV_WILLNEED) = 0 > mprotect(0x7fe74c342000, 2093056, PROT_NONE) = 0 > mmap(0x7fe74c541000, 8192, PROT_READ|PROT_WRITE, > MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7fe74c541000 > close(3) = 0 > open("/usr/lib64/mpi/gcc/openmpi/lib64/libc.so.6", O_RDONLY) = -1 > ENOENT (No such file or directory) > open("/lib64/libc.so.6", O_RDONLY) = 3 > read(3, > "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\355\1\0\0\0\0\0"..., > 832) = 832 > fstat(3, {st_mode=S_IFREG|0755, st_size=1725484, ...}) = 0 > mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, > 0) = 0x7fe74c741000 > mmap(NULL, 3591144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, > 0) = 0x7fe74bfcd000