From b13b6183354e6c9d031951fa4f11bcb9b38ae251 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 25 Jan 2017 04:52:45 +0100 Subject: [PATCH] ftpd/ls: show directories first Old TODO finally done function old new delta ls_main 548 568 +20 packed_usage 31116 31097 -19 Signed-off-by: Denys Vlasenko --- coreutils/ls.c | 7 ++++++- networking/ftpd.c | 15 +++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/coreutils/ls.c b/coreutils/ls.c index a858a3217..6e0a52d75 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -1045,7 +1045,7 @@ static void scan_and_display_dirs_recur(struct dnode **dn, int first) int ls_main(int argc UNUSED_PARAM, char **argv) -{ +{ /* ^^^^^^^^^^^^^^^^^ note: if FTPD, argc can be wrong, see ftpd.c */ struct dnode **dnd; struct dnode **dnf; struct dnode **dnp; @@ -1175,6 +1175,11 @@ int ls_main(int argc UNUSED_PARAM, char **argv) if (!(option_mask32 & (OPT_l|OPT_1|OPT_x|OPT_C))) option_mask32 |= (isatty(STDOUT_FILENO) ? OPT_C : OPT_1); + if (ENABLE_FTPD && applet_name[0] == 'f') { + /* ftpd secret backdoor. dirs first are much nicer */ + option_mask32 |= OPT_dirs_first; + } + argv += optind; if (!argv[0]) *--argv = (char*)"."; diff --git a/networking/ftpd.c b/networking/ftpd.c index 104d414de..439608ce6 100644 --- a/networking/ftpd.c +++ b/networking/ftpd.c @@ -61,12 +61,12 @@ //usage: "Can be run from tcpsvd:\n" //usage: " tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve\n" //usage: "\n -w Allow upload" -//usage: "\n -v Log errors to stderr. -vv: verbose log" -//usage: "\n -S Log errors to syslog. -SS: verbose log" //usage: IF_FEATURE_FTPD_AUTHENTICATION( //usage: "\n -a USER Enable 'anonymous' login and map it to USER" //usage: ) -//usage: "\n -t,-T Idle and absolute timeouts" +//usage: "\n -v Log errors to stderr. -vv: verbose log" +//usage: "\n -S Log errors to syslog. -SS: verbose log" +//usage: "\n -t,-T N Idle and absolute timeout" #include "libbb.h" #include "common_bufsiz.h" @@ -701,7 +701,7 @@ popen_ls(const char *opt) dup(STDOUT_FILENO); /* copy will become STDIN_FILENO */ #if BB_MMU /* memset(&G, 0, sizeof(G)); - ls_main does it */ - exit(ls_main(ARRAY_SIZE(argv) - 1, (char**) argv)); + exit(ls_main(/*argc_unused*/ 0, (char**) argv)); #else cur_fd = xopen(".", O_RDONLY | O_DIRECTORY); /* On NOMMU, we want to execute a child - copy of ourself @@ -1152,11 +1152,7 @@ enum { }; int ftpd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -#if !BB_MMU -int ftpd_main(int argc, char **argv) -#else int ftpd_main(int argc UNUSED_PARAM, char **argv) -#endif { #if ENABLE_FEATURE_FTPD_AUTHENTICATION struct passwd *pw = NULL; @@ -1184,11 +1180,10 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) &G.verbose, &verbose_S); if (opts & (OPT_l|OPT_1)) { /* Our secret backdoor to ls */ -/* TODO: pass --group-directories-first? */ if (fchdir(3) != 0) _exit(127); /* memset(&G, 0, sizeof(G)); - ls_main does it */ - return ls_main(argc, argv); + return ls_main(/*argc_unused*/ 0, argv); } #endif if (G.verbose < verbose_S)