From 58e0e1eda9cbb09a56ffdc8ac6934dc5f5f884b2 Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Thu, 9 Jun 2011 12:29:21 +0200 Subject: Add nl_rate2str() --- include/netlink/utils.h | 6 ++++++ lib/utils.c | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/netlink/utils.h b/include/netlink/utils.h index 309e02f..a1ef82e 100644 --- a/include/netlink/utils.h +++ b/include/netlink/utils.h @@ -38,9 +38,15 @@ extern "C" { /** @} */ +enum { + NL_BYTE_RATE, + NL_BIT_RATE, +}; + /* unit pretty-printing */ extern double nl_cancel_down_bytes(unsigned long long, char **); extern double nl_cancel_down_bits(unsigned long long, char **); +extern int nl_rate2str(unsigned long long, int, char *, size_t); extern double nl_cancel_down_us(uint32_t, char **); /* generic unit translations */ diff --git a/lib/utils.c b/lib/utils.c index b507608..c7d3abd 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -151,6 +151,27 @@ double nl_cancel_down_bits(unsigned long long l, char **unit) } +int nl_rate2str(unsigned long long rate, int type, char *buf, size_t len) +{ + char *unit; + double frac; + + switch (type) { + case NL_BYTE_RATE: + frac = nl_cancel_down_bytes(rate, &unit); + break; + + case NL_BIT_RATE: + frac = nl_cancel_down_bits(rate, &unit); + break; + + default: + BUG(); + } + + return snprintf(buf, len, "%.2f%s/s", frac, unit); +} + /** * Cancel down a micro second value * @arg l micro seconds -- cgit v1.2.1