From 3b4287da20ee24996973d353b9ba631e62aaa71b Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 8 Nov 2013 22:36:35 +0500 Subject: [PATCH] FS-5945 --resolve --- .../applications/mod_commands/mod_commands.c | 89 +++++++++++++++---- 1 file changed, 70 insertions(+), 19 deletions(-) diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 3f561ba386..2caf3110d3 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -1929,40 +1929,91 @@ SWITCH_STANDARD_API(cond_function) } a = argv[0]; + while(*a == ' ' || *a == '\t') a++; - if ((expr = strchr(a, '!'))) { - *expr++ = '\0'; - if (*expr == '=') { - o = O_NE; - } - } else if ((expr = strchr(a, '>'))) { - if (*(expr + 1) == '=') { + if (*a == '\'') { + if ((expr = switch_find_end_paren(a, '\'', '\''))) { + a++; *expr++ = '\0'; - o = O_GE; } else { - o = O_GT; + goto error; } - } else if ((expr = strchr(a, '<'))) { - if (*(expr + 1) == '=') { + } else { + if ((expr = strchr(a, ' '))) { *expr++ = '\0'; - o = O_LE; } else { - o = O_LT; - } - } else if ((expr = strchr(a, '='))) { - *expr++ = '\0'; - if (*expr == '=') { - o = O_EQ; + expr = a; } } + while(expr && *expr) { + switch(*expr) { + case '!': + case '<': + case '>': + case '=': + goto done; + default: + expr++; + break; + } + } + + done: + + switch(*expr) { + case '!': + *expr++ = '\0'; + if (*expr == '=') { + o = O_NE; + *expr++ = '\0'; + } + break; + + case '>': + *expr++ = '\0'; + if (*expr == '=') { + o = O_GE; + *expr++ = '\0'; + } else { + o = O_GT; + } + break; + + case '<': + *expr++ = '\0'; + if (*expr == '=') { + o = O_LE; + *expr++ = '\0'; + } else { + o = O_LT; + } + break; + + case '=': + *expr++ = '\0'; + if (*expr == '=') { + o = O_EQ; + *expr++ = '\0'; + } + break; + + default: + goto error; + } + + if (o) { char *s_a = NULL, *s_b = NULL; int a_is_num, b_is_num; - *expr++ = '\0'; + + expr++; b = expr; + s_a = switch_strip_spaces(a, SWITCH_TRUE); s_b = switch_strip_spaces(b, SWITCH_TRUE); + + a_is_num = switch_is_number(s_a); b_is_num = switch_is_number(s_b);