gpg: Extend the PROGRESS line to give the used unit.
authorWerner Koch <wk@gnupg.org>
Tue, 9 Aug 2016 14:22:24 +0000 (16:22 +0200)
committerWerner Koch <wk@gnupg.org>
Tue, 9 Aug 2016 14:28:39 +0000 (16:28 +0200)
* g10/progress.c (write_status_progress): Print the units parameter.

Signed-off-by: Werner Koch <wk@gnupg.org>
doc/DETAILS
g10/progress.c

index 02f9bad..0139fdb 100644 (file)
@@ -929,7 +929,7 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB:
     - 3 :: Ambigious specification
     - 4 :: Key is stored on a smartcard.
 
-*** PROGRESS <what> <char> <cur> <total>
+*** PROGRESS <what> <char> <cur> <total> [<units>]
     Used by the primegen and Public key functions to indicate
     progress.  <char> is the character displayed with no --status-fd
     enabled, with the linefeed replaced by an 'X'.  <cur> is the
@@ -953,6 +953,9 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB:
                           the data of a smartcard.
            - card_busy :: A smartcard is still working
 
+    <units> is sometines used to describe the units for <current> and
+    <total>.  For example "B", "KiB", or "MiB".
+
 *** BACKUP_KEY_CREATED <fingerprint> <fname>
     A backup of a key identified by <fingerprint> has been writte to
     the file <fname>; <fname> is percent-escaped.
index a1027b8..efc3b3a 100644 (file)
@@ -75,7 +75,9 @@ static void
 write_status_progress (const char *what,
                        unsigned long current, unsigned long total)
 {
-  char buffer[50];
+  char buffer[60];
+  char units[] = "BKMGTPEZY?";
+  int unitidx = 0;
 
   /* Although we use an unsigned long for the values, 32 bit
    * applications using GPGME will use an "int" and thus are limited
@@ -98,6 +100,7 @@ write_status_progress (const char *what,
         {
           total /= 1024;
           current /= 1024;
+          unitidx++;
         }
     }
   else
@@ -105,11 +108,17 @@ write_status_progress (const char *what,
       while (current > 1024*1024)
         {
           current /= 1024;
+          unitidx++;
         }
     }
 
-  snprintf (buffer, sizeof buffer, "%.20s ? %lu %lu",
-            what? what : "?", current, total);
+  if (unitidx > 9)
+    unitidx = 9;
+
+  snprintf (buffer, sizeof buffer, "%.20s ? %lu %lu %c%s",
+            what? what : "?", current, total,
+            units[unitidx],
+            unitidx? "iB" : "");
   write_status_text (STATUS_PROGRESS, buffer);
 }