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 Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils