X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_rpncalc.c;h=82683d7d03afa3bfb0c43560ea47b649df8a48ed;hb=5a7eb5b62b485b61ddb80a40ef22f4337cf2289f;hp=9adaeb9a7980cfa3a3484b4843ba5d5489c143ba;hpb=35f5945e114df7324be00de01bcde77e096a2373;p=rrdtool.git diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c index 9adaeb9..82683d7 100644 --- a/src/rrd_rpncalc.c +++ b/src/rrd_rpncalc.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.0 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.5 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: