From: Michael Schroeder Date: Wed, 21 Nov 2018 13:15:34 +0000 (+0100) Subject: Support caret in rpm's EVR comparison X-Git-Tag: 0.7.2~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5c53032cc878778b46860456518109911a03abf6;p=thirdparty%2Flibsolv.git Support caret in rpm's EVR comparison Currently only active if RPM_CARET_DEPS is defined, so that Igor can do some testing. --- diff --git a/src/evr.c b/src/evr.c index a7d43112..4a0c549b 100644 --- a/src/evr.c +++ b/src/evr.c @@ -76,12 +76,33 @@ solv_vercmp_rpm(const char *s1, const char *q1, const char *s2, const char *q2) for (;;) { +#ifdef RPM_CARET_DEPS + while (s1 < q1 && !(*s1 >= '0' && *s1 <= '9') && + !(*s1 >= 'a' && *s1 <= 'z') && !(*s1 >= 'A' && *s1 <= 'Z') && *s1 != '~' && *s1 != '^') + s1++; + while (s2 < q2 && !(*s2 >= '0' && *s2 <= '9') && + !(*s2 >= 'a' && *s2 <= 'z') && !(*s2 >= 'A' && *s2 <= 'Z') && *s2 != '~' && *s2 != '^') + s2++; + if (s1 < q1 && *s1 == '^') + { + if (s2 < q2 && *s2 == '^') + { + s1++; + s2++; + continue; + } + return s2 < q2 ? -1 : 1; + } + if (s2 < q2 && *s2 == '^') + return s1 < q1 ? 1 : -1; +#else while (s1 < q1 && !(*s1 >= '0' && *s1 <= '9') && !(*s1 >= 'a' && *s1 <= 'z') && !(*s1 >= 'A' && *s1 <= 'Z') && *s1 != '~') s1++; while (s2 < q2 && !(*s2 >= '0' && *s2 <= '9') && !(*s2 >= 'a' && *s2 <= 'z') && !(*s2 >= 'A' && *s2 <= 'Z') && *s2 != '~') s2++; +#endif if (s1 < q1 && *s1 == '~') { if (s2 < q2 && *s2 == '~')