diff options
Diffstat (limited to 'progressmeter.c')
-rw-r--r-- | progressmeter.c | 16 |
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" |
26 | RCSID("$OpenBSD: progressmeter.c,v 1.15 2003/08/31 12:14:22 markus Exp $"); | 26 | RCSID("$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 | ||