From 43aeb3b858d98af26053397c073b26427ee41ab6 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Thu, 28 Oct 2010 10:37:06 -0400 Subject: [PATCH] switch_dow_cmp: fix logic err in my latest commit --- src/switch_utils.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/switch_utils.c b/src/switch_utils.c index 4c0ac32bda..2872f10a6e 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -2537,7 +2537,7 @@ static inline dow_t _dow_read_token(const char **s) SWITCH_DECLARE(switch_bool_t) switch_dow_cmp(const char *exp, int val) { - dow_t cur, prev = DOW_EOF; + dow_t cur, prev = DOW_EOF, range_start = DOW_EOF; const char *p = exp; while ((cur = _dow_read_token(&p)) != DOW_EOF) { @@ -2545,27 +2545,30 @@ SWITCH_DECLARE(switch_bool_t) switch_dow_cmp(const char *exp, int val) /* Reset state */ cur = prev = DOW_EOF; } else if (cur == DOW_HYPHEN) { - /* Save the current token and move to the next one */ - prev = cur; + /* Save the previous token and move to the next one */ + range_start = prev; } else if (cur == DOW_ERR) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse error for [%s] at position %td (%.6s)\n", exp, p - exp, p); break; } else { /* Valid day found */ - if (prev != DOW_EOF) { /* Evaluating a range */ - if (prev < cur) { - if (val >= prev && val <= cur) { + if (range_start != DOW_EOF) { /* Evaluating a range */ + if (range_start < cur) { + if (val >= range_start && val <= cur) { return SWITCH_TRUE; } } else { - if (val >= cur && val <= prev) { + if (val >= cur && val <= range_start) { return SWITCH_TRUE; } } + range_start = DOW_EOF; } else if (val == cur) { return SWITCH_TRUE; } } + + prev = cur; } return SWITCH_FALSE;