prepare for the release of rrdtool-1.2.9
[rrdtool.git] / src / rrd_rpncalc.c
index 73bef2f..1fd30aa 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * RRDtool 1.2rc3  Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.9  Copyright by Tobi Oetiker, 1997-2005
  ****************************************************************************
  * rrd_rpncalc.c  RPN calculator functions
  ****************************************************************************/
@@ -97,7 +97,7 @@ void rpn_compact2str(rpn_cdefds_t *rpnc,ds_def_t *ds_def,char **str)
         
         if (rpnc[i].op == OP_NUMBER) {
             /* convert a short into a string */
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
             _itoa(rpnc[i].val,buffer,10);
 #else
             sprintf(buffer,"%d",rpnc[i].val);
@@ -428,7 +428,8 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
                rpnstack -> s[++stptr] = rpnp[rpi].val;
                break;
            case OP_VARIABLE:
-               /* Sanity check: VDEFs shouldn't make it here */
+            case OP_PREV_OTHER:
+           /* Sanity check: VDEFs shouldn't make it here */
                if (rpnp[rpi].ds_cnt == 0) {
                    rrd_set_error("VDEF made it into rpn_calc... aborting");
                    return -1;
@@ -439,7 +440,16 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
                     * row in the rra (skip over non-relevant
                     * data sources)
                     */
-                   rpnstack -> s[++stptr] =  *(rpnp[rpi].data);
+                   if (rpnp[rpi].op == OP_VARIABLE) {
+                       rpnstack -> s[++stptr] =  *(rpnp[rpi].data);
+                   } else {
+                       if ((output_idx) <= 0) {
+                           rpnstack -> s[++stptr] = DNAN;
+                       } else {                            
+                           rpnstack -> s[++stptr] =  *(rpnp[rpi].data-rpnp[rpi].ds_cnt);
+                       }
+                      
+                   }              
                    if (data_idx % rpnp[rpi].step == 0){
                        rpnp[rpi].data += rpnp[rpi].ds_cnt;
                    }
@@ -454,15 +464,8 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
                } else {
                    rpnstack -> s[++stptr] = output[output_idx-1];
                }
-               break;
-       case OP_PREV_OTHER:
-         if ((output_idx) <= 0) {
-               rpnstack -> s[++stptr] = DNAN;
-         } else {
-               rpnstack -> s[++stptr] = rpnp[rpnp[rpi].ptr].data[output_idx-1];
-         }
-         break;
-           case OP_UNKN:
+               break;
+        case OP_UNKN:
                rpnstack -> s[++stptr] = DNAN; 
                break;
            case OP_INF: