]> sjero.net Git - wget/commitdiff
[svn] Check for overflow when calculating ETA.
authorhniksic <devnull@localhost>
Tue, 23 Jan 2007 21:31:30 +0000 (13:31 -0800)
committerhniksic <devnull@localhost>
Tue, 23 Jan 2007 21:31:30 +0000 (13:31 -0800)
src/ChangeLog
src/progress.c

index fe141555f68384258f698bad6eb51d46278379e4..bf9e16eea76657957f390b141ef335ecfb86ef3b 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-23  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * progress.c (create_image): Check for ETA overflow.
+       (print_row_stats): Ditto.
+
 2007-01-09  Mauro Tortonesi  <mauro@ferrara.linux.it>
 
        * init.c (cmd_spec_prefer_family): Small fix to get rid of a gcc
index 23e090a01470bd4d1654cd0b8dda6dbe5a155318..f8a581af2f82d3da8d31c5ccacea4f91a00ac76f 100644 (file)
@@ -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 ("             ");
        }
     }