From: Naveen Albert Date: Mon, 28 Jun 2021 14:25:24 +0000 (+0000) Subject: func_math: Return integer instead of float if possible X-Git-Tag: 18.7.0-rc1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c52ef4ac79b9466af5cf7b17dcc2b9fa2d2badef;p=thirdparty%2Fasterisk.git func_math: Return integer instead of float if possible The MIN, MAX, and ABS functions all support float arguments, but currently return floats even if the arguments are all integers and the response is a whole number, in which case the user is likely expecting an integer. This casts the float to an integer before printing into the response buffer if possible. ASTERISK-29495 Change-Id: I902d29eacf3ecd0f8a6a5e433c97f0421d205488 --- diff --git a/funcs/func_math.c b/funcs/func_math.c index b8a6eb6fde..76d1a745fe 100644 --- a/funcs/func_math.c +++ b/funcs/func_math.c @@ -525,7 +525,11 @@ static int acf_min_exec(struct ast_channel *chan, const char *cmd, } ast_debug(1, "%f is the minimum of [%f,%f]\n", response_num, num1, num2); - snprintf(buffer, buflen, "%f", response_num); + if ((int) response_num == response_num) { + snprintf(buffer, buflen, "%d", (int) response_num); + } else { + snprintf(buffer, buflen, "%f", response_num); + } return 0; } @@ -567,7 +571,11 @@ static int acf_max_exec(struct ast_channel *chan, const char *cmd, } ast_debug(1, "%f is the maximum of [%f,%f]\n", response_num, num1, num2); - snprintf(buffer, buflen, "%f", response_num); + if ((int) response_num == response_num) { + snprintf(buffer, buflen, "%d", (int) response_num); + } else { + snprintf(buffer, buflen, "%f", response_num); + } return 0; } @@ -589,7 +597,11 @@ static int acf_abs_exec(struct ast_channel *chan, const char *cmd, response_num = fabs(num1); ast_debug(1, "%f is the absolute value of %f\n", response_num, num1); - snprintf(buffer, buflen, "%f", response_num); + if ((int) response_num == response_num) { + snprintf(buffer, buflen, "%d", (int) response_num); + } else { + snprintf(buffer, buflen, "%f", response_num); + } return 0; }