aboutsummaryrefslogtreecommitdiffstats
path: root/main/openssh/openssh6.5-peaktput.diff
diff options
context:
space:
mode:
Diffstat (limited to 'main/openssh/openssh6.5-peaktput.diff')
-rw-r--r--main/openssh/openssh6.5-peaktput.diff64
1 files changed, 64 insertions, 0 deletions
diff --git a/main/openssh/openssh6.5-peaktput.diff b/main/openssh/openssh6.5-peaktput.diff
new file mode 100644
index 0000000000..7307563783
--- /dev/null
+++ b/main/openssh/openssh6.5-peaktput.diff
@@ -0,0 +1,64 @@
+diff --git a/progressmeter.c b/progressmeter.c
+index bbbc706..02e5d6d 100644
+--- a/progressmeter.c
++++ b/progressmeter.c
+@@ -69,6 +69,8 @@ static char *file; /* name of the file being transferred */
+ static off_t start_pos; /* initial position of transfer */
+ static off_t end_pos; /* ending position of transfer */
+ static off_t cur_pos; /* transfer position as of last refresh */
++static off_t last_pos;
++static off_t max_delta_pos = 0;
+ static volatile off_t *counter; /* progress counter */
+ static long stalled; /* how long we have been stalled */
+ static int bytes_per_second; /* current speed in bytes per second */
+@@ -129,12 +131,17 @@ refresh_progress_meter(void)
+ int hours, minutes, seconds;
+ int i, len;
+ int file_len;
++ off_t delta_pos;
+
+ transferred = *counter - (cur_pos ? cur_pos : start_pos);
+ cur_pos = *counter;
+ now = monotime();
+ bytes_left = end_pos - cur_pos;
+
++ delta_pos = cur_pos - last_pos;
++ if (delta_pos > max_delta_pos)
++ max_delta_pos = delta_pos;
++
+ if (bytes_left > 0)
+ elapsed = now - last_update;
+ else {
+@@ -159,7 +166,7 @@ refresh_progress_meter(void)
+
+ /* filename */
+ buf[0] = '\0';
+- file_len = win_size - 35;
++ file_len = win_size - 45;
+ if (file_len > 0) {
+ len = snprintf(buf, file_len + 1, "\r%s", file);
+ if (len < 0)
+@@ -189,6 +196,15 @@ refresh_progress_meter(void)
+ (off_t)bytes_per_second);
+ strlcat(buf, "/s ", win_size);
+
++ /* instantaneous rate */
++ if (bytes_left > 0)
++ format_rate(buf + strlen(buf), win_size - strlen(buf),
++ delta_pos);
++ else
++ format_rate(buf + strlen(buf), win_size - strlen(buf),
++ max_delta_pos);
++ strlcat(buf, "/s ", win_size);
++
+ /* ETA */
+ if (!transferred)
+ stalled += elapsed;
+@@ -225,6 +241,7 @@ refresh_progress_meter(void)
+
+ atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
+ last_update = now;
++ last_pos = cur_pos;
+ }
+
+ /*ARGSUSED*/