]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
fix "Cannot parse value line" errors because rrd_strtodbl cannot handle "-nan"
authorPeter Stamfest <peter@stamfest.at>
Thu, 4 Sep 2014 06:06:48 +0000 (08:06 +0200)
committerPeter Stamfest <peter@stamfest.at>
Thu, 4 Sep 2014 08:18:22 +0000 (10:18 +0200)
src/rrd_strtod.c

index 3081cd1de62cc435d19436eb2f9ffa3869362036..40f7dd2d872715a48100106a889212e67b52da82 100644 (file)
 #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);
         }