]> sjero.net Git - wget/commitdiff
Rewrite last change considering SIZE return value, otherwise what RETR returns
authorGiuseppe Scrivano <gscrivano@gnu.org>
Wed, 14 Jul 2010 21:06:20 +0000 (23:06 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Wed, 14 Jul 2010 21:06:20 +0000 (23:06 +0200)
src/ChangeLog
src/ftp.c

index d337b4a707ab2ef34d93851e554f17a111054fd2..5592e604d82c3e28ccd18b6c43940251946c2cc9 100644 (file)
@@ -1,8 +1,16 @@
+2010-07-14  Giuseppe Scrivano  <gscrivano@gnu.org>
+
+       * 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 <daniel@haxx.se>.
+
 2010-07-14  Giuseppe Scrivano  <gscrivano@gnu.org>
 
        * 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 <jozua@sparky.za.net>.
 
 2010-07-11  Giuseppe Scrivano  <gscrivano@gnu.org>
 
index c5ac83032aa596ad659bd9fa3b384db5669618a7..70137bedbc889d229345adee2a97d3c29be344a6 100644 (file)
--- 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)))