diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2015-08-27 17:33:24 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2015-08-27 17:33:24 -0300 |
commit | f585fc98257dbe1dc92aad6bc46c97d2a24b77d8 (patch) | |
tree | 71a8fe569a03e97e3806d70a5ed6363b81a2fcc5 /Meter.c | |
parent | 79356dc125e85b7107b8fe72a7f46a8b636d629a (diff) | |
parent | cf47f4fca1bab93b81a2fb32cb548cb1722bb0f4 (diff) |
Merge pull request #208 from eworm-de/dynamic-unit
Dynamic unit
Diffstat (limited to 'Meter.c')
-rw-r--r-- | Meter.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -141,6 +141,34 @@ Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type) { return this; } +int Meter_humanUnit(char* buffer, unsigned long int value, int size) { + const char * prefix = "KMGTPEZY"; + unsigned long int powi = 1; + unsigned int written, powj = 1, precision = 2; + + for(;;) { + if (value / 1024 < powi) + break; + + if (prefix[1] == 0) + break; + + powi *= 1024; + ++prefix; + } + + for (; precision > 0; precision--) { + powj *= 10; + if (value / powi < powj) + break; + } + + written = snprintf(buffer, size, "%.*f%c", + precision, (double) value / powi, *prefix); + + return written; +} + void Meter_delete(Object* cast) { if (!cast) return; |