From 3388277b9b4ea959dce7c1199a578b53fdbdd693 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Mon, 23 Jul 2012 21:07:57 -0500 Subject: [PATCH] pkg: implement dpkg-style version comparison rules --- pkg.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pkg.c b/pkg.c index a35c7d5..c310af3 100644 --- a/pkg.c +++ b/pkg.c @@ -394,13 +394,25 @@ pkg_compare_version(const char *a, const char *b) one = str1 = buf1; two = str2 = buf2; - while (*one && *two) + while (*one || *two) { - while (*one && !isalnum(*one)) + while (*one && !isalnum(*one) && *one != '~') one++; - while (*two && !isalnum(*two)) + while (*two && !isalnum(*two) && *two != '~') two++; + if (*one == '~' || *two == '~') + { + if (*one != '~') + return 1; + if (*two != '~') + return -1; + + one++; + two++; + continue; + } + if (!(*one && *two)) break;