From ce06e4297f5d5e9bbcf9c3c0ff5a8dfb8a8bb615 Mon Sep 17 00:00:00 2001 From: hniksic Date: Thu, 5 May 2005 03:10:51 -0700 Subject: [PATCH] [svn] Fix printing of FTP response. --- src/ChangeLog | 4 ++++ src/ftp-basic.c | 22 +++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 58143fa8..908fc155 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2005-05-05 Hrvoje Niksic + + * ftp-basic.c (ftp_response): Fix printing FTP server response. + 2005-05-05 Hrvoje Niksic * retr.c (limit_bandwidth_reset): Reset sleep_adjust. diff --git a/src/ftp-basic.c b/src/ftp-basic.c index e6a2345f..c6df9b88 100644 --- a/src/ftp-basic.c +++ b/src/ftp-basic.c @@ -58,26 +58,34 @@ char ftp_last_respline[128]; it. and characters are stripped from the line, and the line is 0-terminated. All the response lines but the last one are skipped. The last line is determined as described in RFC959. */ + uerr_t ftp_response (int fd, char **ret_line) { while (1) { + char *p; char *line = fd_read_line (fd); if (!line) return FTPRERR; + + /* Strip trailing CRLF before printing the line, so that + escnonprint doesn't include bogus \012 and \015. */ + p = strchr (line, '\0'); + if (p > line && p[-1] == '\n') + *--p = '\0'; + if (p > line && p[-1] == '\r') + *--p = '\0'; + if (opt.server_response) - logputs (LOG_NOTQUIET, escnonprint (line)); + logprintf (LOG_NOTQUIET, "%s\n", escnonprint (line)); else - DEBUGP (("%s", escnonprint (line))); + DEBUGP (("%s\n", escnonprint (line))); + + /* The last line of output is the one that begins with "ddd ". */ if (ISDIGIT (line[0]) && ISDIGIT (line[1]) && ISDIGIT (line[2]) && line[3] == ' ') { - char *p = line + strlen (line); - if (p > line && p[-1] == '\n') - *--p = '\0'; - if (p > line && p[-1] == '\r') - *--p = '\0'; strncpy (ftp_last_respline, line, sizeof (ftp_last_respline)); ftp_last_respline[sizeof (ftp_last_respline) - 1] = '\0'; *ret_line = line; -- 2.39.2