]> andersk Git - openssh.git/blobdiff - progressmeter.c
- dtucker@cvs.openbsd.org 2004/02/27 22:44:56
[openssh.git] / progressmeter.c
index 9fe8cfa41f32fc8f4ad6fc5932f7bbc6d14740b1..f42668526c268852c587409b5b2abe2ada974e37 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 #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"
@@ -80,7 +80,7 @@ format_rate(char *buf, int size, off_t bytes)
                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" : " ");
@@ -107,7 +107,7 @@ refresh_progress_meter(void)
        off_t transferred;
        double elapsed;
        int percent;
-       int bytes_left;
+       off_t bytes_left;
        int cur_speed;
        int hours, minutes, seconds;
        int i, len;
@@ -120,14 +120,18 @@ refresh_progress_meter(void)
 
        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) {
@@ -140,7 +144,9 @@ refresh_progress_meter(void)
        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';
@@ -198,7 +204,7 @@ refresh_progress_meter(void)
                        strlcat(buf, "    ", win_size);
        }
 
-       atomicio(vwrite, STDOUT_FILENO, buf, win_size);
+       atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
        last_update = now;
 }
 
This page took 0.051828 seconds and 4 git commands to generate.