]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 65866 via svnmerge from
authorDwayne M. Hubbard <dwayne.hubbard@gmail.com>
Thu, 24 May 2007 15:35:50 +0000 (15:35 +0000)
committerDwayne M. Hubbard <dwayne.hubbard@gmail.com>
Thu, 24 May 2007 15:35:50 +0000 (15:35 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r65866 | dhubbard | 2007-05-24 10:08:56 -0500 (Thu, 24 May 2007) | 1 line

merged qwell's func_math patch for issue 9507
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@65906 65c4cc65-6c06-0410-ace0-fbb531ad65f3

funcs/func_math.c

index 703c9e9b1eaa1cf19297b73ba89767c4941ce9db..bdcbb69ffc2e490e46ac8ecfeaa909fff767a94f 100644 (file)
@@ -77,6 +77,7 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse,
        int iaction = -1;
        int type_of_result = FLOAT_RESULT;
        char *mvalue1, *mvalue2 = NULL, *mtype_of_result;
+       int negvalue1 = 0;
        AST_DECLARE_APP_ARGS(args,
                             AST_APP_ARG(argv0);
                             AST_APP_ARG(argv1);
@@ -96,13 +97,12 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse,
 
        mvalue1 = args.argv0;
 
-       if ((op = strchr(mvalue1, '+'))) {
-               iaction = ADDFUNCTION;
-               *op = '\0';
-       } else if ((op = strchr(mvalue1, '-'))) {
-               iaction = SUBTRACTFUNCTION;
-               *op = '\0';
-       } else if ((op = strchr(mvalue1, '*'))) {
+       if (mvalue1[0] == '-') {
+               negvalue1 = 1;
+               mvalue1++;
+       }
+
+       if ((op = strchr(mvalue1, '*'))) {
                iaction = MULTIPLYFUNCTION;
                *op = '\0';
        } else if ((op = strchr(mvalue1, '/'))) {
@@ -141,6 +141,12 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse,
                        iaction = EQFUNCTION;
                } else
                        op = NULL;
+       } else if ((op = strchr(mvalue1, '+'))) {
+               iaction = ADDFUNCTION;
+               *op = '\0';
+       } else if ((op = strchr(mvalue1, '-'))) { /* subtraction MUST always be last, in case we have a negative first number */
+               iaction = SUBTRACTFUNCTION;
+               *op = '\0';
        }
 
        if (op)
@@ -184,6 +190,9 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse,
                return -1;
        }
 
+       if (negvalue1)
+               fnum1 = 0 - fnum1;
+
        switch (iaction) {
        case ADDFUNCTION:
                ftmp = fnum1 + fnum2;