]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
fix behaviour for earlymatch and matchmore.
authorLuigi Rizzo <rizzo@icir.org>
Thu, 11 May 2006 07:49:12 +0000 (07:49 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Thu, 11 May 2006 07:49:12 +0000 (07:49 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26719 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx.c

diff --git a/pbx.c b/pbx.c
index 8aae28a8832777543ae7f19387dfc0661821b1d1..b458e17426bf203e8c796dd8e957385da392a5c9 100644 (file)
--- a/pbx.c
+++ b/pbx.c
@@ -913,8 +913,6 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
        struct ast_include *i;
        struct ast_sw *sw;
 
-       struct ast_exten *earlymatch = NULL;
-
        /* Initialize status if appropriate */
        if (q->stacklen == 0) {
                q->status = STATUS_NO_CONTEXT;
@@ -952,14 +950,11 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
                /* 0 on fail, 1 on match, 2 on earlymatch */
 
                if (match && (!eroot->matchcid || matchcid(eroot->cidmatch, callerid))) {
-                       if (match == 2 && action == E_MATCHMORE && !earlymatch) {
-                               /* Match an extension ending in '!'.
-                                * As far as I can tell the decision in this case is final
-                                * and we should just return NULL to mark failure
-                                * (and get rid of the earlymatch variable and the associated
-                                * processing outside the loop).
+                       if (match == 2 && action == E_MATCHMORE) {
+                               /* We match an extension ending in '!'.
+                                * The decision in this case is final and is NULL (no match).
                                 */
-                               earlymatch = eroot;
+                               return NULL;
                        } else {
                                if (q->status < STATUS_NO_PRIORITY)
                                        q->status = STATUS_NO_PRIORITY;
@@ -983,13 +978,6 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
                        }
                }
        }
-       if (earlymatch) {
-               /* Bizarre logic for E_MATCHMORE. We return zero to break out
-                  of the loop waiting for more digits, and _then_ match (normally)
-                  the extension we ended up with. We got an early-matching wildcard
-                  pattern, so return NULL to break out of the loop. */
-               return NULL;
-       }
        /* Check alternative switches */
        AST_LIST_TRAVERSE(&tmp->alts, sw, list) {
                struct ast_switch *asw = pbx_findswitch(sw->name);