X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_rpncalc.c;h=88c476ef32a19131b5d25fd39d6088387df59686;hb=2b443c1569e17119497a34b6965c678fa5007b98;hp=13040e10f1e933fd938dd608348b8cebdadb46b0;hpb=b02eace34f83a08c55830cb05bc55078153e2ba6;p=rrdtool.git diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c index 13040e1..88c476e 100644 --- a/src/rrd_rpncalc.c +++ b/src/rrd_rpncalc.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2rc4 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.3 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: