diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-05 05:21:45 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-05 05:21:45 +0000 |
commit | e4ea6790942daea992c5ee2731b3c50be1c4eb95 (patch) | |
tree | 6804d10955115807d65da4ca20325fa56521a87f /pbx.c | |
parent | 14d18c3d7a1d33ca44833b58b5dbf260f4edc2f2 (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-x | pbx.c | 46 |
1 files changed, 17 insertions, 29 deletions
@@ -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; |