From: Tilghman Lesher Date: Mon, 2 Oct 2006 22:02:45 +0000 (+0000) Subject: Use the standard parsing routines X-Git-Tag: 1.6.0-beta1~3^2~4542 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d3033c319b21b7a42f0712478ff9ced582f55a08;p=thirdparty%2Fasterisk.git Use the standard parsing routines git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44231 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_stack.c b/apps/app_stack.c index 434055e0d3..7cdf801516 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);