diff options
Diffstat (limited to 'main/openssh/openssh6.5-peaktput.diff')
-rw-r--r-- | main/openssh/openssh6.5-peaktput.diff | 64 |
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*/ |