]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
- markus@cvs.openbsd.org 2002/12/13 15:20:52
authorBen Lindstrom <mouring@eviladmin.org>
Mon, 23 Dec 2002 02:53:08 +0000 (02:53 +0000)
committerBen Lindstrom <mouring@eviladmin.org>
Mon, 23 Dec 2002 02:53:08 +0000 (02:53 +0000)
     [scp.c]
     1) include stalling time in total time
     2) truncate filenames to 45 instead of 20 characters
     3) print rate instead of progress bar, no more stars
     4) scale output to tty width
     based on a patch from Niels; ok fries@ lebel@ fgs@ millert@

ChangeLog
scp.c

index 335614598340ec259af92eca344f7f2f493dc148..971aa9c0494677be6e5bd5851104aa2f89215e13 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
      [auth-krb5.c auth1.c hostfile.h monitor_wrap.c sftp-client.c sftp-int.c ssh-add.c ssh-rsa.c 
       sshconnect.c]
      KNF
-  - markus@cvs.openbsd.org 2002/11/21 23:04:33
+   - markus@cvs.openbsd.org 2002/11/21 23:04:33
      [ssh.c]
      debug->debug2
-  - stevesk@cvs.openbsd.org 2002/11/24 21:46:24
+   - stevesk@cvs.openbsd.org 2002/11/24 21:46:24
      [ssh-keysign.8]
      typo: "the the"
    - wcobb@cvs.openbsd.org 2002/11/26 00:45:03
      [scp.c ssh-keygen.c]
      Remove unnecessary fflush(stderr) calls, stderr is unbuffered by default.
      ok markus@
-  - stevesk@cvs.openbsd.org 2002/11/26 02:35:30
+   - stevesk@cvs.openbsd.org 2002/11/26 02:35:30
      [ssh-keygen.1]
      remove outdated statement; ok markus@ deraadt@
    - stevesk@cvs.openbsd.org 2002/11/26 02:38:54
@@ -48,7 +48,7 @@
      [scp.c]
      use roundup() similar to rcp/util.c and avoid problems with strange
      filesystem block sizes, noted by tjr@freebsd.org; ok djm@
-  - djm@cvs.openbsd.org 2002/12/06 05:20:02
+   - djm@cvs.openbsd.org 2002/12/06 05:20:02
      [sftp.1]
      Fix cut'n'paste error, spotted by matthias.riese@b-novative.de; ok deraadt@
    - millert@cvs.openbsd.org 2002/12/09 16:50:30
    - markus@cvs.openbsd.org 2002/12/13 10:03:15
      [channels.c misc.c sshconnect2.c]
      cleanup debug messages, more useful information for the client user.
+   - markus@cvs.openbsd.org 2002/12/13 15:20:52
+     [scp.c]
+     1) include stalling time in total time
+     2) truncate filenames to 45 instead of 20 characters
+     3) print rate instead of progress bar, no more stars
+     4) scale output to tty width
+     based on a patch from Niels; ok fries@ lebel@ fgs@ millert@
 
 20021205
  - (djm) PERL-free fixpaths from stuge-openssh-unix-dev@cdy.org
      save auth method before monitor_reset_key_state(); bugzilla bug #284;
      ok provos@
 
-$Id: ChangeLog,v 1.2534 2002/12/23 02:44:36 mouring Exp $
+$Id: ChangeLog,v 1.2535 2002/12/23 02:53:08 mouring Exp $
diff --git a/scp.c b/scp.c
index eb5f23e4058404010707246bdf8217c3e5e24726..71d2a0d90829655d9c7dca7e8327e9fff4502f23 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -75,7 +75,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: scp.c,v 1.95 2002/12/05 11:08:35 markus Exp $");
+RCSID("$OpenBSD: scp.c,v 1.96 2002/12/13 15:20:52 markus Exp $");
 
 #include "xmalloc.h"
 #include "atomicio.h"
@@ -1119,13 +1119,19 @@ foregroundproc(void)
 void
 progressmeter(int flag)
 {
+       static const char spaces[] = "                          "
+           "                                                   "
+           "                                                   "
+           "                                                   "
+           "                                                   "
+           "                                                   ";
        static const char prefixes[] = " KMGTP";
        static struct timeval lastupdate;
        static off_t lastsize;
        struct timeval now, td, wait;
-       off_t cursize, abbrevsize;
+       off_t cursize, abbrevsize, bytespersec;
        double elapsed;
-       int ratio, barlength, i, remaining;
+       int ratio, remaining, i, ai, bi, nspaces;
        char buf[512];
 
        if (flag == -1) {
@@ -1145,45 +1151,44 @@ progressmeter(int flag)
        } else
                ratio = 100;
 
-       snprintf(buf, sizeof(buf), "\r%-20.20s %3d%% ", curfile, ratio);
-
-       barlength = getttywidth() - 51;
-       if (barlength > 0) {
-               i = barlength * ratio / 100;
-               snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
-                   "|%.*s%*s|", i,
-                   "*******************************************************"
-                   "*******************************************************"
-                   "*******************************************************"
-                   "*******************************************************"
-                   "*******************************************************"
-                   "*******************************************************"
-                   "*******************************************************",
-                   barlength - i, "");
-       }
-       i = 0;
        abbrevsize = cursize;
-       while (abbrevsize >= 100000 && i < sizeof(prefixes)) {
-               i++;
+       for (ai = 0; abbrevsize >= 10000 && ai < sizeof(prefixes); ai++)
                abbrevsize >>= 10;
-       }
-       snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %5lu %c%c ",
-           (unsigned long) abbrevsize, prefixes[i],
-           prefixes[i] == ' ' ? ' ' : 'B');
 
        timersub(&now, &lastupdate, &wait);
        if (cursize > lastsize) {
                lastupdate = now;
                lastsize = cursize;
-               if (wait.tv_sec >= STALLTIME) {
-                       start.tv_sec += wait.tv_sec;
-                       start.tv_usec += wait.tv_usec;
-               }
                wait.tv_sec = 0;
        }
        timersub(&now, &start, &td);
        elapsed = td.tv_sec + (td.tv_usec / 1000000.0);
 
+       bytespersec = 0;
+       if (statbytes > 0) {
+               bytespersec = statbytes;
+               if (elapsed > 0.0)
+                       bytespersec /= elapsed;
+       }
+       for (bi = 1; bytespersec >= 1024000 && bi < sizeof(prefixes); bi++)
+               bytespersec >>= 10;
+
+       nspaces = MIN(getttywidth() - 79, sizeof(spaces) - 1);
+
+       snprintf(buf, sizeof(buf),
+           "\r%-45.45s%.*s%3d%% %4lld%c%c %3lld.%01d%cB/s",
+           curfile,
+           nspaces,
+           spaces,
+           ratio,
+           (long long)abbrevsize,
+           prefixes[ai],
+           ai == 0 ? ' ' : 'B',
+           (long long)(bytespersec / 1024),
+           (int)((bytespersec % 1024) * 10 / 1024),
+           prefixes[bi]
+       );
+
        if (flag != 1 &&
            (statbytes <= 0 || elapsed <= 0.0 || cursize > totalbytes)) {
                snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),