ls: fix output of dangling symlinks colored as target
authorPádraig Brady <P@draigBrady.com>
Sat, 1 Oct 2011 00:47:53 +0000 (01:47 +0100)
committerPádraig Brady <P@draigBrady.com>
Sat, 1 Oct 2011 01:15:12 +0000 (02:15 +0100)
commit84457c491e775f664a1c33274cd2c5acadb5be73
tree983d17c1a92e99ee1c686e28c468217501f6c5b7
parent4f38e9f24971762540da9d5457dfa9e5e03d53ee
ls: fix output of dangling symlinks colored as target

This is related to commit b7f2b51c, 2010-01-01,
"ls: fix color of broken symlinks colored as target"
which didn't handle the --dereference case.
The simplest way to reproduce the resultant
erroneous "argetm" is as follows:

 $ ln -s /no-such dangle
 $ env LS_COLORS=ln=target ls --dereference --color
 ls: cannot access dangle: No such file or directory
 argetmdangle

This is also an issue with the `tree` utility,
reported here: http://bugs.debian.org/586765

* src/ls.c (print_color_indicator): Move the handling
of 'ln=target' in $LS_COLORS (color_symlink_as_referent == true)
to a higher scope, to handle all cases where type == C_LINK.
* tests/misc/ls-misc: Add a test case for the specific issue,
and 2 further test cases to verify other code paths in this area.

Reported by Jason Glassey.
src/ls.c
tests/misc/ls-misc