set SO_REUSEADDR on the listen socket -- kevin brintnall
[rrdtool.git] / src / rrd_rpncalc.c
index 839643b..5bb5e40 100644 (file)
@@ -1,12 +1,12 @@
 /****************************************************************************
- * RRDtool 1.2.99907080300  Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.3.2  Copyright by Tobi Oetiker, 1997-2008
  ****************************************************************************
  * rrd_rpncalc.c  RPN calculator functions
  ****************************************************************************/
 
 #include "rrd_tool.h"
 #include "rrd_rpncalc.h"
-#include "rrd_graph.h"
+// #include "rrd_graph.h"
 #include <limits.h>
 #include <locale.h>
 
@@ -547,14 +547,15 @@ short rpn_calc(
             break;
         case OP_ADDNAN:
             stackunderflow(1);
-                       if (isnan(rpnstack->s[stptr - 1])) {
-                   rpnstack->s[stptr - 1] = rpnstack->s[stptr];
-                       } else if (isnan(rpnstack->s[stptr])) {
-                   //rpnstack->s[stptr - 1] = rpnstack->s[stptr - 1];
-                       } else {
-                  rpnstack->s[stptr - 1] = rpnstack->s[stptr - 1]
-                   + rpnstack->s[stptr];
-                       }
+            if (isnan(rpnstack->s[stptr - 1])) {
+                rpnstack->s[stptr - 1] = rpnstack->s[stptr];
+            } else if (isnan(rpnstack->s[stptr])) {
+                /* NOOP */
+                /* rpnstack->s[stptr - 1] = rpnstack->s[stptr - 1]; */
+            } else {
+                rpnstack->s[stptr - 1] = rpnstack->s[stptr - 1]
+                    + rpnstack->s[stptr];
+            }
 
             stptr--;
             break;
@@ -705,8 +706,10 @@ short rpn_calc(
             break;
         case OP_IF:
             stackunderflow(2);
-            rpnstack->s[stptr - 2] = rpnstack->s[stptr - 2] != 0.0 ?
-                rpnstack->s[stptr - 1] : rpnstack->s[stptr];
+            rpnstack->s[stptr - 2] = (isnan(rpnstack->s[stptr - 2])
+                                      || rpnstack->s[stptr - 2] ==
+                                      0.0) ? rpnstack->s[stptr] : rpnstack->
+                s[stptr - 1];
             stptr--;
             stptr--;
             break;