ls: make -F not follow symlinks of the command line
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 19 Dec 2010 05:16:28 +0000 (06:16 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 19 Dec 2010 05:16:28 +0000 (06:16 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/ls.c

index f515f9f8f97b5fad7061a5eba9fd20a894b7e546..02e26bedbb7cbeb5101bad188fed20f7a7ca7eea 100644 (file)
@@ -155,15 +155,17 @@ enum {
        OPT_Q = (1 << 10),
        //OPT_A = (1 << 11),
        //OPT_k = (1 << 12),
-       OPTBIT_color = 13
+       OPTBIT_F = 13
                + 4 * ENABLE_FEATURE_LS_TIMESTAMPS
-               + 4 * ENABLE_FEATURE_LS_SORTFILES
+               + 4 * ENABLE_FEATURE_LS_SORTFILES,
+       OPTBIT_color = OPTBIT_F
                + 2 * ENABLE_FEATURE_LS_FILETYPES
                + 1 * ENABLE_FEATURE_LS_FOLLOWLINKS
                + 1 * ENABLE_FEATURE_LS_RECURSIVE
                + 1 * ENABLE_FEATURE_HUMAN_READABLE
                + 2 * ENABLE_SELINUX
                + 2 * ENABLE_FEATURE_AUTOWIDTH,
+       OPT_F     = (1 << OPTBIT_F) * ENABLE_FEATURE_LS_FILETYPES,
        OPT_color = 1 << OPTBIT_color,
 };
 
@@ -1066,8 +1068,10 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
        dn = NULL;
        nfiles = 0;
        do {
-               /* NB: follow links on command line unless -l or -s */
-               cur = my_stat(*argv, *argv, !(all_fmt & (STYLE_LONG|LIST_BLOCKS)));
+               /* NB: follow links on command line unless -l, -s or -F */
+               cur = my_stat(*argv, *argv,
+                       !((all_fmt & (STYLE_LONG|LIST_BLOCKS)) || (option_mask32 & OPT_F))
+               );
                argv++;
                if (!cur)
                        continue;