From 1a0892dbebbc1943090a414a6a58dcd3cb6a0548 Mon Sep 17 00:00:00 2001 From: Automerge script Date: Sat, 14 Oct 2006 01:00:59 +0000 Subject: [PATCH] automerge commit git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45139 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- pbx/pbx_ael.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/pbx/pbx_ael.c b/pbx/pbx_ael.c index 0ab5886799..f40e114ef7 100644 --- a/pbx/pbx_ael.c +++ b/pbx/pbx_ael.c @@ -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;