]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: Have progressmeter force an update at the beginning and
authordtucker@openbsd.org <dtucker@openbsd.org>
Thu, 24 Jan 2019 16:52:17 +0000 (16:52 +0000)
committerDarren Tucker <dtucker@dtucker.net>
Thu, 24 Jan 2019 19:32:14 +0000 (06:32 +1100)
end of each transfer.  Fixes the problem recently introduces where very quick
transfers do not display the progressmeter at all.  Spotted by naddy@

OpenBSD-Commit-ID: 68dc46c259e8fdd4f5db3ec2a130f8e4590a7a9a

progressmeter.c
progressmeter.h
scp.c
sftp-client.c

index add462dde5002cf8d3128698fb5d3a43bd956d59..e385c1254cccdc8e17a20db21037c23463a8e13d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: progressmeter.c,v 1.46 2019/01/23 08:01:46 dtucker Exp $ */
+/* $OpenBSD: progressmeter.c,v 1.47 2019/01/24 16:52:17 dtucker Exp $ */
 /*
  * Copyright (c) 2003 Nils Nordman.  All rights reserved.
  *
@@ -59,9 +59,6 @@ static void format_rate(char *, int, off_t);
 static void sig_winch(int);
 static void setscreensize(void);
 
-/* updates the progressmeter to reflect the current state of the transfer */
-void refresh_progress_meter(void);
-
 /* signal handler for updating the progress meter */
 static void sig_alarm(int);
 
@@ -120,7 +117,7 @@ format_size(char *buf, int size, off_t bytes)
 }
 
 void
-refresh_progress_meter(void)
+refresh_progress_meter(int force_update)
 {
        char buf[MAX_WINSIZE + 1];
        off_t transferred;
@@ -131,7 +128,7 @@ refresh_progress_meter(void)
        int hours, minutes, seconds;
        int file_len;
 
-       if ((!alarm_fired && !win_resized) || !can_output())
+       if ((!force_update && !alarm_fired && !win_resized) || !can_output())
                return;
        alarm_fired = 0;
 
@@ -254,7 +251,7 @@ start_progress_meter(const char *f, off_t filesize, off_t *ctr)
        bytes_per_second = 0;
 
        setscreensize();
-       refresh_progress_meter();
+       refresh_progress_meter(1);
 
        signal(SIGALRM, sig_alarm);
        signal(SIGWINCH, sig_winch);
@@ -271,7 +268,7 @@ stop_progress_meter(void)
 
        /* Ensure we complete the progress */
        if (cur_pos != end_pos)
-               refresh_progress_meter();
+               refresh_progress_meter(1);
 
        atomicio(vwrite, STDOUT_FILENO, "\n", 1);
 }
index 8f6678060195431a5843c4a32aa4a5f21f5071ff..1703ea75babc0a15873f056e2fa201420929cdcd 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: progressmeter.h,v 1.4 2019/01/23 08:01:46 dtucker Exp $ */
+/* $OpenBSD: progressmeter.h,v 1.5 2019/01/24 16:52:17 dtucker Exp $ */
 /*
  * Copyright (c) 2002 Nils Nordman.  All rights reserved.
  *
@@ -24,5 +24,5 @@
  */
 
 void   start_progress_meter(const char *, off_t, off_t *);
-void   refresh_progress_meter(void);
+void   refresh_progress_meter(int);
 void   stop_progress_meter(void);
diff --git a/scp.c b/scp.c
index 25595a299abb1fa2a32fd1fc994d98f1feb4cbd5..74dfe521aad1d655977af94fa96dc14ff18eb1fd 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scp.c,v 1.200 2019/01/23 08:01:46 dtucker Exp $ */
+/* $OpenBSD: scp.c,v 1.201 2019/01/24 16:52:17 dtucker Exp $ */
 /*
  * scp - secure remote copy.  This is basically patched BSD rcp which
  * uses ssh to do the data transfer (instead of using rcmd).
@@ -588,7 +588,7 @@ scpio(void *_cnt, size_t s)
        off_t *cnt = (off_t *)_cnt;
 
        *cnt += s;
-       refresh_progress_meter();
+       refresh_progress_meter(0);
        if (limit_kbps > 0)
                bandwidth_limit(&bwlimit, s);
        return 0;
index 36c4b8a4a3048e266ad070b76478afa21b7176d9..73e3c2f53c56489efd034b12d478ee1ca781e64f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-client.c,v 1.132 2019/01/23 08:01:46 dtucker Exp $ */
+/* $OpenBSD: sftp-client.c,v 1.133 2019/01/24 16:52:17 dtucker Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -102,7 +102,7 @@ sftpio(void *_bwlimit, size_t amount)
 {
        struct bwlimit *bwlimit = (struct bwlimit *)_bwlimit;
 
-       refresh_progress_meter();
+       refresh_progress_meter(0);
        if (bwlimit != NULL)
                bandwidth_limit(bwlimit, amount);
        return 0;