[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#8909: tests/ls/stat-free-color: fails on OpenSuSE 11.4
From: |
Jim Meyering |
Subject: |
bug#8909: tests/ls/stat-free-color: fails on OpenSuSE 11.4 |
Date: |
Tue, 21 Jun 2011 16:16:45 +0200 |
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