diff options
author | Stig Bakken <ssb@php.net> | 2001-10-06 23:22:37 +0000 |
---|---|---|
committer | Stig Bakken <ssb@php.net> | 2001-10-06 23:22:37 +0000 |
commit | 89bd184ea01356c3d7798be911440c7fe2aa154a (patch) | |
tree | 97ef083b3e10883651bcb3194aef76f5d880f76b /ext/standard/versioning.c | |
parent | a0bbfb590ca80117d1441cc4cbcf8a5b04c914a9 (diff) | |
download | php-git-89bd184ea01356c3d7798be911440c7fe2aa154a.tar.gz |
@Added version_compare() function (Stig)
Diffstat (limited to 'ext/standard/versioning.c')
-rw-r--r-- | ext/standard/versioning.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c index 6d56e760ea..cad5c6d9d4 100644 --- a/ext/standard/versioning.c +++ b/ext/standard/versioning.c @@ -23,9 +23,12 @@ #include <sys/types.h> #include <ctype.h> #include <stdlib.h> +#include <string.h> #include "php.h" #include "php_versioning.h" +#define sign(n) ((n)<0?-1:((n)>0?1:0)) + PHPAPI char * php_canonicalize_version(const char *version) { @@ -78,18 +81,18 @@ compare_special_version_forms(const char *form1, const char *form2) }; for (pp = special_forms, i = 0; *pp != NULL; pp++, i++) { - if (strcmp(form1, *pp) == 0) { + if (strncmp(form1, *pp, strlen(*pp)) == 0) { found1 = i; break; } } for (pp = special_forms, i = 0; *pp != NULL; pp++, i++) { - if (strcmp(form2, *pp) == 0) { + if (strncmp(form2, *pp, strlen(*pp)) == 0) { found2 = i; break; } } - return abs(found1 - found2); + return sign(found1 - found2); } PHPAPI int @@ -114,7 +117,7 @@ php_version_compare(const char *orig_ver1, const char *orig_ver2) /* compare element numerically */ l1 = strtol(p1, NULL, 10); l2 = strtol(p2, NULL, 10); - compare = abs(l1 - l2); + compare = sign(l1 - l2); } else if (!isdigit(*p1) && !isdigit(*p2)) { /* compare element names */ compare = compare_special_version_forms(p1, p2); @@ -138,16 +141,16 @@ php_version_compare(const char *orig_ver1, const char *orig_ver2) } if (compare == 0) { if (n1 != NULL) { - if (isdigit(*n1)) { + if (isdigit(*p1)) { compare = 1; } else { - compare = compare_special_version_forms(n1, "#N#"); + compare = php_version_compare(p1, "#N#"); } } else if (n2 != NULL) { - if (isdigit(*n2)) { + if (isdigit(*p2)) { compare = -1; } else { - compare = compare_special_version_forms("#N", n2); + compare = php_version_compare("#N#", p2); } } } |