return buf;
}
-/* See http://physics.nist.gov/cuu/Units/binary.html */
-static const struct rate_suffix {
- const char *name;
- double scale;
-} suffixes[] = {
- { "bit", 1. },
- { "Kibit", 1024. },
- { "kbit", 1000. },
- { "mibit", 1024.*1024. },
- { "mbit", 1000000. },
- { "gibit", 1024.*1024.*1024. },
- { "gbit", 1000000000. },
- { "tibit", 1024.*1024.*1024.*1024. },
- { "tbit", 1000000000000. },
- { "Bps", 8. },
- { "KiBps", 8.*1024. },
- { "KBps", 8000. },
- { "MiBps", 8.*1024*1024. },
- { "MBps", 8000000. },
- { "GiBps", 8.*1024.*1024.*1024. },
- { "GBps", 8000000000. },
- { "TiBps", 8.*1024.*1024.*1024.*1024. },
- { "TBps", 8000000000000. },
- { NULL }
-};
-
/* Parse a percent e.g: '30%'
* return: 0 = ok, -1 = error, 1 = out of range
*/
return get_rate64(rate, r_str);
}
-int get_rate(unsigned int *rate, const char *str)
-{
- char *p;
- double bps = strtod(str, &p);
- const struct rate_suffix *s;
-
- if (p == str)
- return -1;
-
- for (s = suffixes; s->name; ++s) {
- if (strcasecmp(s->name, p) == 0) {
- bps *= s->scale;
- p += strlen(p);
- break;
- }
- }
-
- if (*p)
- return -1; /* unknown suffix */
-
- bps /= 8; /* -> bytes per second */
- *rate = bps;
- /* detect if an overflow happened */
- if (*rate != floor(bps))
- return -1;
- return 0;
-}
-
-int get_rate64(__u64 *rate, const char *str)
-{
- char *p;
- double bps = strtod(str, &p);
- const struct rate_suffix *s;
-
- if (p == str)
- return -1;
-
- for (s = suffixes; s->name; ++s) {
- if (strcasecmp(s->name, p) == 0) {
- bps *= s->scale;
- p += strlen(p);
- break;
- }
- }
-
- if (*p)
- return -1; /* unknown suffix */
-
- bps /= 8; /* -> bytes per second */
- *rate = bps;
- return 0;
-}
-
void tc_print_rate(enum output_type t, const char *key, const char *fmt,
unsigned long long rate)
{