]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/debversion.cc
test framework: Correctly generate new paths in noopchroot
[apt.git] / apt-pkg / deb / debversion.cc
index 74e2552ffbea4473d5138fb2c034d707c0b12dfe..48462c6a208e1eb776437e47d15bb231f8d4dd83 100644 (file)
@@ -15,6 +15,7 @@
 #include <apt-pkg/debversion.h>
 #include <apt-pkg/pkgcache.h>
 
 #include <apt-pkg/debversion.h>
 #include <apt-pkg/pkgcache.h>
 
+#include <string.h>
 #include <stdlib.h>
 #include <ctype.h>
                                                                        /*}}}*/
 #include <stdlib.h>
 #include <ctype.h>
                                                                        /*}}}*/
@@ -32,29 +33,26 @@ debVersioningSystem::debVersioningSystem()
 
 // debVS::CmpFragment - Compare versions                               /*{{{*/
 // ---------------------------------------------------------------------
 
 // debVS::CmpFragment - Compare versions                               /*{{{*/
 // ---------------------------------------------------------------------
-/* This compares a fragment of the version. This is a slightly adapted 
-   version of what dpkg uses. */
-#define order(x) ((x) == '~' ? -1    \
-               : isdigit((x)) ? 0   \
-               : !(x) ? 0           \
-               : isalpha((x)) ? (x) \
-               : (x) + 256)
-int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
-                                    const char *B,const char *BEnd)
+/* This compares a fragment of the version. This is a slightly adapted
+   version of what dpkg uses in dpkg/lib/dpkg/version.c.
+   In particular, the a | b = NULL check is removed as we check this in the
+   caller, we use an explicit end for a | b strings and we check ~ explicit. */
+static int order(char c)
 {
 {
-   if (A >= AEnd && B >= BEnd)
+   if (isdigit(c))
       return 0;
       return 0;
-   if (A >= AEnd)
-   {
-      if (*B == '~') return 1;
+   else if (isalpha(c))
+      return c;
+   else if (c == '~')
       return -1;
       return -1;
-   }
-   if (B >= BEnd)
-   {
-      if (*A == '~') return -1;
-      return 1;
-   }
-
+   else if (c)
+      return c + 256;
+   else
+      return 0;
+}
+int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
+                                    const char *B,const char *BEnd)
+{
    /* Iterate over the whole string
       What this does is to split the whole string into groups of
       numeric and non numeric portions. For instance:
    /* Iterate over the whole string
       What this does is to split the whole string into groups of
       numeric and non numeric portions. For instance:
@@ -75,19 +73,19 @@ int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
         int rc = order(*rhs);
         if (vc != rc)
            return vc - rc;
         int rc = order(*rhs);
         if (vc != rc)
            return vc - rc;
-        lhs++; rhs++;
+        ++lhs; ++rhs;
       }
 
       while (*lhs == '0')
       }
 
       while (*lhs == '0')
-        lhs++;
+        ++lhs;
       while (*rhs == '0')
       while (*rhs == '0')
-        rhs++;
+        ++rhs;
       while (isdigit(*lhs) && isdigit(*rhs))
       {
         if (!first_diff)
            first_diff = *lhs - *rhs;
       while (isdigit(*lhs) && isdigit(*rhs))
       {
         if (!first_diff)
            first_diff = *lhs - *rhs;
-        lhs++;
-        rhs++;
+        ++lhs;
+        ++rhs;
       }
 
       if (isdigit(*lhs))
       }
 
       if (isdigit(*lhs))