From 6e1c32e0997f83a1a490565f3a9e304c70ad32d2 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 19 Jan 2008 21:54:11 +0000 Subject: [PATCH] update git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7301 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_regex.c | 2 +- src/switch_utils.c | 35 ++++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/switch_regex.c b/src/switch_regex.c index c132ee1eb0..146da45fa6 100644 --- a/src/switch_regex.c +++ b/src/switch_regex.c @@ -95,7 +95,7 @@ SWITCH_DECLARE(int) switch_regex_perform(const char *field, const char *expressi &erroffset, /* for error offset */ NULL); /* use default character tables */ if (error) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "COMPILE ERROR: %d [%s]\n", erroffset, error); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "COMPILE ERROR: %d [%s][%s]\n", erroffset, error, expression); switch_regex_safe_free(re); goto end; } diff --git a/src/switch_utils.c b/src/switch_utils.c index 04dbc0ccd1..c97a2782b4 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -35,7 +35,7 @@ #include #endif #include "private/switch_core_pvt.h" - +#define ESCAPE_META '\\' SWITCH_DECLARE(char *) switch_find_end_paren(const char *s, char open, char close) { @@ -1017,7 +1017,7 @@ SWITCH_DECLARE(char *) switch_escape_char(switch_memory_pool_t *pool, char *in, static char unescape_char(char escaped) { char unescaped; - + printf("WTF [%c]\n", escaped); switch (escaped) { case 'n': unescaped = '\n'; @@ -1052,16 +1052,25 @@ static char *cleanup_separated_string(char *str) } for (start = dest = ptr; *ptr; ++ptr) { - if (*ptr == '\\') { - ++ptr; - *dest++ = unescape_char(*ptr); - end = dest; - } else if (*ptr == '\'') { - inside_quotes = (1 - inside_quotes); - } else { - *dest++ = *ptr; - if (*ptr != ' ' || inside_quotes) { + char e; + int esc = 0; + + if (*ptr == ESCAPE_META) { + if ((e = unescape_char(*(ptr+1))) != e) { + ++ptr; + *dest++ = e; end = dest; + esc++; + } + } + if (!esc) { + if (*ptr == '\'') { + inside_quotes = (1 - inside_quotes); + } else { + *dest++ = *ptr; + if (*ptr != ' ' || inside_quotes) { + end = dest; + } } } } @@ -1093,7 +1102,7 @@ static unsigned int separate_string_char_delim(char *buf, char delim, char **arr case FIND_DELIM: /* escaped characters are copied verbatim to the destination string */ - if (*ptr == '\\') { + if (*ptr == ESCAPE_META) { ++ptr; } else if (*ptr == '\'') { inside_quotes = (1 - inside_quotes); @@ -1143,7 +1152,7 @@ static unsigned int separate_string_blank_delim(char *buf, char **array, unsigne break; case FIND_DELIM: - if (*ptr == '\\') { + if (*ptr == ESCAPE_META) { ++ptr; } else if (*ptr == '\'') { inside_quotes = (1 - inside_quotes);