|
Lines 119-132
format_size(char *buf, int size, off_t bytes)
Link Here
|
| 119 |
void |
119 |
void |
| 120 |
refresh_progress_meter(int force_update) |
120 |
refresh_progress_meter(int force_update) |
| 121 |
{ |
121 |
{ |
| 122 |
char buf[MAX_WINSIZE + 1]; |
122 |
char buf[MAX_WINSIZE + 1], buf2[MAX_WINSIZE + 1]; |
| 123 |
off_t transferred; |
123 |
off_t transferred; |
| 124 |
double elapsed, now; |
124 |
double elapsed, now; |
| 125 |
int percent; |
125 |
int percent; |
| 126 |
off_t bytes_left; |
126 |
off_t bytes_left; |
| 127 |
int cur_speed; |
127 |
int cur_speed; |
| 128 |
int hours, minutes, seconds; |
128 |
int hours, minutes, seconds; |
| 129 |
int file_len; |
129 |
int file_len, cols; |
| 130 |
|
130 |
|
| 131 |
if ((!force_update && !alarm_fired && !win_resized) || !can_output()) |
131 |
if ((!force_update && !alarm_fired && !win_resized) || !can_output()) |
| 132 |
return; |
132 |
return; |
|
Lines 165-176
refresh_progress_meter(int force_update)
Link Here
|
| 165 |
bytes_per_second = cur_speed; |
165 |
bytes_per_second = cur_speed; |
| 166 |
|
166 |
|
| 167 |
/* filename */ |
167 |
/* filename */ |
| 168 |
buf[0] = '\0'; |
168 |
file_len = cols = win_size - 36; |
| 169 |
file_len = win_size - 36; |
|
|
| 170 |
if (file_len > 0) { |
169 |
if (file_len > 0) { |
| 171 |
buf[0] = '\r'; |
170 |
snmprintf(buf, sizeof(buf), &cols, "%-*s", file_len, file); |
| 172 |
snmprintf(buf+1, sizeof(buf)-1, &file_len, "%-*s", |
171 |
/* If we used fewer columns than expected then pad */ |
| 173 |
file_len, file); |
172 |
if (cols < file_len) { |
|
|
173 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 174 |
"%*s", file_len - cols, ""); |
| 175 |
} |
| 174 |
} |
176 |
} |
| 175 |
|
177 |
|
| 176 |
/* percent of transfer done */ |
178 |
/* percent of transfer done */ |
|
Lines 178-195
refresh_progress_meter(int force_update)
Link Here
|
| 178 |
percent = 100; |
180 |
percent = 100; |
| 179 |
else |
181 |
else |
| 180 |
percent = ((float)cur_pos / end_pos) * 100; |
182 |
percent = ((float)cur_pos / end_pos) * 100; |
| 181 |
snprintf(buf + strlen(buf), win_size - strlen(buf), |
183 |
|
|
|
184 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 182 |
" %3d%% ", percent); |
185 |
" %3d%% ", percent); |
| 183 |
|
186 |
|
| 184 |
/* amount transferred */ |
187 |
/* amount transferred */ |
| 185 |
format_size(buf + strlen(buf), win_size - strlen(buf), |
188 |
format_size(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 186 |
cur_pos); |
189 |
cur_pos); |
| 187 |
strlcat(buf, " ", win_size); |
190 |
strlcat(buf, " ", sizeof(buf)); |
| 188 |
|
191 |
|
| 189 |
/* bandwidth usage */ |
192 |
/* bandwidth usage */ |
| 190 |
format_rate(buf + strlen(buf), win_size - strlen(buf), |
193 |
format_rate(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 191 |
(off_t)bytes_per_second); |
194 |
(off_t)bytes_per_second); |
| 192 |
strlcat(buf, "/s ", win_size); |
195 |
strlcat(buf, "/s ", sizeof(buf)); |
| 193 |
|
196 |
|
| 194 |
/* ETA */ |
197 |
/* ETA */ |
| 195 |
if (!transferred) |
198 |
if (!transferred) |
|
Lines 198-206
refresh_progress_meter(int force_update)
Link Here
|
| 198 |
stalled = 0; |
201 |
stalled = 0; |
| 199 |
|
202 |
|
| 200 |
if (stalled >= STALL_TIME) |
203 |
if (stalled >= STALL_TIME) |
| 201 |
strlcat(buf, "- stalled -", win_size); |
204 |
strlcat(buf, "- stalled -", sizeof(buf)); |
| 202 |
else if (bytes_per_second == 0 && bytes_left) |
205 |
else if (bytes_per_second == 0 && bytes_left) |
| 203 |
strlcat(buf, " --:-- ETA", win_size); |
206 |
strlcat(buf, " --:-- ETA", sizeof(buf)); |
| 204 |
else { |
207 |
else { |
| 205 |
if (bytes_left > 0) |
208 |
if (bytes_left > 0) |
| 206 |
seconds = bytes_left / bytes_per_second; |
209 |
seconds = bytes_left / bytes_per_second; |
|
Lines 213-231
refresh_progress_meter(int force_update)
Link Here
|
| 213 |
seconds -= minutes * 60; |
216 |
seconds -= minutes * 60; |
| 214 |
|
217 |
|
| 215 |
if (hours != 0) |
218 |
if (hours != 0) |
| 216 |
snprintf(buf + strlen(buf), win_size - strlen(buf), |
219 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 217 |
"%d:%02d:%02d", hours, minutes, seconds); |
220 |
"%d:%02d:%02d", hours, minutes, seconds); |
| 218 |
else |
221 |
else |
| 219 |
snprintf(buf + strlen(buf), win_size - strlen(buf), |
222 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), |
| 220 |
" %02d:%02d", minutes, seconds); |
223 |
" %02d:%02d", minutes, seconds); |
| 221 |
|
224 |
|
| 222 |
if (bytes_left > 0) |
225 |
if (bytes_left > 0) |
| 223 |
strlcat(buf, " ETA", win_size); |
226 |
strlcat(buf, " ETA", sizeof(buf)); |
| 224 |
else |
227 |
else |
| 225 |
strlcat(buf, " ", win_size); |
228 |
strlcat(buf, " ", sizeof(buf)); |
| 226 |
} |
229 |
} |
| 227 |
|
230 |
|
| 228 |
atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1); |
231 |
/* Finally, truncate string at window width */ |
|
|
232 |
buf2[0] = '\r'; |
| 233 |
cols = win_size; |
| 234 |
snmprintf(buf2 + 1, sizeof(buf2) - 1, &cols, "%s", buf); |
| 235 |
atomicio(vwrite, STDOUT_FILENO, buf2, strlen(buf2)); |
| 229 |
last_update = now; |
236 |
last_update = now; |
| 230 |
} |
237 |
} |
| 231 |
|
238 |
|