[svn-commits] dhubbard: branch 1.4 r65866 - /branches/1.4/funcs/func_math.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Thu May 24 08:08:56 MST 2007


Author: dhubbard
Date: Thu May 24 10:08:56 2007
New Revision: 65866

URL: http://svn.digium.com/view/asterisk?view=rev&rev=65866
Log:
merged qwell's func_math patch for issue 9507

Modified:
    branches/1.4/funcs/func_math.c

Modified: branches/1.4/funcs/func_math.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/funcs/func_math.c?view=diff&rev=65866&r1=65865&r2=65866
==============================================================================
--- branches/1.4/funcs/func_math.c (original)
+++ branches/1.4/funcs/func_math.c Thu May 24 10:08:56 2007
@@ -71,6 +71,7 @@
 	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);
@@ -90,13 +91,12 @@
 
 	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, '/'))) {
@@ -126,6 +126,12 @@
 			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)
@@ -169,6 +175,9 @@
 		return -1;
 	}
 
+	if (negvalue1)
+		fnum1 = 0 - fnum1;
+
 	switch (iaction) {
 	case ADDFUNCTION:
 		ftmp = fnum1 + fnum2;



More information about the svn-commits mailing list