wget: make -c _not_ truncate the file

function                                             old     new   delta
retrieve_file_data                                   396     436     +40
reset_beg_range_to_zero                               52      45      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2012-06-17 19:52:25 +02:00
parent c5b01016e6
commit 6144124aac

View File

@ -352,10 +352,11 @@ static char *gethdr(FILE *fp)
static void reset_beg_range_to_zero(void)
{
//bb_error_msg("restart failed");
bb_error_msg("restart failed");
G.beg_range = 0;
xlseek(G.output_fd, 0, SEEK_SET);
ftruncate(G.output_fd, 0);
/* Done at the end instead: */
/* ftruncate(G.output_fd, 0); */
}
static FILE* prepare_ftp_session(FILE **dfpp, struct host_info *target, len_and_sockaddr *lsa)
@ -554,6 +555,17 @@ static void NOINLINE retrieve_file_data(FILE *dfp)
G.got_clen = 1;
}
/* If -c failed, we restart from the beginning,
* but we do not truncate file then, we do it only now, at the end.
* This lets user to ^C if his 99% complete 10 GB file download
* failed to restart *without* losing the almost complete file.
*/
{
off_t pos = lseek(G.output_fd, 0, SEEK_CUR);
if (pos != (off_t)-1)
ftruncate(G.output_fd, pos);
}
/* Draw full bar and free its resources */
G.chunked = 0; /* makes it show 100% even for chunked download */
G.got_clen = 1; /* makes it show 100% even for download of (formerly) unknown size */