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)

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to