]> sjero.net Git - wget/commitdiff
[svn] Make sure opt.dfp is rewound only on the first retrieval.
authorhniksic <devnull@localhost>
Sun, 1 Apr 2001 23:50:04 +0000 (16:50 -0700)
committerhniksic <devnull@localhost>
Sun, 1 Apr 2001 23:50:04 +0000 (16:50 -0700)
(See the code comment for a more detailed explanation.)
Published in <sxsy9tkqizz.fsf@florida.arsdigita.de>.

src/ftp.c
src/http.c
src/retr.c

index ae96df7032e73ce04c1a129a7bb1e0c0634bd235..0cdbcc1d18a1c5ef313fb10a77672b2802d4eeba 100644 (file)
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -814,8 +814,13 @@ Error in server response, closing control connection.\n"));
     }
   else
     {
+      extern int global_download_count;
       fp = opt.dfp;
-      if (!restval)
+
+      /* Rewind the output document if the download starts over and if
+        this is the first download.  See gethttp() for a longer
+        explanation.  */
+      if (!restval && global_download_count == 0)
        {
          /* This will silently fail for streams that don't correspond
             to regular files, but that's OK.  */
index 589657f37ee4bb171b69314758a98b6d3b41b56e..4c65d6774d16201ebb731b463845409cd6262a1b 100644 (file)
@@ -1285,8 +1285,22 @@ Accept: %s\r\n\
     }
   else                         /* opt.dfp */
     {
+      extern int global_download_count;
       fp = opt.dfp;
-      if (!hs->restval)
+      /* To ensure that repeated "from scratch" downloads work for -O
+        files, we rewind the file pointer, unless restval is
+        non-zero.  (This works only when -O is used on regular files,
+        but it's still a valuable feature.)
+
+        However, this loses when more than one URL is specified on
+        the command line the second rewinds eradicates the contents
+        of the first download.  Thus we disable the above trick for
+        all the downloads except the very first one.
+
+         #### A possible solution to this would be to remember the
+        file position in the output document and to seek to that
+        position, instead of rewinding.  */
+      if (!hs->restval && global_download_count == 0)
        {
          /* This will silently fail for streams that don't correspond
             to regular files, but that's OK.  */
index 5207e54d6719fa6796d882558df483c8625021f3..95e663fa4f52d9f438ffdbd4ff438564f3fe6a6d 100644 (file)
@@ -54,6 +54,9 @@ LARGE_INTEGER internal_time;
 static long internal_secs, internal_msecs;
 #endif
 
+/* See the comment in gethttp() why this is needed. */
+int global_download_count;
+
 void logflush PARAMS ((void));
 
 /* From http.c.  */
@@ -572,6 +575,8 @@ retrieve_url (const char *origurl, char **file, char **newloc,
   else
     xfree (url);
 
+  ++global_download_count;
+
   return result;
 }