]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip-link: in human readable output use dynamic precision length
authorChristian Hesse <mail@eworm.de>
Tue, 4 Nov 2014 21:17:15 +0000 (22:17 +0100)
committerStephen Hemminger <shemming@brocade.com>
Fri, 7 Nov 2014 00:02:33 +0000 (16:02 -0800)
ip/ipaddress.c

index e240bb5486433b6c9849474917c0bb9d2bf4f29f..db39437305a9a05d77c0c58dac799c23dfe33f5f 100644 (file)
@@ -324,6 +324,8 @@ static void print_num(FILE *fp, unsigned width, uint64_t count)
        const char *prefix = "kMGTPE";
        const unsigned int base = use_iec ? 1024 : 1000;
        uint64_t powi = 1;
+       uint16_t powj = 1;
+       uint8_t precision = 2;
        char buf[64];
 
        if (!human_readable || count < base) {
@@ -343,8 +345,15 @@ static void print_num(FILE *fp, unsigned width, uint64_t count)
                ++prefix;
        }
 
-       snprintf(buf, sizeof(buf), "%.1f%c%s", (double) count / powi, 
-                *prefix, use_iec ? "i" : "");
+       /* try to guess a good number of digits for precision */
+       for (; precision > 0; precision--) {
+               powj *= 10;
+               if (count / powi < powj)
+                       break;
+       }
+
+       snprintf(buf, sizeof(buf), "%.*f%c%s", precision,
+               (double) count / powi, *prefix, use_iec ? "i" : "");
 
        fprintf(fp, "%-*s ", width, buf);
 }