]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
func_math: Return integer instead of float if possible
authorNaveen Albert <asterisk@phreaknet.org>
Mon, 28 Jun 2021 14:25:24 +0000 (14:25 +0000)
committerKevin Harwell <kharwell@digium.com>
Thu, 19 Aug 2021 16:13:04 +0000 (11:13 -0500)
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

index b8a6eb6fdef70a58fe7e464d29fa1ab4181fdfec..76d1a745fe4f6982e1715c61ee3fc59e00ca26f5 100644 (file)
@@ -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;
 }