]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge script <automerge@asterisk.org>
Sat, 14 Oct 2006 01:00:59 +0000 (01:00 +0000)
committerAutomerge script <automerge@asterisk.org>
Sat, 14 Oct 2006 01:00:59 +0000 (01:00 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45139 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/pbx_ael.c

index 0ab5886799a2db0d541241b03493179b46c7888d..f40e114ef7b728088a6662508065887a4ecb8a16 100644 (file)
@@ -474,6 +474,29 @@ static char *argument_end(char *str)
        return NULL;
 }
 
+static void gen_match_to_pattern(const char *pattern, char *result)
+{
+       /* the result will be a string that will be matched by pattern */
+       char *p=(char *)pattern, *t=result;
+       while (*p) {
+               if (*p == 'x' || *p == 'n' || *p == 'z' || *p == 'X' || *p == 'N' || *p == 'Z')
+                       *t++ = '9';
+               else if (*p == '[') {
+                       char *z = p+1;
+                       while (*z != ']')
+                               z++;
+                       if (*(z+1)== ']')
+                               z++;
+                       *t++=*(p+1); /* use the first char in the set */
+                       p = z;
+               } else {
+                       *t++ = *p;
+               }
+               p++;
+       }
+       *t++ = 0; /* cap it off */
+}
+
 static int build_step(const char *what, const char *name, const char *filename, int lineno, struct ast_context *con, char *exten, int *pos, char *data, struct fillin **fillout, char **label);
 static int __build_step(const char *what, const char *name, const char *filename, int lineno, struct ast_context *con, char *exten, int *pos, char *data, struct fillin **fillout, char **label)
 {
@@ -541,9 +564,12 @@ static int __build_step(const char *what, const char *name, const char *filename
                                        if (aeldebug & DEBUG_TOKENS)
                                                ast_verbose("--NEWCASE: '%s'!\n", newcase);
                                        if (curcase) {
+                                               char zbuf[256];
+
                                                /* Handle fall through */
                                                char tmp[strlen(newcase) + strlen(name) + 40];
-                                               sprintf(tmp, "sw-%d-%s|%d", *pos - 2, newcase, 1);
+                                               gen_match_to_pattern(newcase,zbuf);
+                                               sprintf(tmp, "sw-%d-%s|%d", *pos - 2, zbuf, 1);
                                                ast_add_extension2(con, 0, margs, cpos, NULL, NULL, "Goto", strdup(tmp), FREE, registrar);
                                        }
                                        curcase = newcase;