From b5cb61379978fa6dc8d6468dd2f8b412e58cf7bb Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Tue, 19 Nov 2024 12:05:48 +0100 Subject: Add units to ram --- src/blocks/fs.c | 1 + src/blocks/ram.c | 34 +++++++++++++++++++++++++++------- src/util.c | 6 +++--- 3 files changed, 31 insertions(+), 10 deletions(-) (limited to 'src') 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" }, -- cgit v1.2.3