diff options
author | Thomas Graf <tgraf@suug.ch> | 2010-11-17 14:13:33 (GMT) |
---|---|---|
committer | Thomas Graf <tgraf@suug.ch> | 2010-11-17 14:13:33 (GMT) |
commit | d8eeb0a26fd29b05d97560ebc5ba0c8aeb0fb578 (patch) | |
tree | 78c0376bb106703b8bf568052db045cc6a4283fe /lib/utils.c | |
parent | 10424b20c1f29175fce07d0bf7639f2cc324ad78 (diff) | |
download | libnl-d8eeb0a26fd29b05d97560ebc5ba0c8aeb0fb578.zip libnl-d8eeb0a26fd29b05d97560ebc5ba0c8aeb0fb578.tar.gz libnl-d8eeb0a26fd29b05d97560ebc5ba0c8aeb0fb578.tar.bz2 |
New function nl_size2str()
Diffstat (limited to 'lib/utils.c')
-rw-r--r-- | lib/utils.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/utils.c b/lib/utils.c index 1168293..015cd6a 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -224,6 +224,56 @@ long nl_size2int(const char *str) return l; } +static const struct { + double limit; + const char *unit; +} size_units[] = { + { 1024. * 1024. * 1024. * 1024. * 1024., "EiB" }, + { 1024. * 1024. * 1024. * 1024., "TiB" }, + { 1024. * 1024. * 1024., "GiB" }, + { 1024. * 1024., "MiB" }, + { 1024., "KiB" }, + { 0., "B" }, +}; + +/** + * Convert a size toa character string + * @arg size Size in number of bytes + * @arg buf Buffer to write character string to + * @arg len Size of buf + * + * This function converts a value in bytes to a human readable representation + * of it. The function uses IEC prefixes: + * + * @code + * 1024 bytes => 1 KiB + * 1048576 bytes => 1 MiB + * @endcode + * + * The highest prefix is used which ensures a result of >= 1.0, the result + * is provided as floating point number with a maximum precision of 2 digits: + * @code + * 965176 bytes => 942.55 KiB + * @endcode + * + * @return pointer to buf + */ +char *nl_size2str(const size_t size, char *buf, const size_t len) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(size_units); i++) { + if (size >= size_units[i].limit) { + snprintf(buf, len, "%.2g%s", + (double) size / size_units[i].limit, + size_units[i].unit); + return buf; + } + } + + BUG(); +} + /** * Convert a character string to a probability * @arg str probability encoded as character string |