X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_rpncalc.c;h=73d5dde72f7c68566003c4e96ce937643561b5d9;hb=37329a5f991870e8f47c8a52f6dd594fef813de6;hp=83aca36dc3dc8506c07f37a4f41492689f83af8e;hpb=f439b204fb1481edd6a777a3b172ccd722b5b6ed;p=rrdtool.git diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c index 83aca36..73d5dde 100644 --- a/src/rrd_rpncalc.c +++ b/src/rrd_rpncalc.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2rc5 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.6 Copyright by Tobi Oetiker, 1997-2005 **************************************************************************** * rrd_rpncalc.c RPN calculator functions ****************************************************************************/ @@ -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: