If the symlink points to a directory, take it as one when sorting
by directory is turned on.
---
src/ls.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
Index: coreutils-6.11/src/ls.c
===================================================================
--- coreutils-6.11.orig/src/ls.c
+++ coreutils-6.11/src/ls.c
@@ -3004,12 +3004,16 @@ typedef int (*qsortFunc)(V a, V b);
#define DIRFIRST_CHECK(a, b) \
do \
{ \
- bool a_is_dir = is_directory ((struct fileinfo const *) a); \
- bool b_is_dir = is_directory ((struct fileinfo const *) b); \
- if (a_is_dir && !b_is_dir) \
- return -1; /* a goes before b */ \
- if (!a_is_dir && b_is_dir) \
- return 1; /* b goes before a */ \
+ const struct fileinfo *fa = a, *fb = b; \
+ enum filetype ta = fa->filetype, tb = fb->filetype; \
+ if (fa->filetype == symbolic_link && fa->linkname != NULL) \
+ ta = S_ISDIR(fa->linkmode) ? directory : normal; \
+ if (fb->filetype == symbolic_link && fb->linkname != NULL) \
+ tb = S_ISDIR(fb->linkmode) ? directory : normal; \
+ if (ta == directory && tb != directory) \
+ return -1; \
+ if (ta != directory && tb == directory) \
+ return 1; \
} \
while (0)
_______________________________________________
Bug-coreutils mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-coreutils