From af7e522e91bf25713dec786fcf4e5171cab65fb8 Mon Sep 17 00:00:00 2001
From: hniksic <devnull@localhost>
Date: Tue, 17 May 2005 05:53:08 -0700
Subject: [PATCH] [svn] Don't clobber the file when -c is specified and the
 first attempt to retrieve the file fails.

---
 src/ChangeLog |  2 ++
 src/ftp.c     | 16 ++++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 10554461..9e3d845f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,7 @@
 2005-05-17  Hrvoje Niksic  <hniksic@xemacs.org>
 
+	* ftp.c (ftp_loop_internal): Same here.
+
 	* http.c (http_loop): Don't clobber the file when -c is specified
 	and the first attempt to retrieve the file fails.
 
diff --git a/src/ftp.c b/src/ftp.c
index afc47266..9609f90c 100644
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -1158,13 +1158,17 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con)
 	}
 
       /* Decide whether or not to restart.  */
-      restval = 0;
-      if (count > 1)
-	restval = len;		/* start where the previous run left off */
-      else if (opt.always_rest
-	       && stat (locf, &st) == 0
-	       && S_ISREG (st.st_mode))
+      if (opt.always_rest
+	  && stat (locf, &st) == 0
+	  && S_ISREG (st.st_mode))
+	/* When -c is used, continue from on-disk size.  (Can't use
+	   hstat.len even if count>1 because we don't want a failed
+	   first attempt to clobber existing data.)  */
 	restval = st.st_size;
+      else if (count > 1)
+	restval = len;		/* start where the previous run left off */
+      else
+	restval = 0;
 
       /* Get the current time string.  */
       tms = time_str (NULL);