[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wget
Subject:    Re: Addition to problems with progress on large files
From:       Hrvoje Niksic <hniksic () xemacs ! org>
Date:       2007-01-23 21:31:01
Message-ID: 87tzyhbfca.fsf () busola ! homelinux ! net
[Download RAW message or body]

Thanks for the report.  This patch fixes the problem:

2007-01-23  Hrvoje Niksic  <hniksic@xemacs.org>

	* progress.c (create_image): Check for ETA overflow.
	(print_row_stats): Ditto.

Index: src/progress.c
===================================================================
--- src/progress.c	(revision 2202)
+++ src/progress.c	(working copy)
@@ -320,8 +320,10 @@
 	  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 @@
 		 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 @@
 	}
       else if (bp->total_length > 0)
 	{
+	skip_eta:
 	  APPEND_LITERAL ("             ");
 	}
     }
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic