[PATCH 5/6] Display size with human_size_brief with a chosen prefix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
---
 Query.c |    2 +-
 mdadm.h |    7 ++++++-
 util.c  |   36 +++++++++++++++++++++++++++---------
 3 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/Query.c b/Query.c
index b9c209f..329e583 100644
--- a/Query.c
+++ b/Query.c
@@ -76,7 +76,7 @@ int Query(char *dev)
 	else {
 		printf("%s: %s %s %d devices, %d spare%s. Use mdadm --detail for more detail.\n",
 		       dev,
-		       human_size_brief(larray_size),
+		       human_size_brief(larray_size,IEC),
 		       map_num(pers, array.level),
 		       array.raid_disks,
 		       array.spare_disks, array.spare_disks==1?"":"s");
diff --git a/mdadm.h b/mdadm.h
index e27275b..a24b803 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -329,6 +329,11 @@ enum special_options {
 	ControllerPath,
 };
 
+enum prefix_standard {
+	JEDEC,
+	IEC
+};
+
 /* structures read from config file */
 /* List of mddevice names and identifiers
  * Identifiers can be:
@@ -1242,7 +1247,7 @@ extern int set_array_info(int mdfd, struct supertype *st, struct mdinfo *info);
 unsigned long long min_recovery_start(struct mdinfo *array);
 
 extern char *human_size(long long bytes);
-extern char *human_size_brief(long long bytes);
+extern char *human_size_brief(long long bytes, int prefix);
 extern void print_r10_layout(int layout);
 
 #define NoMdDev (1<<23)
diff --git a/util.c b/util.c
index 09971a2..cb97816 100644
--- 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;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux