[Asterisk-cvs] asterisk/pbx pbx_config.c,1.61,1.62

russell at lists.digium.com russell at lists.digium.com
Wed May 18 21:13:33 CDT 2005


Update of /usr/cvsroot/asterisk/pbx
In directory mongoose.digium.com:/tmp/cvs-serv9002/pbx

Modified Files:
	pbx_config.c 
Log Message:
check to see if a comma or an open paren came first when splitting the application
from the application arguments (bug #4306)


Index: pbx_config.c
===================================================================
RCS file: /usr/cvsroot/asterisk/pbx/pbx_config.c,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- pbx_config.c	12 May 2005 20:47:23 -0000	1.61
+++ pbx_config.c	19 May 2005 01:18:37 -0000	1.62
@@ -1619,7 +1619,7 @@
 	struct ast_variable *v;
 	char *cxt, *ext, *pri, *appl, *data, *tc, *cidmatch;
 	struct ast_context *con;
-	char *start, *end;
+	char *end;
 	char *label;
 	char realvalue[256];
 	int lastpri = -2;
@@ -1656,7 +1656,7 @@
 						char *stringp=NULL;
 						int ipri = -2;
 						char realext[256]="";
-						char *plus;
+						char *plus, *firstp, *firstc;
 						tc = strdup(v->value);
 						if(tc!=NULL){
 							stringp=tc;
@@ -1711,25 +1711,28 @@
 							appl = stringp;
 							if (!appl)
 								appl="";
-							if (!(start = strchr(appl, '('))) {
-								if (stringp)
-									appl = strsep(&stringp, ",");
-								else
-									appl = "";
-							}
-							if (start && (end = strrchr(appl, ')'))) {
-								*start = *end = '\0';
-								data = start + 1;
-								process_quotes_and_slashes(data, ',', '|');
-							} else if (stringp!=NULL && *stringp=='"') {
-								stringp++;
-								data = strsep(&stringp, "\"");
-								stringp++;
+							/* Find the first occurrence of either '(' or ',' */
+							firstc = strchr(appl, ',');
+							firstp = strchr(appl, '(');
+							if (firstc && ((!firstp) || (firstc < firstp))) {
+								/* comma found, no parenthesis */
+								/* or both found, but comma found first */
+								appl = strsep(&stringp, ",");
+								data = stringp;
+							} else if ((!firstc) && (!firstp)) {
+								/* Neither found */
+								data = "";
 							} else {
-								if (stringp)
-									data = strsep(&stringp, ",");
-								else
-									data = "";
+								/* Final remaining case is parenthesis found first */
+								appl = strsep(&stringp, "(");
+								data = stringp;
+								end = strrchr(data, ')');
+								if ((end = strrchr(data, ')'))) {
+									*end = '\0';
+								} else {
+									ast_log(LOG_WARNING, "No closing parenthesis found? '%s(%s'\n", appl, data);
+								}
+								process_quotes_and_slashes(data, ',', '|');
 							}
 
 							if (!data)




More information about the svn-commits mailing list