From 8b08f41f0df2cf0c97e0d237dfe6d5bded37368a Mon Sep 17 00:00:00 2001 From: hniksic Date: Tue, 23 Jan 2007 13:31:30 -0800 Subject: [PATCH] [svn] Check for overflow when calculating ETA. --- src/ChangeLog | 5 +++++ src/progress.c | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index fe141555..bf9e16ee 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2007-01-23 Hrvoje Niksic + + * progress.c (create_image): Check for ETA overflow. + (print_row_stats): Ditto. + 2007-01-09 Mauro Tortonesi * init.c (cmd_spec_prefer_family): Small fix to get rid of a gcc diff --git a/src/progress.c b/src/progress.c index 23e090a0..f8a581af 100644 --- a/src/progress.c +++ b/src/progress.c @@ -320,8 +320,10 @@ print_row_stats (struct dot_progress *dp, double dltime, bool last) wgint bytes_remaining = dp->total_length - bytes_displayed; /* The quantity downloaded in this download run. */ wgint bytes_sofar = bytes_displayed - dp->initial_length; - int eta = (int) (dltime * bytes_remaining / bytes_sofar + 0.5); - logprintf (LOG_VERBOSE, " %s", eta_to_human_short (eta, true)); + double eta = dltime * bytes_remaining / bytes_sofar; + if (eta < INT_MAX - 1) + logprintf (LOG_VERBOSE, " %s", + eta_to_human_short ((int) (eta + 0.5), true)); } } else @@ -932,7 +934,10 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) I found that doing that results in a very jerky and ultimately unreliable ETA. */ wgint bytes_remaining = bp->total_length - size; - eta = (int) (dl_total_time * bytes_remaining / bp->count + 0.5); + double eta_ = dl_total_time * bytes_remaining / bp->count; + if (eta_ >= INT_MAX - 1) + goto skip_eta; + eta = (int) (eta_ + 0.5); bp->last_eta_value = eta; bp->last_eta_time = dl_total_time; } @@ -944,6 +949,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) } else if (bp->total_length > 0) { + skip_eta: APPEND_LITERAL (" "); } } -- 2.39.2