diff options
author | Maciej Naruszewicz <maciej.naruszewicz@intel.com> | 2012-10-02 16:41:13 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-10-02 16:41:13 +1000 |
commit | f0ec67106c00f8dd1cadebfdff933fd8aefa0ff2 (patch) | |
tree | d24c04334fe33be3a8edf58d88086cdc122bc402 /util.c | |
parent | 570abc6f3881b5152cb1244d5e6afcc421c5a4ce (diff) |
Display size with human_size_brief with a chosen prefix
When using human_size_brief, only IEC prefixes were supported. Now
it's possible to specify which format we want to see - either IEC
(kibi, mibi, gibi) or JEDEC (kilo, mega, giga).
Signed-off-by: Maciej Naruszewicz <maciej.naruszewicz@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 36 |
1 files changed, 27 insertions, 9 deletions
@@ -682,7 +682,7 @@ char *human_size(long long bytes) return buf; } -char *human_size_brief(long long bytes) +char *human_size_brief(long long bytes, int prefix) { static char buf[30]; @@ -693,19 +693,37 @@ char *human_size_brief(long long bytes) * gigabytes, as that shows more precision and isn't * too large a number. * Terabytes are not yet handled. + * + * If prefix == IEC, we mean prefixes like kibi,mebi,gibi etc. + * If prefix == JEDEC, we mean prefixes like kilo,mega,giga etc. */ if (bytes < 5000*1024) buf[0] = 0; - else if (bytes < 2*1024LL*1024LL*1024LL) { - long cMiB = (bytes / ( (1LL<<20) / 200LL ) +1) /2; - snprintf(buf, sizeof(buf), " (%ld.%02ldMiB)", - cMiB/100 , cMiB % 100); - } else { - long cGiB = (bytes / ( (1LL<<30) / 200LL ) +1) /2; - snprintf(buf, sizeof(buf), " (%ld.%02ldGiB)", - cGiB/100 , cGiB % 100); + else if (prefix == IEC) { + if (bytes < 2*1024LL*1024LL*1024LL) { + long cMiB = (bytes / ( (1LL<<20) / 200LL ) +1) /2; + snprintf(buf, sizeof(buf), "%ld.%02ldMiB", + cMiB/100 , cMiB % 100); + } else { + long cGiB = (bytes / ( (1LL<<30) / 200LL ) +1) /2; + snprintf(buf, sizeof(buf), "%ld.%02ldGiB", + cGiB/100 , cGiB % 100); + } + } + else if (prefix == JEDEC) { + if (bytes < 2*1024LL*1024LL*1024LL) { + long cMB = (bytes / ( 1000000LL / 200LL ) +1) /2; + snprintf(buf, sizeof(buf), "%ld.%02ldMB", + cMB/100, cMB % 100); + } else { + long cGB = (bytes / (1000000000LL/200LL ) +1) /2; + snprintf(buf, sizeof(buf), "%ld.%02ldGB", + cGB/100 , cGB % 100); + } } + else + buf[0] = 0; return buf; } |