diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-10-02 22:02:45 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-10-02 22:02:45 +0000 |
commit | 83064efda7b691ea2a8364cd66aeac673e5b0a43 (patch) | |
tree | 85b1697c133387be76a84b5536b2c8c5c10b34ac /apps/app_stack.c | |
parent | 4e267250cc3e3998ce2256cd8eb631a0f7128020 (diff) |
Use the standard parsing routines
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@44231 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_stack.c')
-rw-r--r-- | apps/app_stack.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/apps/app_stack.c b/apps/app_stack.c index 434055e0d..7cdf80151 100644 --- a/apps/app_stack.c +++ b/apps/app_stack.c @@ -182,27 +182,39 @@ static int gosub_exec(struct ast_channel *chan, void *data) static int gosubif_exec(struct ast_channel *chan, void *data) { struct ast_module_user *u; - char *condition = "", *label1, *label2, *args; + char *args; int res=0; + AST_DECLARE_APP_ARGS(cond, + AST_APP_ARG(ition); + AST_APP_ARG(labels); + ); + AST_DECLARE_APP_ARGS(label, + AST_APP_ARG(iftrue); + AST_APP_ARG(iffalse); + ); if (ast_strlen_zero(data)) { ast_log(LOG_WARNING, "GosubIf requires an argument: GosubIf(cond?label1(args):label2(args)\n"); return 0; } - args = ast_strdupa(data); - u = ast_module_user_add(chan); - condition = strsep(&args, "?"); - label1 = strsep(&args, ":"); - label2 = args; + args = ast_strdupa(data); + AST_NONSTANDARD_APP_ARGS(cond, args, '?'); + if (cond.argc != 2) { + ast_log(LOG_WARNING, "GosubIf requires an argument: GosubIf(cond?label1(args):label2(args)\n"); + ast_module_user_remove(u); + return 0; + } + + AST_NONSTANDARD_APP_ARGS(label, cond.labels, ':'); - if (pbx_checkcondition(condition)) { - if (label1) - res = gosub_exec(chan, label1); - } else if (label2) { - res = gosub_exec(chan, label2); + if (pbx_checkcondition(cond.ition)) { + if (!ast_strlen_zero(label.iftrue)) + res = gosub_exec(chan, label.iftrue); + } else if (!ast_strlen_zero(label.iffalse)) { + res = gosub_exec(chan, label.iffalse); } ast_module_user_remove(u); |