diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-03-17 12:23:24 +0000 | 
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-03-17 12:23:24 +0000 | 
| commit | edb0de4283e00bbf930af689a90d8ae01c6b017b (patch) | |
| tree | bc6cfab3e84d3217f199a4401a21a57ef77f82bb | |
| parent | e6c94a611a9f2602caeaec49eccb5a63b1877c61 (diff) | |
| download | busybox-edb0de4283e00bbf930af689a90d8ae01c6b017b.tar.gz | |
ftpd: implement -vv verbosity
function                                             old     new   delta
ftpd_main                                           2097    2190     +93
verbose_log                                            -      33     +33
cmdio_write_raw                                       12      34     +22
cmdio_write_ok                                        25      45     +20
cmdio_write_error                                     25      45     +20
cmdio_write                                           62      78     +16
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 5/0 up/down: 204/0)             Total: 204 bytes
| -rw-r--r-- | networking/ftpd.c | 40 | 
1 files changed, 31 insertions, 9 deletions
diff --git a/networking/ftpd.c b/networking/ftpd.c index 583d7b387..c932497e5 100644 --- a/networking/ftpd.c +++ b/networking/ftpd.c @@ -89,6 +89,7 @@ struct globals {  	int local_file_fd;  	unsigned end_time;  	unsigned timeout; +	unsigned verbose;  	off_t local_file_pos;  	off_t restart_pos;  	len_and_sockaddr *local_addr; @@ -158,6 +159,12 @@ replace_char(char *str, char from, char to)  	return p - str;  } +static void +verbose_log(const char *str) +{ +	bb_error_msg("%.*s", (int)strcspn(str, "\r\n"), str); +} +  /* NB: status_str is char[4] packed into uint32_t */  static void  cmdio_write(uint32_t status_str, const char *str) @@ -174,6 +181,8 @@ cmdio_write(uint32_t status_str, const char *str)  	response[len++] = '\n'; /* tack on trailing '\n' */  	xwrite(STDOUT_FILENO, response, len); +	if (G.verbose > 1) +		verbose_log(response);  	free(response);  } @@ -182,6 +191,8 @@ cmdio_write_ok(unsigned status)  {  	*(uint32_t *) G.msg_ok = status;  	xwrite(STDOUT_FILENO, G.msg_ok, sizeof("NNN " MSG_OK) - 1); +	if (G.verbose > 1) +		verbose_log(G.msg_ok);  }  #define WRITE_OK(a) cmdio_write_ok(STRNUM32sp(a)) @@ -191,6 +202,8 @@ cmdio_write_error(unsigned status)  {  	*(uint32_t *) G.msg_err = status;  	xwrite(STDOUT_FILENO, G.msg_err, sizeof("NNN " MSG_ERR) - 1); +	if (G.verbose > 1) +		verbose_log(G.msg_err);  }  #define WRITE_ERR(a) cmdio_write_error(STRNUM32sp(a)) @@ -198,6 +211,8 @@ static void  cmdio_write_raw(const char *p_text)  {  	xwrite_str(STDOUT_FILENO, p_text); +	if (G.verbose > 1) +		verbose_log(p_text);  }  static void @@ -885,10 +900,11 @@ cmdio_get_cmd_and_arg(void)  	/* Trailing '\n' is already stripped, strip '\r' */  	len = strlen(cmd) - 1; -	while ((ssize_t)len >= 0 && cmd[len] == '\r') { -		cmd[len] = '\0'; -		len--; -	} +	if ((ssize_t)len >= 0 && cmd[len] == '\r') +		cmd[len--] = '\0'; + +	if (G.verbose > 1) +		bb_error_msg("%s", cmd);  	G.ftp_arg = strchr(cmd, ' ');  	if (G.ftp_arg != NULL) @@ -953,8 +969,8 @@ int ftpd_main(int argc, char **argv)  	abs_timeout = 1 * 60 * 60;  	G.timeout = 2 * 60; -	opt_complementary = "t+:T+"; -	opts = getopt32(argv, "l1vS" USE_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout); +	opt_complementary = "t+:T+:vv"; +	opts = getopt32(argv, "l1vS" USE_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout, &G.verbose);  	if (opts & (OPT_l|OPT_1)) {  		/* Our secret backdoor to ls */  		memset(&G, 0, sizeof(G)); @@ -964,9 +980,13 @@ int ftpd_main(int argc, char **argv)  		argv[2] = (char*)"--";  		return ls_main(argc, argv);  	} -	G.end_time = monotonic_sec() + abs_timeout; -	if (G.timeout > abs_timeout) -		G.timeout = abs_timeout + 1; +	if (abs_timeout | G.timeout) { +		if (abs_timeout == 0) +			abs_timeout = INT_MAX; +		G.end_time = monotonic_sec() + abs_timeout; +		if (G.timeout > abs_timeout) +			G.timeout = abs_timeout; +	}  	strcpy(G.msg_ok  + 4, MSG_OK );  	strcpy(G.msg_err + 4, MSG_ERR); @@ -988,6 +1008,8 @@ int ftpd_main(int argc, char **argv)  		openlog(applet_name, LOG_PID | LOG_NDELAY, LOG_DAEMON);  		logmode |= LOGMODE_SYSLOG;  	} +	if (logmode) +		applet_name = xasprintf("%s[%u]", applet_name, (int)getpid());  	G.proc_self_fd = xopen("/proc/self", O_RDONLY | O_DIRECTORY);  | 
