Code

fix xff excessive rounding
authorFrancois-Xavier Bourlet <fx@dotcloud.com>
Sun, 21 Aug 2011 09:05:40 +0000 (11:05 +0200)
committerFlorian Forster <octo@collectd.org>
Sun, 21 Aug 2011 11:19:43 +0000 (13:19 +0200)
Hi,

When generating arguments for rrd_create, the previous
format string "%.1f", was rounding up the value too aggressively.

ex: for xff==0.9999 the result would be -> 1.0 (invalid value for xff!)

The new format string is "%.10f", which lead up to 10 digits after the
dot, enough to be close to the double type limit, and so handling
correctly the previous example.

Change-Id: I7c6cc55b0d43beb5ef351bb04b67f4628249c737

src/utils_rrdcreate.c

index 66bb27e75dacf6ad6bce7f7f659cfd9e59bd211e..47bf9f66961550d788f82ef160058681a670301a 100644 (file)
@@ -153,7 +153,7 @@ static int rra_get (char ***ret, const value_list_t *vl, /* {{{ */
       if (rra_num >= rra_max)
         break;
 
-      status = ssnprintf (buffer, sizeof (buffer), "RRA:%s:%3.1f:%u:%u",
+      status = ssnprintf (buffer, sizeof (buffer), "RRA:%s:%.10f:%u:%u",
           rra_types[j], cfg->xff, cdp_len, cdp_num);
 
       if ((status < 0) || ((size_t) status >= sizeof (buffer)))