Imported Upstream version 0.6.23
[platform/upstream/libsolv.git] / src / evr.c
index 4351a6f..a7d4311 100644 (file)
--- a/src/evr.c
+++ b/src/evr.c
@@ -242,7 +242,7 @@ solv_cmp_version_part_haiku(const char *s1, const char *q1, const char *s2,
 
       while (part1 + 1 < s1 && *part1 == '0')
         part1++;
-      while (part2 + 1 < s1 && *part2 == '0')
+      while (part2 + 1 < s2 && *part2 == '0')
         part2++;
 
       len1 = s1 - part1;
@@ -268,9 +268,9 @@ solv_vercmp_haiku(const char *s1, const char *q1, const char *s2, const char *q2
   int cmp;
 
   /* find pre-release separator */
-  while (pre1 != q1 && *pre1 != '-')
+  while (pre1 != q1 && *pre1 != '~')
     pre1++;
-  while (pre2 != q2 && *pre2 != '-')
+  while (pre2 != q2 && *pre2 != '~')
     pre2++;
 
   /* compare main versions */
@@ -284,13 +284,14 @@ solv_vercmp_haiku(const char *s1, const char *q1, const char *s2, const char *q2
   if (pre2 == q2)
     return -1;
 
-  return solv_cmp_version_part_haiku(pre1 + 1, q1, pre2 + 1, q2);
+  cmp = solv_cmp_version_part_haiku(pre1 + 1, q1, pre2 + 1, q2);
+  return cmp == 0 ? 0 : cmp < 0 ? -1 : 1; /* must return -1, 0, or 1 */
 }
 
 #endif /* HAIKU */
-/* 
+
+
+/*
  * the solv_vercmp variant your system uses.
  */
 int
@@ -390,14 +391,6 @@ pool_evrcmp_str(const Pool *pool, const char *evr1, const char *evr2, int mode)
   for (s2 = evr2, r2 = 0; *s2; s2++)
     if (*s2 == '-')
       r2 = s2;
-  if (pool->disttype == DISTTYPE_HAIKU)
-    {
-      /* make sure it's really a release, releases always are numeric */
-      if (r1 && (r1[1] < '0' || r1[1] > '9'))
-       r1 = 0;
-      if (r2 && (r2[1] < '0' || r2[1] > '9'))
-       r2 = 0;
-    }
   r = 0;
   if (mode != EVRCMP_MATCH || (evr1 != (r1 ? r1 : s1) && evr2 != (r2 ? r2 : s2)))
     r = solv_vercmp(evr1, r1 ? r1 : s1, evr2, r2 ? r2 : s2);
@@ -497,12 +490,6 @@ pool_evrmatch(const Pool *pool, Id evrid, const char *epoch, const char *version
   for (s1 = evr1, r1 = 0; *s1; s1++)
     if (*s1 == '-')
       r1 = s1;
-  if (pool->disttype == DISTTYPE_HAIKU)
-    {
-      /* make sure it's really a release, releases always are numeric */
-      if (r1 && (r1[1] < '0' || r1[1] > '9'))
-       r1 = 0;
-    }
   if (version)
     {
       r = solv_vercmp(evr1, r1 ? r1 : s1, version, version + strlen(version));