From 29305e059ff2095060eef939f653c1b5deecd6d9 Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Wed, 14 Jul 2010 23:06:20 +0200 Subject: [PATCH] Rewrite last change considering SIZE return value, otherwise what RETR returns --- src/ChangeLog | 12 ++++++++++-- src/ftp.c | 13 +++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d337b4a7..5592e604 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,8 +1,16 @@ +2010-07-14 Giuseppe Scrivano + + * ftp.c (max): Remove definition. + (getftp): New variable `got_expected_bytes'. Let `expected_bytes' be + the value SIZE returns, otherwise use the bytes count returned by RETR. + Suggested by Daniel Stenberg . + 2010-07-14 Giuseppe Scrivano * ftp.c (max): Add definition. - (getftp): Consider for`expected_bytes' the greatest value between the bytes - count returned by SIZE and the bytes count returned by RETR. + (getftp): Consider for `expected_bytes' the greatest value between the + bytes count returned by SIZE and the bytes count returned by RETR. + Reported by: Jozua . 2010-07-11 Giuseppe Scrivano diff --git a/src/ftp.c b/src/ftp.c index c5ac8303..70137bed 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -63,8 +63,6 @@ as that of the covered work. */ #define LIST_FILENAME ".listing" #endif -#define max(a, b) ((a > b) ? (a) : (b)) - typedef struct { int st; /* connection status */ @@ -254,6 +252,7 @@ getftp (struct url *u, wgint passed_expected_bytes, wgint *qtyread, int cmd = con->cmd; bool pasv_mode_open = false; wgint expected_bytes = 0; + bool got_expected_bytes = false; bool rest_failed = false; int flags; wgint rd_size; @@ -757,6 +756,7 @@ Error in server response, closing control connection.\n")); con->csock = -1; return err; case FTPOK: + got_expected_bytes = true; /* Everything is OK. */ break; default: @@ -1022,8 +1022,8 @@ Error in server response, closing control connection.\n")); if (!opt.server_response) logputs (LOG_VERBOSE, _("done.\n")); - expected_bytes = max (ftp_expected_bytes (ftp_last_respline), - expected_bytes); + if (! got_expected_bytes) + expected_bytes = ftp_expected_bytes (ftp_last_respline); } /* do retrieve */ if (cmd & DO_LIST) @@ -1069,8 +1069,9 @@ Error in server response, closing control connection.\n")); } if (!opt.server_response) logputs (LOG_VERBOSE, _("done.\n")); - expected_bytes = max (ftp_expected_bytes (ftp_last_respline), - expected_bytes); + + if (! got_expected_bytes) + expected_bytes = ftp_expected_bytes (ftp_last_respline); } /* cmd & DO_LIST */ if (!(cmd & (DO_LIST | DO_RETR)) || (opt.spider && !(cmd & DO_LIST))) -- 2.39.2