From ba1d42073fdd2af8f3bc94abc7c5ebb17ef57457 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Sat, 8 Oct 2011 17:26:42 +0300 Subject: [PATCH] extra: fix parsing of values from db The original code didn't read values with parenthesis correctly like the "(-1)" in "min-(-1),1-max." Signed-off-by: Dan Carpenter --- smatch_extra.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/smatch_extra.c b/smatch_extra.c index 0b765ca5..67f0d5de 100644 --- a/smatch_extra.c +++ b/smatch_extra.c @@ -1018,8 +1018,10 @@ static void get_value_ranges(char *value, struct range_list **rl) char *c; c = value; - start = c; while (*c) { + if (*c == '(') + c++; + start = c; if (!strncmp(start, "min", 3)) { val1 = LLONG_MIN; c += 3; @@ -1028,6 +1030,8 @@ static void get_value_ranges(char *value, struct range_list **rl) c++; val1 = strtoll(start, &c, 10); } + if (*c == ')') + c++; if (!*c) { add_range(rl, val1, val1); break; @@ -1038,12 +1042,15 @@ static void get_value_ranges(char *value, struct range_list **rl) start = c; continue; } - c++; + c++; /* skip the dash in eg. 4-5 */ + if (*c == '(') + c++; start = c; if (!strncmp(start, "max", 3)) { val2 = LLONG_MAX; c += 3; } else { + while (*c && *c != ',' && *c != '-') c++; val2 = strtoll(start, &c, 10); @@ -1051,8 +1058,9 @@ static void get_value_ranges(char *value, struct range_list **rl) add_range(rl, val1, val2); if (!*c) break; - c++; - start = c; + if (*c == ')') + c++; + c++; /* skip the comma in eg: 4-5,7 */ } } -- 2.11.4.GIT