diff options
-rw-r--r-- | include/netlink/utils.h | 4 | ||||
-rw-r--r-- | lib/utils.c | 46 |
2 files changed, 30 insertions, 20 deletions
diff --git a/include/netlink/utils.h b/include/netlink/utils.h index 502341a..397f9b5 100644 --- a/include/netlink/utils.h +++ b/include/netlink/utils.h @@ -44,8 +44,8 @@ enum { }; /* unit pretty-printing */ -extern double nl_cancel_down_bytes(unsigned long long, char **); -extern double nl_cancel_down_bits(unsigned long long, char **); +extern double nl_cancel_down_bytes(unsigned long long, const char **); +extern double nl_cancel_down_bits(unsigned long long, const char **); extern int nl_rate2str(unsigned long long, int, char *, size_t); extern double nl_cancel_down_us(uint32_t, char **); diff --git a/lib/utils.c b/lib/utils.c index 467fd7f..0f6ff14 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -121,10 +121,11 @@ int __nl_read_num_str_file(const char *path, int (*cb)(long, const char *)) * * Cancels down a byte counter until it reaches a reasonable * unit. The chosen unit is assigned to \a unit. + * This function assume 1024 bytes in one kilobyte * * @return The cancelled down byte counter in the new unit. */ -double nl_cancel_down_bytes(unsigned long long l, char **unit) +double nl_cancel_down_bytes(unsigned long long l, const char **unit) { if (l >= 1099511627776LL) { *unit = "TiB"; @@ -149,30 +150,36 @@ double nl_cancel_down_bytes(unsigned long long l, char **unit) * @arg l bit counter * @arg unit destination unit pointer * - * Cancels downa bit counter until it reaches a reasonable + * Cancels down bit counter until it reaches a reasonable * unit. The chosen unit is assigned to \a unit. + * This function assume 1000 bits in one kilobit * * @return The cancelled down bit counter in the new unit. */ -double nl_cancel_down_bits(unsigned long long l, char **unit) +double nl_cancel_down_bits(unsigned long long l, const char **unit) { - if (l >= 1099511627776ULL) { + if (l >= 1000000000000ULL) { *unit = "Tbit"; - return ((double) l) / 1099511627776ULL; - } else if (l >= 1073741824) { + return ((double) l) / 1000000000000ULL; + } + + if (l >= 1000000000) { *unit = "Gbit"; - return ((double) l) / 1073741824; - } else if (l >= 1048576) { + return ((double) l) / 1000000000; + } + + if (l >= 1000000) { *unit = "Mbit"; - return ((double) l) / 1048576; - } else if (l >= 1024) { + return ((double) l) / 1000000; + } + + if (l >= 1000) { *unit = "Kbit"; - return ((double) l) / 1024; - } else { - *unit = "bit"; - return (double) l; + return ((double) l) / 1000; } - + + *unit = "bit"; + return (double) l; } int nl_rate2str(unsigned long long rate, int type, char *buf, size_t len) @@ -238,6 +245,9 @@ double nl_cancel_down_us(uint32_t l, char **unit) * - b,kb/k,m/mb,gb/g for bytes * - bit,kbit/mbit/gbit * + * This function assume 1000 bits in one kilobit and + * 1024 bytes in one kilobyte + * * @return The number of bytes or -1 if the string is unparseable */ long nl_size2int(const char *str) @@ -253,13 +263,13 @@ long nl_size2int(const char *str) else if (!strcasecmp(p, "gb") || !strcasecmp(p, "g")) l *= 1024*1024*1024; else if (!strcasecmp(p, "gbit")) - l *= 1024*1024*1024/8; + l *= 1000000000L/8; else if (!strcasecmp(p, "mb") || !strcasecmp(p, "m")) l *= 1024*1024; else if (!strcasecmp(p, "mbit")) - l *= 1024*1024/8; + l *= 1000000/8; else if (!strcasecmp(p, "kbit")) - l *= 1024/8; + l *= 1000/8; else if (!strcasecmp(p, "bit")) l /= 8; else if (strcasecmp(p, "b") != 0) |