From 66a0c39e220fd6469a7e9393c4381b231ad2092d Mon Sep 17 00:00:00 2001 From: hniksic Date: Sun, 1 Apr 2001 16:50:04 -0700 Subject: [PATCH] [svn] Make sure opt.dfp is rewound only on the first retrieval. (See the code comment for a more detailed explanation.) Published in . --- src/ftp.c | 7 ++++++- src/http.c | 16 +++++++++++++++- src/retr.c | 5 +++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/ftp.c b/src/ftp.c index ae96df70..0cdbcc1d 100644 --- 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. */ diff --git a/src/http.c b/src/http.c index 589657f3..4c65d677 100644 --- a/src/http.c +++ b/src/http.c @@ -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. */ diff --git a/src/retr.c b/src/retr.c index 5207e54d..95e663fa 100644 --- a/src/retr.c +++ b/src/retr.c @@ -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; } -- 2.39.2