From cc4644a54e4bb92507f957832647d91f7f91c21b Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Mon, 26 Oct 2009 09:33:12 +0200 Subject: [PATCH] version: fix comparision of pre-suffixes got broke in 0b9bfa8d52ea7ec2cae562a71932a9cc6e2b9963 which fixed another corner case. hopefully it's good now. fixes #191. --- src/version.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/version.c b/src/version.c index 97b87a6..4253042 100644 --- a/src/version.c +++ b/src/version.c @@ -207,12 +207,23 @@ int apk_version_compare_blob(apk_blob_t a, apk_blob_t b) if (av > bv) return APK_VERSION_GREATER; - /* at and bt are the next expected token type */ + /* both have TOKEN_END or TOKEN_INVALID next? */ if (at == bt) return APK_VERSION_EQUAL; - if (at < bt || bt == TOKEN_INVALID) + + /* leading version components and their values are equal, + * now the non-terminating version is greater unless it's a suffix + * indicating pre-release */ + if (at == TOKEN_SUFFIX && get_token(&at, &a) < 0) + return APK_VERSION_LESS; + if (bt == TOKEN_SUFFIX && get_token(&bt, &b) < 0) return APK_VERSION_GREATER; - return APK_VERSION_LESS; + if (at == TOKEN_END) + return APK_VERSION_LESS; + if (bt == TOKEN_END) + return APK_VERSION_GREATER; + + return APK_VERSION_EQUAL; } int apk_version_compare(const char *str1, const char *str2)