]> andersk Git - openssh.git/blobdiff - progressmeter.c
- (dtucker) [auth-pam.c scard-opensc.c] Tinderbox says auth-pam.c uses
[openssh.git] / progressmeter.c
index 170d869f4d233f498c668ac48b61a3e02ca63b5a..e74f4785f0e00f551dea5370f0ef1570a4e66e9f 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.20 2004/05/11 19:01:43 deraadt 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';
@@ -161,7 +167,7 @@ refresh_progress_meter(void)
 
        /* bandwidth usage */
        format_rate(buf + strlen(buf), win_size - strlen(buf),
-           bytes_per_second);
+           (off_t)bytes_per_second);
        strlcat(buf, "/s ", win_size);
 
        /* ETA */
@@ -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;
 }
 
@@ -212,7 +218,7 @@ update_progress_meter(int ignore)
        if (can_output())
                refresh_progress_meter();
 
-       mysignal(SIGALRM, update_progress_meter);
+       signal(SIGALRM, update_progress_meter);
        alarm(UPDATE_INTERVAL);
        errno = save_errno;
 }
@@ -243,7 +249,7 @@ start_progress_meter(char *f, off_t filesize, off_t *stat)
        if (can_output())
                refresh_progress_meter();
 
-       mysignal(SIGALRM, update_progress_meter);
+       signal(SIGALRM, update_progress_meter);
        alarm(UPDATE_INTERVAL);
 }
 
This page took 0.035175 seconds and 4 git commands to generate.