diff --git a/bin/xbps-checkvers/main.c b/bin/xbps-checkvers/main.c index b0e16ab2..a6d921e5 100644 --- a/bin/xbps-checkvers/main.c +++ b/bin/xbps-checkvers/main.c @@ -479,38 +479,23 @@ rcv_set_distdir(rcv_t *rcv, const char *distdir) static bool check_reverts(const char *repover, const char *reverts) { - bool rv = false; - char *sreverts, *p; + const char *s, *e; size_t len; assert(reverts); - if (!(len = strlen(reverts))) + + s = reverts; + if ((len = strlen(s)) == 0) return false; - assert((sreverts = strdup(reverts))); - - for (p = sreverts; (p = strstr(p, repover));) { - /* - * Check if it's the first character or the previous character is a - * whitespace. - */ - if (p > sreverts && !isalpha(p[-1]) && !isspace(p[-1])) { - p++; // always advance - continue; - } - p += strlen(repover); - /* - * Check if it's the last character or if the next character is a - * whitespace - */ - if (isspace(*p) || *p == '\0') { - rv = true; - break; - } + for (s = reverts; s < reverts+len; s = e+1) { + if (!(e = strchr(s, ' '))) + e = reverts+len; + if (strncmp(s, repover, e-s) == 0) + return true; } - free(sreverts); - return rv; + return false; } static void diff --git a/tests/xbps/xbps-checkvers/checkvers.sh b/tests/xbps/xbps-checkvers/checkvers.sh index 18b96bfe..96169335 100755 --- a/tests/xbps/xbps-checkvers/checkvers.sh +++ b/tests/xbps/xbps-checkvers/checkvers.sh @@ -381,7 +381,62 @@ EOF xbps-checkvers -R $PWD/some_repo -D $PWD/void-packages out=$(xbps-checkvers -R $PWD/some_repo -D $PWD/void-packages) atf_check_equal $? 0 - atf_check_equal "$out" "fs-utils 1.10_1 1.10_1" + atf_check_equal "$out" "" +} + +atf_test_case reverts_many + +reverts_many_head() { + atf_set "descr" "xbps-checkvers(1): test with multiple reverts" +} + +reverts_many_body() { + mkdir -p some_repo pkg_A void-packages/srcpkgs/A + touch pkg_A/file00 + cat > void-packages/srcpkgs/A/template <