X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_rpncalc.c;h=eb7c94b2e5be67d8dd74afd2e7d060ee01bbc824;hb=5fc7ff89bdbced9c593c566fea9840a269935dcd;hp=f8759f8d67a84c91f3816b770d0f5efd3c068f84;hpb=2e6c98e893777e4abf7b05cb4ecf81dde088cdb8;p=rrdtool.git diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c index f8759f8..eb7c94b 100644 --- a/src/rrd_rpncalc.c +++ b/src/rrd_rpncalc.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.19 Copyright by Tobi Oetiker, 1997-2007 + * RRDtool 1.2.23 Copyright by Tobi Oetiker, 1997-2007 **************************************************************************** * rrd_rpncalc.c RPN calculator functions ****************************************************************************/ @@ -162,6 +162,7 @@ void rpn_compact2str(rpn_cdefds_t *rpnc,ds_def_t *ds_def,char **str) add_op(OP_RAD2DEG,RAD2DEG) add_op(OP_DEG2RAD,DEG2RAD) add_op(OP_AVG,AVG) + add_op(OP_ABS,ABS) #undef add_op } (*str)[offset] = '\0'; @@ -187,7 +188,7 @@ short addop2str(enum op_en op, enum op_en op_type, char *op_str, return 0; } -void parseCDEF_DS(char *def,rrd_t *rrd, int ds_idx) +void parseCDEF_DS(const char *def,rrd_t *rrd, int ds_idx) { rpnp_t *rpnp = NULL; rpn_cdefds_t *rpnc = NULL; @@ -340,6 +341,7 @@ rpn_parse(void *key_hash,const char *const expr_const,long (*lookup)(void *,char match_op(OP_RAD2DEG,RAD2DEG) match_op(OP_DEG2RAD,DEG2RAD) match_op(OP_AVG,AVG) + match_op(OP_ABS,ABS) #undef match_op @@ -771,7 +773,7 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx, count++; sum+=val; } - // now push the result bavk on stack + /* now push the result back on stack */ if (count>0) { rpnstack -> s[++stptr]=sum/count; } else { @@ -779,6 +781,10 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx, } } break; + case OP_ABS: + stackunderflow(0); + rpnstack -> s[stptr] = fabs(rpnstack -> s[stptr]); + break; case OP_END: break; }