aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/blocks/fs.c1
-rw-r--r--src/blocks/ram.c34
-rw-r--r--src/util.c6
3 files changed, 31 insertions, 10 deletions
diff --git a/src/blocks/fs.c b/src/blocks/fs.c
index a0e1133..6069d3e 100644
--- a/src/blocks/fs.c
+++ b/src/blocks/fs.c
@@ -88,6 +88,7 @@ static void block_fs_update(block_t *block)
case FS_STRING:
start += snprintf(buffer + start, rest, "%s", fs->format.parts[i].string);
break;
+
case FS_TOTAL:
start += snprintf_units(buffer + start, rest, total, unit);
break;
diff --git a/src/blocks/ram.c b/src/blocks/ram.c
index 8790ee3..46ec361 100644
--- a/src/blocks/ram.c
+++ b/src/blocks/ram.c
@@ -21,10 +21,26 @@ typedef enum {
RAM_USED_PERC,
} block_ram_mark_t;
+#define RAM_SHIFT 12
+
+static const format_pair_t block_ram_units[] = {
+ { "-si", UNIT_SI << RAM_SHIFT },
+ { "-b", UNIT_B << RAM_SHIFT },
+ { "-kib", UNIT_KB << RAM_SHIFT },
+ { "-mib", UNIT_MB << RAM_SHIFT },
+ { "-gib", UNIT_GB << RAM_SHIFT },
+ { "-tib", UNIT_TB << RAM_SHIFT },
+ { "-kb", (UNIT_KB | UNIT_SI) << RAM_SHIFT },
+ { "-mb", (UNIT_MB | UNIT_SI) << RAM_SHIFT },
+ { "-gb", (UNIT_GB | UNIT_SI) << RAM_SHIFT },
+ { "-tb", (UNIT_TB | UNIT_SI) << RAM_SHIFT },
+ { NULL },
+};
+
static const format_option_t block_ram_options[] = {
- { { "total", RAM_TOTAL } },
- { { "free", RAM_FREE } },
- { { "used", RAM_USED } },
+ { { "total", RAM_TOTAL }, .suffixes = block_ram_units },
+ { { "free", RAM_FREE }, .suffixes = block_ram_units },
+ { { "used", RAM_USED }, .suffixes = block_ram_units },
{ { "free-percentage", RAM_FREE_PERC } },
{ { "used-percentage", RAM_USED_PERC } },
{ { NULL } },
@@ -74,20 +90,24 @@ static void block_ram_update(block_t *block)
size_t rest = start >= size ? 0 : size - start;
if (rest == 0) break;
- switch (ram->format.parts[i].mark) {
+ unit_t mask = UNIT_MASK << RAM_SHIFT;
+ unit_t unit = (ram->format.parts[i].mark & mask) >> RAM_SHIFT;
+
+ switch (ram->format.parts[i].mark & ~mask) {
case RAM_STRING:
start += snprintf(buffer + start, rest, "%s", ram->format.parts[i].string);
break;
+
case RAM_TOTAL:
- start += snprintf(buffer + start, rest, "%ld", total);
+ start += snprintf_units(buffer + start, rest, total * 1024, unit);
break;
case RAM_FREE:
- start += snprintf(buffer + start, rest, "%ld", available);
+ start += snprintf_units(buffer + start, rest, available * 1024, unit);
break;
case RAM_USED:
- start += snprintf(buffer + start, rest, "%ld", total - available);
+ start += snprintf_units(buffer + start, rest, (total - available) * 1024, unit);
break;
case RAM_FREE_PERC:
diff --git a/src/util.c b/src/util.c
index 714ce9d..b077484 100644
--- a/src/util.c
+++ b/src/util.c
@@ -200,11 +200,11 @@ int snprintf_units(char *buffer, size_t max, uint64_t bytes, unit_t unit)
break;
default: {
- int i = -1;
- do {
+ int i = 0;
+ while (round(value) >= base && i < 4) {
value /= base;
i++;
- } while (round(value * 10) / 10 >= base && i < 4);
+ }
const char *units[2][5] = {
{ " B", " kB", " MB", " GB", " TB" },