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 <vda.linux@googlemail.com>
This commit is contained in:
		@@ -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*)".";
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user