From 16feb1e0ea9b5d3966f22f4ae047335b9d1b60e1 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 9 Aug 2016 16:22:24 +0200 Subject: [PATCH] gpg: Extend the PROGRESS line to give the used unit. * g10/progress.c (write_status_progress): Print the units parameter. Signed-off-by: Werner Koch --- doc/DETAILS | 5 ++++- g10/progress.c | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/doc/DETAILS b/doc/DETAILS index 02f9badff..0139fdbc2 100644 --- a/doc/DETAILS +++ b/doc/DETAILS @@ -929,7 +929,7 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: - 3 :: Ambigious specification - 4 :: Key is stored on a smartcard. -*** PROGRESS +*** PROGRESS [] Used by the primegen and Public key functions to indicate progress. is the character displayed with no --status-fd enabled, with the linefeed replaced by an 'X'. is the @@ -953,6 +953,9 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: the data of a smartcard. - card_busy :: A smartcard is still working + is sometines used to describe the units for and + . For example "B", "KiB", or "MiB". + *** BACKUP_KEY_CREATED A backup of a key identified by has been writte to the file ; is percent-escaped. diff --git a/g10/progress.c b/g10/progress.c index a1027b8d3..efc3b3a91 100644 --- a/g10/progress.c +++ b/g10/progress.c @@ -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); }