From 43b8a8e6f1786589bb7e39a2dbdd26a6feb1a08b Mon Sep 17 00:00:00 2001 From: Peter Stamfest Date: Thu, 4 Sep 2014 08:06:48 +0200 Subject: [PATCH] fix "Cannot parse value line" errors because rrd_strtodbl cannot handle "-nan" --- src/rrd_strtod.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/rrd_strtod.c b/src/rrd_strtod.c index 3081cd1d..40f7dd2d 100644 --- a/src/rrd_strtod.c +++ b/src/rrd_strtod.c @@ -42,6 +42,15 @@ #include "rrd.h" #include "rrd_strtod.h" +static int parse_special(char *str, double *d) { + if (strncasecmp(str, "-nan", 4) == 0) *d = DNAN; + else if (strncasecmp(str, "nan", 3) == 0) *d = -DNAN; + else if (strncasecmp(str, "inf", 3) == 0) *d = DINF; + else if (strncasecmp(str, "-inf", 4) == 0) *d = -DINF; + else return 0; + return 2; +} + /* returns 2 on success */ /* i.e. if the whole string has been converted to a double successfully */ unsigned int rrd_strtodbl @@ -54,6 +63,9 @@ unsigned int rrd_strtodbl if ( local_endptr == (char *)str ) { /* no conversion has been done */ /* for inputs like "abcdj", i.e. no number at all */ + if (parse_special(str, dbl) == 2) { + return 2; + } if( error ) { rrd_set_error("%s - Cannot convert '%s' to float", error, str); } -- 2.47.3