Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Nov 2008 14:53:21 +0000 (UTC)
From:      Ulf Lilleengen <lulf@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r185093 - projects/csup_cvsmode/contrib/csup
Message-ID:  <200811191453.mAJErLuf020248@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: lulf
Date: Wed Nov 19 14:53:20 2008
New Revision: 185093
URL: http://svn.freebsd.org/changeset/base/185093

Log:
  - Fixup the rcs revision comparing to be correct this time.

Modified:
  projects/csup_cvsmode/contrib/csup/misc.c

Modified: projects/csup_cvsmode/contrib/csup/misc.c
==============================================================================
--- projects/csup_cvsmode/contrib/csup/misc.c	Wed Nov 19 11:57:16 2008	(r185092)
+++ projects/csup_cvsmode/contrib/csup/misc.c	Wed Nov 19 14:53:20 2008	(r185093)
@@ -578,24 +578,41 @@ bt_free(struct backoff_timer *bt)
 int
 rcsnum_cmp(char *revision1, char *revision2)
 {
-	char *ptr1, *ptr2;
-	
-	ptr1 = revision1;
-	ptr2 = revision2; 
-	while (*ptr1 != '\0' && *ptr2 != '\0') {
-		if (*ptr1 > *ptr2)
-			return (1);
-		else if (*ptr1 < *ptr2)
-			return (-1);
-		ptr1++;
-		ptr2++;
-	};
-
-	if (*ptr1 != '\0' && *ptr2 == '\0')
-		return (1);
-	if (*ptr1 == '\0' && *ptr2 != '\0')
-		return (-1);
-	return (0);
+        char *ptr1, *ptr2, *dot1, *dot2;
+	int num1len, num2len, ret;
+
+        ptr1 = revision1;
+        ptr2 = revision2;
+        while (*ptr1 != '\0' && *ptr2 != '\0') {
+                dot1 = strchr(ptr1, '.');
+                dot2 = strchr(ptr2, '.');
+                if (dot1 == NULL)
+                        dot1 = strchr(ptr1, '\0');
+                if (dot2 == NULL)
+                        dot2 = strchr(ptr2, '\0');
+
+		num1len = dot1 - ptr1;
+		num2len = dot2 - ptr2;
+                /* Check the distance between each, showing how many digits */
+                if (num1len > num2len)
+                        return (1);
+                else if (num1len < num2len)
+                        return (-1);
+
+                /* Equal distance means we must check each character. */
+		ret = strncmp(ptr1, ptr2, num1len);
+		if (ret != 0)
+			return (ret);
+		ptr1 = (*dot1 == '.') ? (dot1 + 1) : dot1;
+		ptr2 = (*dot2 == '.') ? (dot2 + 1) : dot2;
+        } 
+
+        if (*ptr1 != '\0' && *ptr2 == '\0')
+                return (1);
+        if (*ptr1 == '\0' && *ptr2 != '\0')
+                return (-1);
+        return (0);
+
 }
 
 /* Returns 0 if a rcsrev is not a trunk revision number. */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811191453.mAJErLuf020248>