[prev in list] [next in list] [prev in thread] [next in thread] 

List:       coreutils-bug
Subject:    Re: wrong color for broken symlinks
From:       Jim Meyering <jim () meyering ! net>
Date:       2007-04-24 7:33:31
Message-ID: 87wt029qgk.fsf () rho ! meyering ! net
[Download RAW message or body]

Jim Meyering <jim@meyering.net> wrote:
...
>> diff --git a/src/ls.c b/src/ls.c
>> index f412dff..c0e332b 100644
>> --- a/src/ls.c
>> +++ b/src/ls.c
>> @@ -2578,7 +2578,7 @@ gobble_file (char const *name, enum filetype type, ino_t i
>> node,
>>           && (type == symbolic_link || type == unknown)
>>           && (dereference == DEREF_ALWAYS
>>               || (command_line_arg && dereference != DEREF_NEVER)
>> -             || color_symlink_as_referent))
>> +             || color_symlink_as_referent || check_symlink_color))
>>        /* Command line dereferences are already taken care of by the above
>>          assertion that the inode number is not yet known.  */
>>        || (print_inode && inode == NOT_AN_INODE_NUMBER)
>
> I'll apply that as soon as I write a test.

I wrote the ChangeLog entry and applied Eric's patch:

  http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=1d85945

Here's the test, NEWS, etc:

  http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=383713e

2007-04-24  Jim Meyering  <jim@meyering.net>

	* THANKS: Add Andreas Frische.
	* NEWS: Mention today's ls --color fix.
	* tests/ls-2/tests (sl-dangle): Add a test for today's fix.

diff --git a/NEWS b/NEWS
index c4678e7..0542cd9 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,11 @@ GNU coreutils NEWS                                    -*- outline -*-
   ls -x DIR would sometimes output the wrong string in place of the
   first entry.  [introduced in coreutils-6.8]

+  ls --color would mistakenly color a dangling symlink as if it were
+  a regular symlink.  This would happen only when the dangling symlink
+  was not a command-line argument and in a directory with d_type support.
+  [introduced in coreutils-6.0]
+
   ls --color, (with a custom LS_COLORS envvar value including the
   ln=target attribute) would mistakenly output the string "target"
   before the name of each symlink.  [introduced in coreutils-6.0]
diff --git a/THANKS b/THANKS
index 63fcc39..2033c38 100644
--- a/THANKS
+++ b/THANKS
@@ -26,6 +26,7 @@ Alexey Vyskubov                     alexey@pippuri.mawhrin.net
 Alfred M. Szmidt                    ams@kemisten.nu
 Andi Kleen                          freitag@alancoxonachip.com
 Andre Novaes Cunha                  Andre.Cunha@br.global-one.net
+Andreas Frische                     andreasfrische@gmail.com
 Andreas Gruenbacher                 ag@bestbits.at
 Andreas Jaeger                      jaeger@gnu.org
 Andreas Luik                        luik@isa.de
diff --git a/tests/ls-2/tests b/tests/ls-2/tests
index 3f2fc1d..9bf4057 100755
--- a/tests/ls-2/tests
+++ b/tests/ls-2/tests
@@ -130,6 +130,19 @@ my @Tests =
      ['sl-target', '--color=always d',
       {OUT => "\e[0m\e[01;34mX\e[0m\n\e[m"}, $target, $target2],

+     # Test for another bug fixed in coreutils-6.10.
+     # This one bites only for a system/file system with d_type support.
+     ['sl-dangle', '--color=always d',
+      {OUT => "\e[0m\e[40;31;01mX\e[0m\n\e[m"},
+      {PRE => sub {
+		mkdir 'd',0755 or die "d: $!\n";
+		symlink 'non-existent', 'd/X' or die "d/X: $!\n";
+		$ENV{LS_COLORS}='or=40;31;01'
+	      }},
+      {POST => sub {unlink 'd/X' or die "d/X: $!\n";
+		    rmdir 'd' or die "d: $!\n" }},
+     ],
+
      # Test for a bug that was introduced in coreutils-4.5.4; fixed in 4.5.5.
      # To demonstrate it, the file in question (with executable bit set)
      # must not be a command line argument.



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic