summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/pacman.8.txt2
-rw-r--r--doc/vercmp.8.txt2
-rw-r--r--lib/libalpm/version.c9
-rwxr-xr-xtest/util/vercmptest.sh6
4 files changed, 15 insertions, 4 deletions
diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt
index 2a640f8f..59853812 100644
--- a/doc/pacman.8.txt
+++ b/doc/pacman.8.txt
@@ -86,7 +86,7 @@ You can also use `pacman -Su` to upgrade all packages that are out of date. See
to determine which packages need upgrading. This behavior operates as follows:
Alphanumeric:
- 1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0
+ 1.0a < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 < 1.0.a < 1.0.1
Numeric:
1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0
+
diff --git a/doc/vercmp.8.txt b/doc/vercmp.8.txt
index a3bc5611..4b0490fa 100644
--- a/doc/vercmp.8.txt
+++ b/doc/vercmp.8.txt
@@ -26,7 +26,7 @@ numbers. It outputs values as follows:
Version comparsion operates as follows:
Alphanumeric:
- 1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0
+ 1.0a < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 < 1.0.a < 1.0.1
Numeric:
1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0
diff --git a/lib/libalpm/version.c b/lib/libalpm/version.c
index 73d6a660..6b65a413 100644
--- a/lib/libalpm/version.c
+++ b/lib/libalpm/version.c
@@ -98,8 +98,8 @@ static int rpmvercmp(const char *a, const char *b)
str1 = strdup(a);
str2 = strdup(b);
- one = str1;
- two = str2;
+ one = ptr1 = str1;
+ two = ptr2 = str2;
/* loop through each version segment of str1 and str2 and compare them */
while (*one && *two) {
@@ -109,6 +109,11 @@ static int rpmvercmp(const char *a, const char *b)
/* If we ran to the end of either, we are finished with the loop */
if (!(*one && *two)) break;
+ /* If the separator lengths were different, we are also finished */
+ if ((one - ptr1) != (two - ptr2)) {
+ return (one - ptr1) < (two - ptr2) ? -1 : 1;
+ }
+
ptr1 = one;
ptr2 = two;
diff --git a/test/util/vercmptest.sh b/test/util/vercmptest.sh
index 54ede04b..6b4bcbc2 100755
--- a/test/util/vercmptest.sh
+++ b/test/util/vercmptest.sh
@@ -118,6 +118,12 @@ runtest 1.5.1 1.5.b 1
runtest 1.5.b-1 1.5.b 0
runtest 1.5-1 1.5.b -1
+# same/similar content, differing separators
+runtest 2.0 2_0 0
+runtest 2.0_a 2_0.a 0
+runtest 2.0a 2.0.a -1
+runtest 2___a 2_a 1
+
# epoch included version comparisons
runtest 0:1.0 0:1.0 0
runtest 0:1.0 0:1.1 -1