aboutsummaryrefslogtreecommitdiffstats
path: root/pbx.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-03-05 05:21:45 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-03-05 05:21:45 +0000
commite4ea6790942daea992c5ee2731b3c50be1c4eb95 (patch)
tree6804d10955115807d65da4ca20325fa56521a87f /pbx.c
parent14d18c3d7a1d33ca44833b58b5dbf260f4edc2f2 (diff)
Unbreak expression handling from addition of function variables
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5146 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx.c')
-rwxr-xr-xpbx.c46
1 files changed, 17 insertions, 29 deletions
diff --git a/pbx.c b/pbx.c
index 4e8e6d0cc..c90879d00 100755
--- a/pbx.c
+++ b/pbx.c
@@ -1224,7 +1224,7 @@ static void pbx_substitute_variables_helper_full(struct ast_channel *c, const ch
int length;
char workspace[4096];
char ltmp[4096], var[4096];
- char *nextvar, *nextexp, *nextfunc;
+ char *nextvar, *nextexp, *nextfunc, *nextthing;
char *vars, *vare;
int pos, brackets, needsub, len, needfunc;
@@ -1234,35 +1234,23 @@ static void pbx_substitute_variables_helper_full(struct ast_channel *c, const ch
while(!ast_strlen_zero(whereweare) && count) {
/* Assume we're copying the whole remaining string */
pos = strlen(whereweare);
-
- /* Look for a variable */
- nextvar = strstr(whereweare, "${");
-
- /* Look for an expression */
- nextexp = strstr(whereweare, "$[");
-
- /* Look for a function */
- nextfunc = strstr(whereweare, "$(");
-
- /* Pick the first one only */
- len = 0;
- if (nextvar)
- len++;
- if(nextexp)
- len++;
- if(nextfunc)
- len++;
-
- if (len > 1) {
- if(nextfunc) {
- nextvar = nextexp = NULL;
- } else if (nextvar) {
- nextexp = nextfunc = NULL;
- } else if (nextexp) {
- nextvar = nextfunc = NULL;
- }
+ nextvar = NULL;
+ nextexp = NULL;
+ nextfunc = NULL;
+ nextthing = strchr(whereweare, '$');
+ if (nextthing) {
+ switch(nextthing[1]) {
+ case '{':
+ nextvar = nextthing;
+ break;
+ case '[':
+ nextexp = nextthing;
+ break;
+ case '(':
+ nextfunc = nextthing;
+ break;
+ }
}
-
/* If there is one, we only go that far */
if (nextvar)
pos = nextvar - whereweare;