summaryrefslogtreecommitdiff
path: root/progressmeter.c
diff options
context:
space:
mode:
Diffstat (limited to 'progressmeter.c')
-rw-r--r--progressmeter.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/progressmeter.c b/progressmeter.c
index c315464ee..f42668526 100644
--- a/progressmeter.c
+++ b/progressmeter.c
@@ -23,7 +23,7 @@
23 */ 23 */
24 24
25#include "includes.h" 25#include "includes.h"
26RCSID("$OpenBSD: progressmeter.c,v 1.15 2003/08/31 12:14:22 markus Exp $"); 26RCSID("$OpenBSD: progressmeter.c,v 1.19 2004/02/05 15:33:33 markus Exp $");
27 27
28#include "progressmeter.h" 28#include "progressmeter.h"
29#include "atomicio.h" 29#include "atomicio.h"
@@ -80,7 +80,7 @@ format_rate(char *buf, int size, off_t bytes)
80 bytes = (bytes + 512) / 1024; 80 bytes = (bytes + 512) / 1024;
81 } 81 }
82 snprintf(buf, size, "%3lld.%1lld%c%s", 82 snprintf(buf, size, "%3lld.%1lld%c%s",
83 (int64_t) bytes / 100, 83 (int64_t) (bytes + 5) / 100,
84 (int64_t) (bytes + 5) / 10 % 10, 84 (int64_t) (bytes + 5) / 10 % 10,
85 unit[i], 85 unit[i],
86 i ? "B" : " "); 86 i ? "B" : " ");
@@ -107,7 +107,7 @@ refresh_progress_meter(void)
107 off_t transferred; 107 off_t transferred;
108 double elapsed; 108 double elapsed;
109 int percent; 109 int percent;
110 int bytes_left; 110 off_t bytes_left;
111 int cur_speed; 111 int cur_speed;
112 int hours, minutes, seconds; 112 int hours, minutes, seconds;
113 int i, len; 113 int i, len;
@@ -120,14 +120,18 @@ refresh_progress_meter(void)
120 120
121 if (bytes_left > 0) 121 if (bytes_left > 0)
122 elapsed = now - last_update; 122 elapsed = now - last_update;
123 else 123 else {
124 elapsed = now - start; 124 elapsed = now - start;
125 /* Calculate true total speed when done */
126 transferred = end_pos;
127 bytes_per_second = 0;
128 }
125 129
126 /* calculate speed */ 130 /* calculate speed */
127 if (elapsed != 0) 131 if (elapsed != 0)
128 cur_speed = (transferred / elapsed); 132 cur_speed = (transferred / elapsed);
129 else 133 else
130 cur_speed = 0; 134 cur_speed = transferred;
131 135
132#define AGE_FACTOR 0.9 136#define AGE_FACTOR 0.9
133 if (bytes_per_second != 0) { 137 if (bytes_per_second != 0) {
@@ -200,7 +204,7 @@ refresh_progress_meter(void)
200 strlcat(buf, " ", win_size); 204 strlcat(buf, " ", win_size);
201 } 205 }
202 206
203 atomicio(vwrite, STDOUT_FILENO, buf, win_size); 207 atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
204 last_update = now; 208 last_update = now;
205} 209}
206 210