From: osdl.net!shemminger Date: Tue, 24 Aug 2004 18:54:49 +0000 (+0000) Subject: Auto merged X-Git-Tag: v4.13.0~2287 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=25f869096f8a9222c48fd97744e87ebc6333eedd;p=mirror_iproute2.git Auto merged 2004/08/24 11:54:13-07:00 osdl.net!shemminger Fix calculation of percent to u32 scaling. (Logical change 1.72) --- diff --git a/tc/tc_util.c b/tc/tc_util.c index ad72b63e..5545478f 100644 --- a/tc/tc_util.c +++ b/tc/tc_util.c @@ -331,25 +331,25 @@ char * sprint_size(__u32 size, char *buf) return buf; } -static double percent_scale = (double)(1ull << 32) / 100.; +static const double max_percent_value = 0xffffffff; int get_percent(__u32 *percent, const char *str) { char *p; - double per = strtod(str, &p); + double per = strtod(str, &p) / 100.; - if (per > 100.) + if (per > 1. || per < 0) return -1; if (*p && strcmp(p, "%")) return -1; - *percent = per * percent_scale; + *percent = (unsigned) rint(per * max_percent_value); return 0; } void print_percent(char *buf, int len, __u32 per) { - snprintf(buf, len, "%g%%", (double) per / percent_scale); + snprintf(buf, len, "%g%%", 100. * (double) per / max_percent_value); } char * sprint_percent(__u32 per, char *buf)