*/
#include "includes.h"
-RCSID("$OpenBSD: progressmeter.c,v 1.13 2003/07/31 22:34:03 markus Exp $");
+RCSID("$OpenBSD: progressmeter.c,v 1.19 2004/02/05 15:33:33 markus Exp $");
#include "progressmeter.h"
#include "atomicio.h"
bytes = (bytes + 512) / 1024;
}
snprintf(buf, size, "%3lld.%1lld%c%s",
- (int64_t) bytes / 100,
+ (int64_t) (bytes + 5) / 100,
(int64_t) (bytes + 5) / 10 % 10,
unit[i],
i ? "B" : " ");
off_t transferred;
double elapsed;
int percent;
- int bytes_left;
+ off_t bytes_left;
int cur_speed;
int hours, minutes, seconds;
int i, len;
if (bytes_left > 0)
elapsed = now - last_update;
- else
+ else {
elapsed = now - start;
+ /* Calculate true total speed when done */
+ transferred = end_pos;
+ bytes_per_second = 0;
+ }
/* calculate speed */
if (elapsed != 0)
cur_speed = (transferred / elapsed);
else
- cur_speed = 0;
+ cur_speed = transferred;
#define AGE_FACTOR 0.9
if (bytes_per_second != 0) {
buf[0] = '\0';
file_len = win_size - 35;
if (file_len > 0) {
- len = snprintf(buf, file_len, "\r%s", file);
+ len = snprintf(buf, file_len + 1, "\r%s", file);
+ if (len < 0)
+ len = 0;
for (i = len; i < file_len; i++ )
buf[i] = ' ';
buf[file_len] = '\0';
strlcat(buf, " ", win_size);
}
- atomicio(vwrite, STDOUT_FILENO, buf, win_size);
+ atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
last_update = now;
}