mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
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/branches/1.4@83589 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2983,16 +2983,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);
|
||||
|
Reference in New Issue
Block a user