From 62caa0be55bb237b260717c1b0cbb7e2c693e946 Mon Sep 17 00:00:00 2001
From: Luigi Rizzo <rizzo@icir.org>
Date: Thu, 11 May 2006 07:49:12 +0000
Subject: [PATCH] fix behaviour for earlymatch and matchmore.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26719 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 pbx.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/pbx.c b/pbx.c
index 8aae28a883..b458e17426 100644
--- 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);
-- 
GitLab