chiark / gitweb /
Infrastructure: Strip away crufty CVS $Id$ tags.
[mLib] / versioncmp.c
index 1b77ca9899ab70feb90123030abebaca0fa386bd..3556916be2f7f8ea4833eaa2e4ac092c40d525bd 100644 (file)
@@ -1,6 +1,4 @@
 /* -*-c-*-
- *
- * $Id$
  *
  * Compare version numbers using the Debian algorithm
  *
@@ -125,28 +123,26 @@ static int vcmp(const char *va, const char *val,
 
     pa = vchr(&va, val); pb = vchr(&vb, vbl);
     for (;;) {
-      if (pa == va && pb == vb)
-       break;
-      else if (pa == va)
-       return (-1);
-      else if (pb == vb)
-       return (+1);
-      else if (*pa == *pb) {
-       pa++; pb++;
-       continue;
-      } else if (isalpha((unsigned char)*pa) == isalpha((unsigned char)*pb))
-       return (CMP(*pa, *pb));
-      else if (isalpha((unsigned char)*pa))
-       return (-1);
-      else
-       return (+1);
+      if (pa == va) ia = 1;
+      else if (isalpha((unsigned char)*pa)) ia = 2;
+      else if (*pa == '~') ia = 0;
+      else ia = 3;
+
+      if (pb == vb) ib = 1;
+      else if (isalpha((unsigned char)*pb)) ib = 2;
+      else if (*pb == '~') ib = 0;
+      else ib = 3;
+
+      if (ia != ib) return (CMP(ia, ib));
+      else if (pa == va && pb == vb) break;
+      else if (*pa != *pb) return (CMP(*pa, *pb));
+      pa++; pb++;
     }
 
     /* --- Compare digit portions --- */
 
     ia = vint(&va, val); ib = vint(&vb, vbl);
-    if (ia != ib)
-      return (CMP(ia, ib));
+    if (ia != ib) return (CMP(ia, ib));
   }
 }