svn commit: r185093 - projects/csup_cvsmode/contrib/csup
Ulf Lilleengen
lulf at FreeBSD.org
Wed Nov 19 06:53:21 PST 2008
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. */
More information about the svn-src-projects
mailing list