merged qwell's func_math patch for issue 9507

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@65866 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Dwayne M. Hubbard
2007-05-24 15:08:56 +00:00
parent 9f88eccda6
commit f4fc851405

View File

@@ -71,6 +71,7 @@ static int math(struct ast_channel *chan, char *cmd, char *parse,
int iaction = -1; int iaction = -1;
int type_of_result = FLOAT_RESULT; int type_of_result = FLOAT_RESULT;
char *mvalue1, *mvalue2 = NULL, *mtype_of_result; char *mvalue1, *mvalue2 = NULL, *mtype_of_result;
int negvalue1 = 0;
AST_DECLARE_APP_ARGS(args, AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(argv0); AST_APP_ARG(argv0);
AST_APP_ARG(argv1); AST_APP_ARG(argv1);
@@ -90,13 +91,12 @@ static int math(struct ast_channel *chan, char *cmd, char *parse,
mvalue1 = args.argv0; mvalue1 = args.argv0;
if ((op = strchr(mvalue1, '+'))) { if (mvalue1[0] == '-') {
iaction = ADDFUNCTION; negvalue1 = 1;
*op = '\0'; mvalue1++;
} else if ((op = strchr(mvalue1, '-'))) { }
iaction = SUBTRACTFUNCTION;
*op = '\0'; if ((op = strchr(mvalue1, '*'))) {
} else if ((op = strchr(mvalue1, '*'))) {
iaction = MULTIPLYFUNCTION; iaction = MULTIPLYFUNCTION;
*op = '\0'; *op = '\0';
} else if ((op = strchr(mvalue1, '/'))) { } else if ((op = strchr(mvalue1, '/'))) {
@@ -126,6 +126,12 @@ static int math(struct ast_channel *chan, char *cmd, char *parse,
iaction = EQFUNCTION; iaction = EQFUNCTION;
} else } else
op = NULL; 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) if (op)
@@ -169,6 +175,9 @@ static int math(struct ast_channel *chan, char *cmd, char *parse,
return -1; return -1;
} }
if (negvalue1)
fnum1 = 0 - fnum1;
switch (iaction) { switch (iaction) {
case ADDFUNCTION: case ADDFUNCTION:
ftmp = fnum1 + fnum2; ftmp = fnum1 + fnum2;