diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-28 23:14:06 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-28 23:14:06 +0000 |
commit | 2110aa9ece6f30563068b2ea29bd75e6ea1787eb (patch) | |
tree | 9efcb54306f6297b21760afd9742d80618977f24 | |
parent | 4c7e5b6c764427fc94d4197b4d40760500705914 (diff) |
ls: w/o -l follow symlinks to dirs for commandline args
-rw-r--r-- | coreutils/ls.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c index 34fae5026..f902d382a 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -156,13 +156,13 @@ enum { static int status = EXIT_SUCCESS; -static struct dnode *my_stat(char *fullname, char *name) +static struct dnode *my_stat(char *fullname, char *name, int force_follow) { struct stat dstat; struct dnode *cur; USE_SELINUX(security_context_t sid = NULL;) - if (all_fmt & FOLLOW_LINKS) { + if ((all_fmt & FOLLOW_LINKS) || force_follow) { #if ENABLE_SELINUX if (is_selinux_enabled()) { getfilecon(fullname, &sid); @@ -176,7 +176,7 @@ static struct dnode *my_stat(char *fullname, char *name) } else { #if ENABLE_SELINUX if (is_selinux_enabled()) { - lgetfilecon(fullname,&sid); + lgetfilecon(fullname, &sid); } #endif if (lstat(fullname, &dstat)) { @@ -510,7 +510,7 @@ static struct dnode **list_dir(const char *path) continue; } fullname = concat_path_file(path, entry->d_name); - cur = my_stat(fullname, strrchr(fullname, '/') + 1); + cur = my_stat(fullname, strrchr(fullname, '/') + 1, 0); if (!cur) { free(fullname); continue; @@ -819,7 +819,7 @@ int ls_main(int argc, char **argv) if (terminal_width_str) terminal_width = xatou(terminal_width_str); #else - opt = getopt32(argc, argv, ls_options USE_FEATURE_LS_COLOR(, &color_opt)); + opt = getopt32(argc, argv, ls_options USE_FEATURE_LS_COLOR(, &color_opt)); #endif for (i = 0; opt_flags[i] != (1U<<31); i++) { if (opt & (1 << i)) { @@ -837,8 +837,9 @@ int ls_main(int argc, char **argv) all_fmt &= ~TIME_MASK; if (flags & LIST_CONTEXT) all_fmt |= STYLE_SINGLE; - if (LS_DISP_HR && opt == 'l') - all_fmt &= ~LS_DISP_HR; + /* huh?? opt cannot be 'l' */ + //if (LS_DISP_HR && opt == 'l') + // all_fmt &= ~LS_DISP_HR; all_fmt |= flags; } } @@ -904,7 +905,8 @@ int ls_main(int argc, char **argv) /* stuff the command line file names into a dnode array */ dn = NULL; for (oi = 0; oi < ac; oi++) { - cur = my_stat(av[oi], av[oi]); + /* ls w/o -l follows links on command line */ + cur = my_stat(av[oi], av[oi], !(all_fmt & STYLE_LONG)); if (!cur) continue; cur->allocated = 0; |