Skip to content
Snippets Groups Projects
Commit 15dd5c0a authored by Tilghman Lesher's avatar Tilghman Lesher
Browse files

For the purpose of making the changed syntax to ExecIf easier to transition,

allow the deprecated syntax (fixed for jmls on -dev).


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@120904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent d0384ab3
Branches
Tags
No related merge requests found
...@@ -148,7 +148,7 @@ static int tryexec_exec(struct ast_channel *chan, void *data) ...@@ -148,7 +148,7 @@ static int tryexec_exec(struct ast_channel *chan, void *data)
static int execif_exec(struct ast_channel *chan, void *data) static int execif_exec(struct ast_channel *chan, void *data)
{ {
int res = 0; int res = 0;
char *truedata = NULL, *falsedata = NULL, *end; char *truedata = NULL, *falsedata = NULL, *end, *firstcomma, *firstquestion;
struct ast_app *app = NULL; struct ast_app *app = NULL;
AST_DECLARE_APP_ARGS(expr, AST_DECLARE_APP_ARGS(expr,
AST_APP_ARG(expr); AST_APP_ARG(expr);
...@@ -160,24 +160,49 @@ static int execif_exec(struct ast_channel *chan, void *data) ...@@ -160,24 +160,49 @@ static int execif_exec(struct ast_channel *chan, void *data)
); );
char *parse = ast_strdupa(data); char *parse = ast_strdupa(data);
AST_NONSTANDARD_APP_ARGS(expr, parse, '?'); firstcomma = strchr(parse, ',');
if (ast_strlen_zero(expr.remainder)) { firstquestion = strchr(parse, '?');
ast_log(LOG_ERROR, "Usage: ExecIf(<expr>?<appiftrue>(<args>)[:<appiffalse>(<args)])\n");
return -1; if ((firstcomma != NULL && firstquestion != NULL && firstcomma < firstquestion) || (firstquestion == NULL)) {
} /* Deprecated syntax */
AST_DECLARE_APP_ARGS(depr,
AST_APP_ARG(expr);
AST_APP_ARG(appname);
AST_APP_ARG(appargs);
);
AST_STANDARD_APP_ARGS(depr, parse);
ast_log(LOG_WARNING, "Deprecated syntax found. Please upgrade to using ExecIf(<expr>?%s(%s))\n", depr.appname, depr.appargs);
/* Make the two syntaxes look the same */
expr.expr = depr.expr;
apps.t = depr.appname;
apps.f = NULL;
truedata = depr.appargs;
} else {
/* Preferred syntax */
AST_NONSTANDARD_APP_ARGS(expr, parse, '?');
if (ast_strlen_zero(expr.remainder)) {
ast_log(LOG_ERROR, "Usage: ExecIf(<expr>?<appiftrue>(<args>)[:<appiffalse>(<args)])\n");
return -1;
}
AST_NONSTANDARD_APP_ARGS(apps, expr.remainder, ':'); AST_NONSTANDARD_APP_ARGS(apps, expr.remainder, ':');
if (apps.t && (truedata = strchr(apps.t, '('))) { if (apps.t && (truedata = strchr(apps.t, '('))) {
*truedata++ = '\0'; *truedata++ = '\0';
if ((end = strrchr(truedata, ')'))) if ((end = strrchr(truedata, ')'))) {
*end = '\0'; *end = '\0';
} }
}
if (apps.f && (falsedata = strchr(apps.f, '('))) { if (apps.f && (falsedata = strchr(apps.f, '('))) {
*falsedata++ = '\0'; *falsedata++ = '\0';
if ((end = strrchr(falsedata, ')'))) if ((end = strrchr(falsedata, ')'))) {
*end = '\0'; *end = '\0';
}
}
} }
if (pbx_checkcondition(expr.expr)) { if (pbx_checkcondition(expr.expr)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment