summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimo Teras <timo.teras@iki.fi>2009-10-26 09:33:12 +0200
committerTimo Teras <timo.teras@iki.fi>2009-10-26 09:33:12 +0200
commitcc4644a54e4bb92507f957832647d91f7f91c21b (patch)
treef16ccb2f63d54eed0d64eeba5f5cc8aa0fc22bb9
parent6f21645ecf9b1cb09a897018fdf7428698586e1f (diff)
downloadapk-tools-cc4644a54e4bb92507f957832647d91f7f91c21b.tar.bz2
apk-tools-cc4644a54e4bb92507f957832647d91f7f91c21b.tar.xz
version: fix comparision of pre-suffixes
got broke in 0b9bfa8d52ea7ec2cae562a71932a9cc6e2b9963 which fixed another corner case. hopefully it's good now. fixes #191.
-rw-r--r--src/version.c17
1 files 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)