summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2010-01-01 07:39:29 -0700
committerEric Blake <ebb9@byu.net>2010-01-01 13:41:46 -0700
commitb7f2b51c42edabd516c5ecc748a654da736c912c (patch)
tree75db10733b43f2bb3c46abc58b3384e77191f8af
parent84db964925680c912c601f616d4ab07f7bc19c3c (diff)
downloadcoreutils-b7f2b51c42edabd516c5ecc748a654da736c912c.tar.xz
ls: fix color of broken symlinks colored as target
* src/ls.c (print_color_indicator): When using 'LINK target' in dircolors, treat broken symlink as C_ORPHAN. * tests/misc/ls-misc (sl-dangle2, sl-dangle3, sl-dangle4) (sl-dangle5): Test for it, and add more coverage. * NEWS: Document it. * THANKS: Update. Reported by Chris Jones.
-rw-r--r--NEWS4
-rw-r--r--THANKS1
-rw-r--r--src/ls.c4
-rwxr-xr-xtests/misc/ls-misc38
4 files changed, 46 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 7aedfca0b..7f012e4a0 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,10 @@ GNU coreutils NEWS -*- outline -*-
** Bug fixes
+ ls -l --color no longer prints "argetm" in front of dangling
+ symlinks when the 'LINK target' directive was given to dircolors.
+ [bug introduced in fileutils-4.0]
+
rm -r --one-file-system works once again.
The rewrite to make rm use fts introduced a regression whereby
a commmand of the above form would fail for all subdirectories.
diff --git a/THANKS b/THANKS
index ce196a45e..5ed26b925 100644
--- a/THANKS
+++ b/THANKS
@@ -105,6 +105,7 @@ Chip Salzenberg chip@valinux.com
Chris Clayton chris2553@googlemail.com
Chris Faylor cgf@cygnus.com
Chris J. Bednar cjb@AdvancedDataSolutions.com
+Chris Jones cjns1989@gmail.com
Chris Lesniewski ctl@mit.edu
Chris Sylvain csylvain@umm.edu
Chris Yeo cyeo@biking.org
diff --git a/src/ls.c b/src/ls.c
index 04fa93cae..aa601fdc2 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -4164,7 +4164,9 @@ print_color_indicator (const struct fileinfo *f, bool symlink_target)
type = C_STICKY;
}
else if (S_ISLNK (mode))
- type = ((!linkok && color_indicator[C_ORPHAN].string)
+ type = ((!linkok
+ && (!strncmp (color_indicator[C_LINK].string, "target", 6)
+ || color_indicator[C_ORPHAN].string))
? C_ORPHAN : C_LINK);
else if (S_ISFIFO (mode))
type = C_FIFO;
diff --git a/tests/misc/ls-misc b/tests/misc/ls-misc
index a0774829a..27de57c79 100755
--- a/tests/misc/ls-misc
+++ b/tests/misc/ls-misc
@@ -185,6 +185,44 @@ my @Tests =
restore_ls_colors; }},
],
+ # Test for a bug fixed after coreutils-8.2.
+ ['sl-dangle2', '-o --color=always l',
+ {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'},
+ {OUT => "l -> nowhere\n"},
+ {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n";
+ push_ls_colors('ln=target')
+ }},
+ {POST => sub {unlink 'l' or die "l: $!\n";
+ restore_ls_colors; }},
+ ],
+ ['sl-dangle3', '-o --color=always l',
+ {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'},
+ {OUT => "$e\e[40ml$e -> \e[34mnowhere$e\n\e[m"},
+ {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n";
+ push_ls_colors('ln=target:or=40:mi=34:')
+ }},
+ {POST => sub {unlink 'l' or die "l: $!\n";
+ restore_ls_colors; }},
+ ],
+ ['sl-dangle4', '-o --color=always l',
+ {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'},
+ {OUT => "$e\e[36ml$e -> \e[35mnowhere$e\n\e[m"},
+ {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n";
+ push_ls_colors('ln=34:mi=35:or=36:')
+ }},
+ {POST => sub {unlink 'l' or die "l: $!\n";
+ restore_ls_colors; }},
+ ],
+ ['sl-dangle5', '-o --color=always l',
+ {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'},
+ {OUT => "$e\e[34ml$e -> \e[35mnowhere$e\n\e[m"},
+ {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n";
+ push_ls_colors('ln=34:mi=35:')
+ }},
+ {POST => sub {unlink 'l' or die "l: $!\n";
+ restore_ls_colors; }},
+ ],
+
# 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.