]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/debversion.cc
* try harder to get the correct language code
[apt.git] / apt-pkg / deb / debversion.cc
index d4be0f07e6af37a89b9f260cbad6fd41212ae04d..aeee619296d19ee0df96eae0fd6b2b8d448ff077 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: debversion.cc,v 1.6 2003/01/27 00:05:59 jgg Exp $
+// $Id: debversion.cc,v 1.8 2003/09/10 23:39:49 mdz Exp $
 /* ######################################################################
 
    Debian Version - Versioning system for Debian
@@ -48,9 +48,15 @@ int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
    if (A >= AEnd && B >= BEnd)
       return 0;
    if (A >= AEnd)
+   {
+      if (*B == '~') return 1;
       return -1;
+   }
    if (B >= BEnd)
+   {
+      if (*A == '~') return -1;
       return 1;
+   }
 
    /* Iterate over the whole string
       What this does is to spilt the whole string into groups of
@@ -65,8 +71,8 @@ int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
    {
       int first_diff = 0;
 
-      while ((lhs != AEnd && !isdigit(*lhs)) ||
-            (rhs != BEnd && !isdigit(*rhs)) )
+      while (lhs != AEnd && rhs != BEnd &&
+            (!isdigit(*lhs) || !isdigit(*rhs)))
       {
         int vc = order(*lhs);
         int rc = order(*rhs);
@@ -101,11 +107,17 @@ int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
 
    // lhs is shorter
    if (lhs == AEnd)
+   {
+      if (*rhs == '~') return 1;
       return -1;
+   }
 
    // rhs is shorter
    if (rhs == BEnd)
+   {
+      if (*lhs == '~') return -1;
       return 1;
+   }
 
    // Shouldnt happen
    return 1;