]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Display size with human_size_brief with a chosen prefix
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index 09971a29d1306d1f7472bef57df756860b4f6654..cb97816c346f5d4b5e88068d423090d00c10a2bc 100644 (file)
--- a/util.c
+++ b/util.c
@@ -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;
 }