X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_rpncalc.c;h=ed086626d1d21923aae50e904ad8821ede5ee459;hb=2f9c0721d1f7e9eceae3d04e197d0e4a46eeb3b1;hp=7953320f084820349345a38e55b0fba2d8cfdb8d;hpb=c809151f5435867ee8e4187e4ba1f75a50f793e8;p=rrdtool.git diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c index 7953320..ed08662 100644 --- a/src/rrd_rpncalc.c +++ b/src/rrd_rpncalc.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.23 Copyright by Tobi Oetiker, 1997-2007 + * RRDtool 1.2.99907080300 Copyright by Tobi Oetiker, 1997-2007 **************************************************************************** * rrd_rpncalc.c RPN calculator functions ****************************************************************************/ @@ -8,6 +8,7 @@ #include "rrd_rpncalc.h" #include "rrd_graph.h" #include +#include short addop2str( enum op_en op, @@ -287,6 +288,9 @@ rpnp_t *rpn_parse( long steps = -1; rpnp_t *rpnp; char vname[MAX_VNAME_LEN + 10]; + char *old_locale; + + old_locale = setlocale(LC_NUMERIC, "C"); rpnp = NULL; expr = (char *) expr_const; @@ -294,6 +298,7 @@ rpnp_t *rpn_parse( while (*expr) { if ((rpnp = (rpnp_t *) rrd_realloc(rpnp, (++steps + 2) * sizeof(rpnp_t))) == NULL) { + setlocale(LC_NUMERIC, old_locale); return NULL; } @@ -306,8 +311,7 @@ rpnp_t *rpn_parse( else if (strncmp(expr, #VVV, strlen(#VVV))==0 && ( expr[strlen(#VVV)] == ',' || expr[strlen(#VVV)] == '\0' )){ \ rpnp[steps].op = VV; \ expr+=strlen(#VVV); \ - } - + } #define match_op_param(VV,VVV) \ else if (sscanf(expr, #VVV "(" DEF_NAM_FMT ")",vname) == 1) { \ @@ -379,19 +383,23 @@ rpnp_t *rpn_parse( } else { + setlocale(LC_NUMERIC, old_locale); free(rpnp); return NULL; } + if (*expr == 0) break; if (*expr == ',') expr++; else { + setlocale(LC_NUMERIC, old_locale); free(rpnp); return NULL; } } rpnp[steps + 1].op = OP_END; + setlocale(LC_NUMERIC, old_locale); return rpnp; }