Use the standard parsing routines
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 2 Oct 2006 22:02:45 +0000 (22:02 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 2 Oct 2006 22:02:45 +0000 (22:02 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44231 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_stack.c

index 434055e..7cdf801 100644 (file)
@@ -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);