From 4f013699e26f7e718cdc44f29ff3c83b47926d94 Mon Sep 17 00:00:00 2001 From: Steve Murphy Date: Sat, 22 Sep 2007 19:54:10 +0000 Subject: [PATCH] Merged revisions 83589 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r83589 | murf | 2007-09-22 13:39:16 -0600 (Sat, 22 Sep 2007) | 1 line This closes issue #10788 -- The exact same fixes are made here for the first arg in the for(arg1; arg2; arg3) {} statement, as were done for the 3rd arg. It can now be an assignment that will embedded in a Set() app, or a macro call, or an app call. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@83590 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/ael/pval.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/res/ael/pval.c b/res/ael/pval.c index ca4dfc1..360df8e 100644 --- a/res/ael/pval.c +++ b/res/ael/pval.c @@ -3137,16 +3137,51 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement, strcpy(buf2,p->u1.for_init); remove_spaces_before_equals(buf2); strp = strchr(buf2, '='); - strp2 = strchr(p->u1.for_init, '='); if (strp) { + strp2 = strchr(p->u1.for_init, '='); *(strp+1) = 0; strcat(buf2,"$["); strncat(buf2,strp2+1, sizeof(buf2)-strlen(strp2+1)-2); strcat(buf2,"]"); for_init->appargs = strdup(buf2); - } else - for_init->appargs = strdup(p->u1.for_init); + for_init->app = strdup("Set"); + } else { + strp2 = p->u1.for_init; + while (*strp2 && isspace(*strp2)) + strp2++; + if (*strp2 == '&') { /* itsa macro call */ + char *strp3 = strp2+1; + while (*strp3 && isspace(*strp3)) + strp3++; + strcpy(buf2, strp3); + strp3 = strchr(buf2,'('); + if (strp3) { + *strp3 = '|'; + } + while ((strp3=strchr(buf2,','))) { + *strp3 = '|'; + } + strp3 = strrchr(buf2, ')'); + if (strp3) + *strp3 = 0; /* remove the closing paren */ + + for_init->appargs = strdup(buf2); + for_init->app = strdup("Macro"); + } else { /* must be a regular app call */ + char *strp3; + strcpy(buf2, strp2); + strp3 = strchr(buf2,'('); + if (strp3) { + *strp3 = 0; + for_init->app = strdup(buf2); + for_init->appargs = strdup(strp3+1); + strp3 = strrchr(for_init->appargs, ')'); + if (strp3) + *strp3 = 0; /* remove the closing paren */ + } + } + } strcpy(buf2,p->u3.for_inc); remove_spaces_before_equals(buf2); -- 1.7.9.5