corrected bad data re-use and buffer problems
authorDaniel Stenberg <daniel@haxx.se>
Mon, 25 Sep 2000 21:49:37 +0000 (21:49 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 25 Sep 2000 21:49:37 +0000 (21:49 +0000)
lib/progress.c
lib/urldata.h

index 75defba..8a8a78f 100644 (file)
@@ -183,7 +183,7 @@ int pgrsUpdate(struct UrlData *data)
   struct timeval now;
   int result;
 
-  char max5[6][6];
+  char max5[6][10];
   double dlpercen=0;
   double ulpercen=0;
   double total_percen=0;
@@ -191,12 +191,7 @@ int pgrsUpdate(struct UrlData *data)
   double total_transfer;
   double total_expected_transfer;
 
-#define CURR_TIME 5
-
-  static double speeder[ CURR_TIME ];
-  static int speeder_c=0;
-
-  int nowindex = speeder_c% CURR_TIME;
+  int nowindex = data->progress.speeder_c% CURR_TIME;
   int checkindex;
   int count;
 
@@ -241,15 +236,19 @@ int pgrsUpdate(struct UrlData *data)
   /* Let's do the "current speed" thing, which should use the fastest
          of the dl/ul speeds */
 
-  speeder[ nowindex ] = data->progress.downloaded>data->progress.uploaded?
+  data->progress.speeder[ nowindex ] =
+    data->progress.downloaded>data->progress.uploaded?
     data->progress.downloaded:data->progress.uploaded;
-  speeder_c++; /* increase */
-  count = ((speeder_c>=CURR_TIME)?CURR_TIME:speeder_c) - 1;
-  checkindex = (speeder_c>=CURR_TIME)?speeder_c%CURR_TIME:0;
+  data->progress.speeder_c++; /* increase */
+  count = ((data->progress.speeder_c>=CURR_TIME)?
+           CURR_TIME:data->progress.speeder_c) - 1;
+  checkindex = (data->progress.speeder_c>=CURR_TIME)?
+    data->progress.speeder_c%CURR_TIME:0;
 
   /* find out the average speed the last CURR_TIME seconds */
   data->progress.current_speed =
-    (speeder[nowindex]-speeder[checkindex])/(count?count:1);
+    (data->progress.speeder[nowindex]-
+     data->progress.speeder[checkindex])/(count?count:1);
 
   if(data->progress.flags & PGRS_HIDE)
     return 0;
@@ -284,6 +283,7 @@ int pgrsUpdate(struct UrlData *data)
          total estimate! */
   total_estimate = ulestimate>dlestimate?ulestimate:dlestimate;
 
+
   /* If we have a total estimate, we can display that and the expected
          time left */
   if(total_estimate) {
@@ -329,5 +329,5 @@ int pgrsUpdate(struct UrlData *data)
           max5data(data->progress.current_speed, max5[5]) /* current speed */
           );
 
-    return 0;
+  return 0;
 }
index 7786d97..45ff75c 100644 (file)
@@ -242,6 +242,11 @@ struct Progress {
   struct timeval t_connect;
   struct timeval t_pretransfer;
   int httpcode;
+
+#define CURR_TIME 5
+
+  double speeder[ CURR_TIME ];
+  int speeder_c;
 };
 
 /****************************************************************************