From c52ef4ac79b9466af5cf7b17dcc2b9fa2d2badef Mon Sep 17 00:00:00 2001 From: Naveen Albert Date: Mon, 28 Jun 2021 14:25:24 +0000 Subject: [PATCH] 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 --- funcs/func_math.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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; }