From 25f869096f8a9222c48fd97744e87ebc6333eedd Mon Sep 17 00:00:00 2001 From: "osdl.net!shemminger" Date: Tue, 24 Aug 2004 18:54:49 +0000 Subject: [PATCH] Auto merged 2004/08/24 11:54:13-07:00 osdl.net!shemminger Fix calculation of percent to u32 scaling. (Logical change 1.72) --- tc/tc_util.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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)