]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
comment cleanup and iron out a really dumb mistake in handling the '.'-wildcard in...
authorSteve Murphy <murf@digium.com>
Thu, 27 Mar 2008 21:25:55 +0000 (21:25 +0000)
committerSteve Murphy <murf@digium.com>
Thu, 27 Mar 2008 21:25:55 +0000 (21:25 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@111497 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/pbx.c

index 3c8bc76f033047d7898c055c98bbda93ee2d3b1a..ab22ba97af2b646ba9f90439a94146806bab2677 100644 (file)
@@ -75,14 +75,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
  *
  * A new algorithm to do searching based on a 'compiled' pattern tree is introduced
  * here, and shows a fairly flat (constant) search time, even for over
- * 1000 patterns. Might Still needs some work-- there are some fine points of the matching
+ * 1000 patterns. Might Still need some work-- there are some fine points of the matching
  * spec about tie-breaking based on the characters in character sets, but this
  * should be do-able via the weight system currently being used.
  *
  * Also, using a hash table for context/priority name lookup can help prevent
- * the find_extension routines from absorbing exponential cpu cycles. I've tested
- * find_extension with red-black trees, which have O(log2(n)) speed. Right now,
- * I'm using hash tables, which do searches (ideally) in O(1) time.
+ * the find_extension routines from absorbing exponential cpu cycles as the number 
+ * of extensions grow. I've previously tested find_extension with red-black trees, 
+ * which have O(log2(n)) speed. Right now, I'm using hash tables, which do 
+ * searches (ideally) in O(1) time.
  *
  */
 
@@ -1030,10 +1031,11 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct
                        /* how many chars will the . match against? */
                        int i = 0;
                        const char *str2 = str;
-                       while (*str2++) {
+                       while (*str2 && *str2 != '/') {
+                               str2++;
                                i++;
                        }
-                       if (p->exten && !(*(str+1)))
+                       if (p->exten && *str2 != '/')
                                update_scoreboard(score, length+i, spec+(i*p->specificity), p->exten, '.', callerid, p->deleted, p);
                        if (p->next_char && p->next_char->x[0] == '/' && p->next_char->x[1] == 0) {
                                new_find_extension("/", score, p->next_char, length+i, spec+(p->specificity*i), callerid);
@@ -1043,10 +1045,11 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct
                        /* how many chars will the . match against? */
                        int i = 0;
                        const char *str2 = str;
-                       while (*str2++) {
+                       while (*str2 && *str2 != '/') {
+                               str2++;
                                i++;
                        }
-                       if (p->exten && !(*(str+1)))
+                       if (p->exten && *str2 != '/')
                                update_scoreboard(score, length+1, spec+(p->specificity*i), p->exten, '!', callerid, p->deleted, p);
                        if (p->next_char && p->next_char->x[0] == '/' && p->next_char->x[1] == 0) {
                                new_find_extension("/", score, p->next_char, length+i, spec+(p->specificity*i), callerid);