From e178f6d620526eb373c637ed60ddb18e3158b5a3 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sun, 24 Feb 2013 07:41:18 -0600 Subject: [PATCH] dependency: use pkg_comparator_lookup_by_name() instead of having special lexing rules for comparator tokens This allows us to add new tokens in the future by adding them to one place. --- dependency.c | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/dependency.c b/dependency.c index a8ac2f5..d917b30 100644 --- a/dependency.c +++ b/dependency.c @@ -104,12 +104,16 @@ pkg_dependency_parse_str(pkg_dependency_t *deplist_head, const char *depends) parse_state_t state = OUTSIDE_MODULE; pkg_dependency_t *deplist = NULL; pkg_comparator_t compare = PKG_ANY; + char cmpname[PKG_BUFSIZE]; char buf[PKG_BUFSIZE]; size_t package_sz = 0, version_sz = 0; char *start = buf; char *ptr = buf; char *vstart = NULL; char *package = NULL, *version = NULL; + char *cnameptr = cmpname; + + memset(cmpname, '\0', sizeof cmpname); strlcpy(buf, depends, sizeof buf); strlcat(buf, " ", sizeof buf); @@ -181,46 +185,20 @@ pkg_dependency_parse_str(pkg_dependency_t *deplist_head, const char *depends) case BEFORE_OPERATOR: if (PKG_OPERATOR_CHAR(*ptr)) { - switch(*ptr) - { - case '=': - compare = PKG_EQUAL; - break; - case '>': - compare = PKG_GREATER_THAN; - break; - case '<': - compare = PKG_LESS_THAN; - break; - case '!': - compare = PKG_NOT_EQUAL; - break; - default: - break; - } - state = INSIDE_OPERATOR; + *cnameptr++ = *ptr; } break; case INSIDE_OPERATOR: if (!PKG_OPERATOR_CHAR(*ptr)) - state = AFTER_OPERATOR; - else if (*ptr == '=') { - switch(compare) - { - case PKG_LESS_THAN: - compare = PKG_LESS_THAN_EQUAL; - break; - case PKG_GREATER_THAN: - compare = PKG_GREATER_THAN_EQUAL; - break; - default: - break; - } + state = AFTER_OPERATOR; + compare = pkg_comparator_lookup_by_name(cmpname); } + else + *cnameptr++ = *ptr; break;