summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Winkelmann <jw@smts.ch>2006-09-02 15:21:32 +0000
committerJohannes Winkelmann <jw@smts.ch>2006-09-02 15:21:32 +0000
commitdba4b5e64e3978b47716b908f7aba086f4610669 (patch)
treeaea7a4b4cd8c882f235eb660e219305c96d0658e
parent8994a63970150187541168124474a79eca444ee3 (diff)
downloadprt-get-dba4b5e64e3978b47716b908f7aba086f4610669.tar.gz
prt-get-dba4b5e64e3978b47716b908f7aba086f4610669.tar.xz
prt-get: fix corner case in version comparator
git-svn-id: https://crux.nu/svn/tools/prt-get/trunk@1804 0b5ae1c7-2405-0410-a7fc-ba219f786e1e
-rw-r--r--src/versioncomparator.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/versioncomparator.cpp b/src/versioncomparator.cpp
index f9cfdd9..ce808a5 100644
--- a/src/versioncomparator.cpp
+++ b/src/versioncomparator.cpp
@@ -67,19 +67,19 @@ COMP_RESULT compareVersions(const string& v1, const string& v2)
tokenizeMixed(tokens2[j], subtokens2);
int subTokLen = normalizeVectors(subtokens1, subtokens2);
for (int k = 0; k < subTokLen; ++k) {
- if (isdigit(subtokens1[k][0])) {
- long sl1 = strtol(subtokens1[k].c_str(), &error1, 10);
- long sl2 = strtol(subtokens2[k].c_str(), &error2, 10);
-
+ long sl1 = strtol(subtokens1[k].c_str(), &error1, 10);
+ long sl2 = strtol(subtokens2[k].c_str(), &error2, 10);
+ if (!error1 && !error2) {
if (sl1 < sl2) {
return LESS;
} else if (sl1 > sl2) {
return GREATER;
}
} else {
- // pure string tokens
+
+ // string tokens
if (subtokens1[k][1] == 0 && subtokens2[k][1] == 0) {
-
+
if (subtokens1[k][0] < subtokens2[k][0]) {
return LESS;
} else if (subtokens1[k][0] > subtokens2[k][0]) {
@@ -179,6 +179,8 @@ void tokenizeIntoBlocks(const string& version, vector<string>& blocks)
}
+#ifdef TEST
+
void check(const string& v1, const string& v2,
VersionComparator::COMP_RESULT expected, bool compare=true)
{
@@ -210,7 +212,6 @@ void check(const string& v1, const string& v2,
}
-#ifdef TEST
int main(int argc, char** argv)
{
@@ -243,6 +244,8 @@ int main(int argc, char** argv)
check("1.4.2a1-2", "1.4.2a2-2", LESS);
check("1.4.2b1-2", "1.4.2a2-2", GREATER);
check("1.4.2beta3", "1.4.2alpha2", GREATER);
+ check("1.4.2-some", "1.4.2-1", UNDEFINED);
+ check("1.4.2-1", "1.4.2-some", UNDEFINED);
} else {
check(argv[1], argv[2], UNDEFINED, false);
}

Generated by cgit