For the purpose of making the changed syntax to ExecIf easier to transition,
authorTilghman Lesher <tilghman@meg.abyt.es>
Fri, 6 Jun 2008 17:34:21 +0000 (17:34 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Fri, 6 Jun 2008 17:34:21 +0000 (17:34 +0000)
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

apps/app_exec.c

index 88c8182..285b8b2 100644 (file)
@@ -148,7 +148,7 @@ static int tryexec_exec(struct ast_channel *chan, void *data)
 static int execif_exec(struct ast_channel *chan, void *data)
 {
        int res = 0;
-       char *truedata = NULL, *falsedata = NULL, *end;
+       char *truedata = NULL, *falsedata = NULL, *end, *firstcomma, *firstquestion;
        struct ast_app *app = NULL;
        AST_DECLARE_APP_ARGS(expr,
                AST_APP_ARG(expr);
@@ -160,24 +160,49 @@ static int execif_exec(struct ast_channel *chan, void *data)
        );
        char *parse = ast_strdupa(data);
 
-       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;
-       }
+       firstcomma = strchr(parse, ',');
+       firstquestion = strchr(parse, '?');
+
+       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, '('))) {
-               *truedata++ = '\0';
-               if ((end = strrchr(truedata, ')')))
-                       *end = '\0';
-       }
+               if (apps.t && (truedata = strchr(apps.t, '('))) {
+                       *truedata++ = '\0';
+                       if ((end = strrchr(truedata, ')'))) {
+                               *end = '\0';
+                       }
+               }
 
-       if (apps.f && (falsedata = strchr(apps.f, '('))) {
-               *falsedata++ = '\0';
-               if ((end = strrchr(falsedata, ')')))
-                       *end = '\0';
+               if (apps.f && (falsedata = strchr(apps.f, '('))) {
+                       *falsedata++ = '\0';
+                       if ((end = strrchr(falsedata, ')'))) {
+                               *end = '\0';
+                       }
+               }
        }
 
        if (pbx_checkcondition(expr.expr)) {