From: Stig Bakken Date: Thu, 11 Oct 2001 10:35:59 +0000 (+0000) Subject: * remove version_{lt,le,gt,ge,eq} functions, added a third optional X-Git-Tag: PRE_PARAMETER_PARSING_API~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=925ff7f2b2aa119fe2e37341f079d0345039d77f;p=php * remove version_{lt,le,gt,ge,eq} functions, added a third optional parameter to version_compare doing the same thing --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 167ca2cc93..e6e136d3ea 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -792,11 +792,6 @@ function_entry basic_functions[] = { /* functions from versioning.c */ PHP_FE(version_compare, NULL) - PHP_FE(version_lt, NULL) - PHP_FE(version_le, NULL) - PHP_FE(version_gt, NULL) - PHP_FE(version_ge, NULL) - PHP_FE(version_eq, NULL) {NULL, NULL, NULL} }; diff --git a/ext/standard/php_versioning.h b/ext/standard/php_versioning.h index 76286d71f6..f25a80e504 100644 --- a/ext/standard/php_versioning.h +++ b/ext/standard/php_versioning.h @@ -27,10 +27,5 @@ PHPAPI char *php_canonicalize_version(const char *); PHPAPI int php_version_compare(const char *, const char *); PHP_FUNCTION(version_compare); -PHP_FUNCTION(version_gt); -PHP_FUNCTION(version_ge); -PHP_FUNCTION(version_lt); -PHP_FUNCTION(version_le); -PHP_FUNCTION(version_eq); #endif diff --git a/ext/standard/tests/versioning/version_compare.phpt b/ext/standard/tests/versioning/version_compare.phpt index 6045c41735..6ef49ba777 100644 --- a/ext/standard/tests/versioning/version_compare.phpt +++ b/ext/standard/tests/versioning/version_compare.phpt @@ -3,7 +3,16 @@ version_compare test --FILE-- ", + "ge", ">=", + "eq", "=", "==", + "ne", "<>", "!=" +); test("1", "2"); test("10", "2"); test("1.0", "1.1"); @@ -13,7 +22,17 @@ foreach ($special_forms as $f1) { test("1.0$f1", "1.0$f2"); } } - +print "TESTING OPERATORS\n"; +foreach ($special_forms as $f1) { + foreach ($special_forms as $f2) { + foreach ($operators as $op) { + $v1 = "1.0$f1"; + $v2 = "1.0$f2"; + $test = version_compare($v1, $v2, $op) ? "true" : "false"; + printf("%7s %2s %-7s : %s\n", $v1, $op, $v2, $test); + } + } +} function test($v1, $v2) { $compare = version_compare($v1, $v2); @@ -33,6 +52,7 @@ function test($v1, $v2) { ?> --EXPECT-- +TESTING COMPARE 1 < 2 10 > 2 1.0 < 1.1 @@ -73,3 +93,508 @@ function test($v1, $v2) { 1.0pl1 > 1.0RC1 1.0pl1 > 1.0 1.0pl1 = 1.0pl1 +TESTING OPERATORS +1.0-dev lt 1.0-dev : false +1.0-dev < 1.0-dev : false +1.0-dev le 1.0-dev : true +1.0-dev <= 1.0-dev : true +1.0-dev gt 1.0-dev : false +1.0-dev > 1.0-dev : false +1.0-dev ge 1.0-dev : true +1.0-dev >= 1.0-dev : true +1.0-dev eq 1.0-dev : true +1.0-dev = 1.0-dev : true +1.0-dev == 1.0-dev : true +1.0-dev ne 1.0-dev : false +1.0-dev <> 1.0-dev : false +1.0-dev != 1.0-dev : false +1.0-dev lt 1.0a1 : true +1.0-dev < 1.0a1 : true +1.0-dev le 1.0a1 : true +1.0-dev <= 1.0a1 : true +1.0-dev gt 1.0a1 : false +1.0-dev > 1.0a1 : false +1.0-dev ge 1.0a1 : false +1.0-dev >= 1.0a1 : false +1.0-dev eq 1.0a1 : false +1.0-dev = 1.0a1 : false +1.0-dev == 1.0a1 : false +1.0-dev ne 1.0a1 : true +1.0-dev <> 1.0a1 : true +1.0-dev != 1.0a1 : true +1.0-dev lt 1.0b1 : true +1.0-dev < 1.0b1 : true +1.0-dev le 1.0b1 : true +1.0-dev <= 1.0b1 : true +1.0-dev gt 1.0b1 : false +1.0-dev > 1.0b1 : false +1.0-dev ge 1.0b1 : false +1.0-dev >= 1.0b1 : false +1.0-dev eq 1.0b1 : false +1.0-dev = 1.0b1 : false +1.0-dev == 1.0b1 : false +1.0-dev ne 1.0b1 : true +1.0-dev <> 1.0b1 : true +1.0-dev != 1.0b1 : true +1.0-dev lt 1.0RC1 : true +1.0-dev < 1.0RC1 : true +1.0-dev le 1.0RC1 : true +1.0-dev <= 1.0RC1 : true +1.0-dev gt 1.0RC1 : false +1.0-dev > 1.0RC1 : false +1.0-dev ge 1.0RC1 : false +1.0-dev >= 1.0RC1 : false +1.0-dev eq 1.0RC1 : false +1.0-dev = 1.0RC1 : false +1.0-dev == 1.0RC1 : false +1.0-dev ne 1.0RC1 : true +1.0-dev <> 1.0RC1 : true +1.0-dev != 1.0RC1 : true +1.0-dev lt 1.0 : true +1.0-dev < 1.0 : true +1.0-dev le 1.0 : true +1.0-dev <= 1.0 : true +1.0-dev gt 1.0 : false +1.0-dev > 1.0 : false +1.0-dev ge 1.0 : false +1.0-dev >= 1.0 : false +1.0-dev eq 1.0 : false +1.0-dev = 1.0 : false +1.0-dev == 1.0 : false +1.0-dev ne 1.0 : true +1.0-dev <> 1.0 : true +1.0-dev != 1.0 : true +1.0-dev lt 1.0pl1 : true +1.0-dev < 1.0pl1 : true +1.0-dev le 1.0pl1 : true +1.0-dev <= 1.0pl1 : true +1.0-dev gt 1.0pl1 : false +1.0-dev > 1.0pl1 : false +1.0-dev ge 1.0pl1 : false +1.0-dev >= 1.0pl1 : false +1.0-dev eq 1.0pl1 : false +1.0-dev = 1.0pl1 : false +1.0-dev == 1.0pl1 : false +1.0-dev ne 1.0pl1 : true +1.0-dev <> 1.0pl1 : true +1.0-dev != 1.0pl1 : true + 1.0a1 lt 1.0-dev : false + 1.0a1 < 1.0-dev : false + 1.0a1 le 1.0-dev : false + 1.0a1 <= 1.0-dev : false + 1.0a1 gt 1.0-dev : true + 1.0a1 > 1.0-dev : true + 1.0a1 ge 1.0-dev : true + 1.0a1 >= 1.0-dev : true + 1.0a1 eq 1.0-dev : false + 1.0a1 = 1.0-dev : false + 1.0a1 == 1.0-dev : false + 1.0a1 ne 1.0-dev : true + 1.0a1 <> 1.0-dev : true + 1.0a1 != 1.0-dev : true + 1.0a1 lt 1.0a1 : false + 1.0a1 < 1.0a1 : false + 1.0a1 le 1.0a1 : true + 1.0a1 <= 1.0a1 : true + 1.0a1 gt 1.0a1 : false + 1.0a1 > 1.0a1 : false + 1.0a1 ge 1.0a1 : true + 1.0a1 >= 1.0a1 : true + 1.0a1 eq 1.0a1 : true + 1.0a1 = 1.0a1 : true + 1.0a1 == 1.0a1 : true + 1.0a1 ne 1.0a1 : false + 1.0a1 <> 1.0a1 : false + 1.0a1 != 1.0a1 : false + 1.0a1 lt 1.0b1 : true + 1.0a1 < 1.0b1 : true + 1.0a1 le 1.0b1 : true + 1.0a1 <= 1.0b1 : true + 1.0a1 gt 1.0b1 : false + 1.0a1 > 1.0b1 : false + 1.0a1 ge 1.0b1 : false + 1.0a1 >= 1.0b1 : false + 1.0a1 eq 1.0b1 : false + 1.0a1 = 1.0b1 : false + 1.0a1 == 1.0b1 : false + 1.0a1 ne 1.0b1 : true + 1.0a1 <> 1.0b1 : true + 1.0a1 != 1.0b1 : true + 1.0a1 lt 1.0RC1 : true + 1.0a1 < 1.0RC1 : true + 1.0a1 le 1.0RC1 : true + 1.0a1 <= 1.0RC1 : true + 1.0a1 gt 1.0RC1 : false + 1.0a1 > 1.0RC1 : false + 1.0a1 ge 1.0RC1 : false + 1.0a1 >= 1.0RC1 : false + 1.0a1 eq 1.0RC1 : false + 1.0a1 = 1.0RC1 : false + 1.0a1 == 1.0RC1 : false + 1.0a1 ne 1.0RC1 : true + 1.0a1 <> 1.0RC1 : true + 1.0a1 != 1.0RC1 : true + 1.0a1 lt 1.0 : true + 1.0a1 < 1.0 : true + 1.0a1 le 1.0 : true + 1.0a1 <= 1.0 : true + 1.0a1 gt 1.0 : false + 1.0a1 > 1.0 : false + 1.0a1 ge 1.0 : false + 1.0a1 >= 1.0 : false + 1.0a1 eq 1.0 : false + 1.0a1 = 1.0 : false + 1.0a1 == 1.0 : false + 1.0a1 ne 1.0 : true + 1.0a1 <> 1.0 : true + 1.0a1 != 1.0 : true + 1.0a1 lt 1.0pl1 : true + 1.0a1 < 1.0pl1 : true + 1.0a1 le 1.0pl1 : true + 1.0a1 <= 1.0pl1 : true + 1.0a1 gt 1.0pl1 : false + 1.0a1 > 1.0pl1 : false + 1.0a1 ge 1.0pl1 : false + 1.0a1 >= 1.0pl1 : false + 1.0a1 eq 1.0pl1 : false + 1.0a1 = 1.0pl1 : false + 1.0a1 == 1.0pl1 : false + 1.0a1 ne 1.0pl1 : true + 1.0a1 <> 1.0pl1 : true + 1.0a1 != 1.0pl1 : true + 1.0b1 lt 1.0-dev : false + 1.0b1 < 1.0-dev : false + 1.0b1 le 1.0-dev : false + 1.0b1 <= 1.0-dev : false + 1.0b1 gt 1.0-dev : true + 1.0b1 > 1.0-dev : true + 1.0b1 ge 1.0-dev : true + 1.0b1 >= 1.0-dev : true + 1.0b1 eq 1.0-dev : false + 1.0b1 = 1.0-dev : false + 1.0b1 == 1.0-dev : false + 1.0b1 ne 1.0-dev : true + 1.0b1 <> 1.0-dev : true + 1.0b1 != 1.0-dev : true + 1.0b1 lt 1.0a1 : false + 1.0b1 < 1.0a1 : false + 1.0b1 le 1.0a1 : false + 1.0b1 <= 1.0a1 : false + 1.0b1 gt 1.0a1 : true + 1.0b1 > 1.0a1 : true + 1.0b1 ge 1.0a1 : true + 1.0b1 >= 1.0a1 : true + 1.0b1 eq 1.0a1 : false + 1.0b1 = 1.0a1 : false + 1.0b1 == 1.0a1 : false + 1.0b1 ne 1.0a1 : true + 1.0b1 <> 1.0a1 : true + 1.0b1 != 1.0a1 : true + 1.0b1 lt 1.0b1 : false + 1.0b1 < 1.0b1 : false + 1.0b1 le 1.0b1 : true + 1.0b1 <= 1.0b1 : true + 1.0b1 gt 1.0b1 : false + 1.0b1 > 1.0b1 : false + 1.0b1 ge 1.0b1 : true + 1.0b1 >= 1.0b1 : true + 1.0b1 eq 1.0b1 : true + 1.0b1 = 1.0b1 : true + 1.0b1 == 1.0b1 : true + 1.0b1 ne 1.0b1 : false + 1.0b1 <> 1.0b1 : false + 1.0b1 != 1.0b1 : false + 1.0b1 lt 1.0RC1 : true + 1.0b1 < 1.0RC1 : true + 1.0b1 le 1.0RC1 : true + 1.0b1 <= 1.0RC1 : true + 1.0b1 gt 1.0RC1 : false + 1.0b1 > 1.0RC1 : false + 1.0b1 ge 1.0RC1 : false + 1.0b1 >= 1.0RC1 : false + 1.0b1 eq 1.0RC1 : false + 1.0b1 = 1.0RC1 : false + 1.0b1 == 1.0RC1 : false + 1.0b1 ne 1.0RC1 : true + 1.0b1 <> 1.0RC1 : true + 1.0b1 != 1.0RC1 : true + 1.0b1 lt 1.0 : true + 1.0b1 < 1.0 : true + 1.0b1 le 1.0 : true + 1.0b1 <= 1.0 : true + 1.0b1 gt 1.0 : false + 1.0b1 > 1.0 : false + 1.0b1 ge 1.0 : false + 1.0b1 >= 1.0 : false + 1.0b1 eq 1.0 : false + 1.0b1 = 1.0 : false + 1.0b1 == 1.0 : false + 1.0b1 ne 1.0 : true + 1.0b1 <> 1.0 : true + 1.0b1 != 1.0 : true + 1.0b1 lt 1.0pl1 : true + 1.0b1 < 1.0pl1 : true + 1.0b1 le 1.0pl1 : true + 1.0b1 <= 1.0pl1 : true + 1.0b1 gt 1.0pl1 : false + 1.0b1 > 1.0pl1 : false + 1.0b1 ge 1.0pl1 : false + 1.0b1 >= 1.0pl1 : false + 1.0b1 eq 1.0pl1 : false + 1.0b1 = 1.0pl1 : false + 1.0b1 == 1.0pl1 : false + 1.0b1 ne 1.0pl1 : true + 1.0b1 <> 1.0pl1 : true + 1.0b1 != 1.0pl1 : true + 1.0RC1 lt 1.0-dev : false + 1.0RC1 < 1.0-dev : false + 1.0RC1 le 1.0-dev : false + 1.0RC1 <= 1.0-dev : false + 1.0RC1 gt 1.0-dev : true + 1.0RC1 > 1.0-dev : true + 1.0RC1 ge 1.0-dev : true + 1.0RC1 >= 1.0-dev : true + 1.0RC1 eq 1.0-dev : false + 1.0RC1 = 1.0-dev : false + 1.0RC1 == 1.0-dev : false + 1.0RC1 ne 1.0-dev : true + 1.0RC1 <> 1.0-dev : true + 1.0RC1 != 1.0-dev : true + 1.0RC1 lt 1.0a1 : false + 1.0RC1 < 1.0a1 : false + 1.0RC1 le 1.0a1 : false + 1.0RC1 <= 1.0a1 : false + 1.0RC1 gt 1.0a1 : true + 1.0RC1 > 1.0a1 : true + 1.0RC1 ge 1.0a1 : true + 1.0RC1 >= 1.0a1 : true + 1.0RC1 eq 1.0a1 : false + 1.0RC1 = 1.0a1 : false + 1.0RC1 == 1.0a1 : false + 1.0RC1 ne 1.0a1 : true + 1.0RC1 <> 1.0a1 : true + 1.0RC1 != 1.0a1 : true + 1.0RC1 lt 1.0b1 : false + 1.0RC1 < 1.0b1 : false + 1.0RC1 le 1.0b1 : false + 1.0RC1 <= 1.0b1 : false + 1.0RC1 gt 1.0b1 : true + 1.0RC1 > 1.0b1 : true + 1.0RC1 ge 1.0b1 : true + 1.0RC1 >= 1.0b1 : true + 1.0RC1 eq 1.0b1 : false + 1.0RC1 = 1.0b1 : false + 1.0RC1 == 1.0b1 : false + 1.0RC1 ne 1.0b1 : true + 1.0RC1 <> 1.0b1 : true + 1.0RC1 != 1.0b1 : true + 1.0RC1 lt 1.0RC1 : false + 1.0RC1 < 1.0RC1 : false + 1.0RC1 le 1.0RC1 : true + 1.0RC1 <= 1.0RC1 : true + 1.0RC1 gt 1.0RC1 : false + 1.0RC1 > 1.0RC1 : false + 1.0RC1 ge 1.0RC1 : true + 1.0RC1 >= 1.0RC1 : true + 1.0RC1 eq 1.0RC1 : true + 1.0RC1 = 1.0RC1 : true + 1.0RC1 == 1.0RC1 : true + 1.0RC1 ne 1.0RC1 : false + 1.0RC1 <> 1.0RC1 : false + 1.0RC1 != 1.0RC1 : false + 1.0RC1 lt 1.0 : true + 1.0RC1 < 1.0 : true + 1.0RC1 le 1.0 : true + 1.0RC1 <= 1.0 : true + 1.0RC1 gt 1.0 : false + 1.0RC1 > 1.0 : false + 1.0RC1 ge 1.0 : false + 1.0RC1 >= 1.0 : false + 1.0RC1 eq 1.0 : false + 1.0RC1 = 1.0 : false + 1.0RC1 == 1.0 : false + 1.0RC1 ne 1.0 : true + 1.0RC1 <> 1.0 : true + 1.0RC1 != 1.0 : true + 1.0RC1 lt 1.0pl1 : true + 1.0RC1 < 1.0pl1 : true + 1.0RC1 le 1.0pl1 : true + 1.0RC1 <= 1.0pl1 : true + 1.0RC1 gt 1.0pl1 : false + 1.0RC1 > 1.0pl1 : false + 1.0RC1 ge 1.0pl1 : false + 1.0RC1 >= 1.0pl1 : false + 1.0RC1 eq 1.0pl1 : false + 1.0RC1 = 1.0pl1 : false + 1.0RC1 == 1.0pl1 : false + 1.0RC1 ne 1.0pl1 : true + 1.0RC1 <> 1.0pl1 : true + 1.0RC1 != 1.0pl1 : true + 1.0 lt 1.0-dev : false + 1.0 < 1.0-dev : false + 1.0 le 1.0-dev : false + 1.0 <= 1.0-dev : false + 1.0 gt 1.0-dev : true + 1.0 > 1.0-dev : true + 1.0 ge 1.0-dev : true + 1.0 >= 1.0-dev : true + 1.0 eq 1.0-dev : false + 1.0 = 1.0-dev : false + 1.0 == 1.0-dev : false + 1.0 ne 1.0-dev : true + 1.0 <> 1.0-dev : true + 1.0 != 1.0-dev : true + 1.0 lt 1.0a1 : false + 1.0 < 1.0a1 : false + 1.0 le 1.0a1 : false + 1.0 <= 1.0a1 : false + 1.0 gt 1.0a1 : true + 1.0 > 1.0a1 : true + 1.0 ge 1.0a1 : true + 1.0 >= 1.0a1 : true + 1.0 eq 1.0a1 : false + 1.0 = 1.0a1 : false + 1.0 == 1.0a1 : false + 1.0 ne 1.0a1 : true + 1.0 <> 1.0a1 : true + 1.0 != 1.0a1 : true + 1.0 lt 1.0b1 : false + 1.0 < 1.0b1 : false + 1.0 le 1.0b1 : false + 1.0 <= 1.0b1 : false + 1.0 gt 1.0b1 : true + 1.0 > 1.0b1 : true + 1.0 ge 1.0b1 : true + 1.0 >= 1.0b1 : true + 1.0 eq 1.0b1 : false + 1.0 = 1.0b1 : false + 1.0 == 1.0b1 : false + 1.0 ne 1.0b1 : true + 1.0 <> 1.0b1 : true + 1.0 != 1.0b1 : true + 1.0 lt 1.0RC1 : false + 1.0 < 1.0RC1 : false + 1.0 le 1.0RC1 : false + 1.0 <= 1.0RC1 : false + 1.0 gt 1.0RC1 : true + 1.0 > 1.0RC1 : true + 1.0 ge 1.0RC1 : true + 1.0 >= 1.0RC1 : true + 1.0 eq 1.0RC1 : false + 1.0 = 1.0RC1 : false + 1.0 == 1.0RC1 : false + 1.0 ne 1.0RC1 : true + 1.0 <> 1.0RC1 : true + 1.0 != 1.0RC1 : true + 1.0 lt 1.0 : false + 1.0 < 1.0 : false + 1.0 le 1.0 : true + 1.0 <= 1.0 : true + 1.0 gt 1.0 : false + 1.0 > 1.0 : false + 1.0 ge 1.0 : true + 1.0 >= 1.0 : true + 1.0 eq 1.0 : true + 1.0 = 1.0 : true + 1.0 == 1.0 : true + 1.0 ne 1.0 : false + 1.0 <> 1.0 : false + 1.0 != 1.0 : false + 1.0 lt 1.0pl1 : true + 1.0 < 1.0pl1 : true + 1.0 le 1.0pl1 : true + 1.0 <= 1.0pl1 : true + 1.0 gt 1.0pl1 : false + 1.0 > 1.0pl1 : false + 1.0 ge 1.0pl1 : false + 1.0 >= 1.0pl1 : false + 1.0 eq 1.0pl1 : false + 1.0 = 1.0pl1 : false + 1.0 == 1.0pl1 : false + 1.0 ne 1.0pl1 : true + 1.0 <> 1.0pl1 : true + 1.0 != 1.0pl1 : true + 1.0pl1 lt 1.0-dev : false + 1.0pl1 < 1.0-dev : false + 1.0pl1 le 1.0-dev : false + 1.0pl1 <= 1.0-dev : false + 1.0pl1 gt 1.0-dev : true + 1.0pl1 > 1.0-dev : true + 1.0pl1 ge 1.0-dev : true + 1.0pl1 >= 1.0-dev : true + 1.0pl1 eq 1.0-dev : false + 1.0pl1 = 1.0-dev : false + 1.0pl1 == 1.0-dev : false + 1.0pl1 ne 1.0-dev : true + 1.0pl1 <> 1.0-dev : true + 1.0pl1 != 1.0-dev : true + 1.0pl1 lt 1.0a1 : false + 1.0pl1 < 1.0a1 : false + 1.0pl1 le 1.0a1 : false + 1.0pl1 <= 1.0a1 : false + 1.0pl1 gt 1.0a1 : true + 1.0pl1 > 1.0a1 : true + 1.0pl1 ge 1.0a1 : true + 1.0pl1 >= 1.0a1 : true + 1.0pl1 eq 1.0a1 : false + 1.0pl1 = 1.0a1 : false + 1.0pl1 == 1.0a1 : false + 1.0pl1 ne 1.0a1 : true + 1.0pl1 <> 1.0a1 : true + 1.0pl1 != 1.0a1 : true + 1.0pl1 lt 1.0b1 : false + 1.0pl1 < 1.0b1 : false + 1.0pl1 le 1.0b1 : false + 1.0pl1 <= 1.0b1 : false + 1.0pl1 gt 1.0b1 : true + 1.0pl1 > 1.0b1 : true + 1.0pl1 ge 1.0b1 : true + 1.0pl1 >= 1.0b1 : true + 1.0pl1 eq 1.0b1 : false + 1.0pl1 = 1.0b1 : false + 1.0pl1 == 1.0b1 : false + 1.0pl1 ne 1.0b1 : true + 1.0pl1 <> 1.0b1 : true + 1.0pl1 != 1.0b1 : true + 1.0pl1 lt 1.0RC1 : false + 1.0pl1 < 1.0RC1 : false + 1.0pl1 le 1.0RC1 : false + 1.0pl1 <= 1.0RC1 : false + 1.0pl1 gt 1.0RC1 : true + 1.0pl1 > 1.0RC1 : true + 1.0pl1 ge 1.0RC1 : true + 1.0pl1 >= 1.0RC1 : true + 1.0pl1 eq 1.0RC1 : false + 1.0pl1 = 1.0RC1 : false + 1.0pl1 == 1.0RC1 : false + 1.0pl1 ne 1.0RC1 : true + 1.0pl1 <> 1.0RC1 : true + 1.0pl1 != 1.0RC1 : true + 1.0pl1 lt 1.0 : false + 1.0pl1 < 1.0 : false + 1.0pl1 le 1.0 : false + 1.0pl1 <= 1.0 : false + 1.0pl1 gt 1.0 : true + 1.0pl1 > 1.0 : true + 1.0pl1 ge 1.0 : true + 1.0pl1 >= 1.0 : true + 1.0pl1 eq 1.0 : false + 1.0pl1 = 1.0 : false + 1.0pl1 == 1.0 : false + 1.0pl1 ne 1.0 : true + 1.0pl1 <> 1.0 : true + 1.0pl1 != 1.0 : true + 1.0pl1 lt 1.0pl1 : false + 1.0pl1 < 1.0pl1 : false + 1.0pl1 le 1.0pl1 : true + 1.0pl1 <= 1.0pl1 : true + 1.0pl1 gt 1.0pl1 : false + 1.0pl1 > 1.0pl1 : false + 1.0pl1 ge 1.0pl1 : true + 1.0pl1 >= 1.0pl1 : true + 1.0pl1 eq 1.0pl1 : true + 1.0pl1 = 1.0pl1 : true + 1.0pl1 == 1.0pl1 : true + 1.0pl1 ne 1.0pl1 : false + 1.0pl1 <> 1.0pl1 : false + 1.0pl1 != 1.0pl1 : false diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c index 1e3738c6e1..e03c5eaa1b 100644 --- a/ext/standard/versioning.c +++ b/ext/standard/versioning.c @@ -29,18 +29,6 @@ #define sign(n) ((n)<0?-1:((n)>0?1:0)) -#define PHP_VC_COMPARE 0 -#define PHP_VC_LT 1 -#define PHP_VC_LE 2 -#define PHP_VC_GT 3 -#define PHP_VC_GE 4 -#define PHP_VC_EQ 5 - -#define PHP_VCFUNC(name,mode) \ - void name(INTERNAL_FUNCTION_PARAMETERS) { \ - do_version_compare(INTERNAL_FUNCTION_PARAM_PASSTHRU, mode); \ - } - /* {{{ php_canonicalize_version() */ PHPAPI char * @@ -182,68 +170,50 @@ php_version_compare(const char *orig_ver1, const char *orig_ver2) /* }}} */ /* {{{ do_version_compare() */ -void do_version_compare(INTERNAL_FUNCTION_PARAMETERS, int mode) +/* {{{ proto int version_compare(string ver1, string ver2 [, string oper]) + Compares two "PHP-standardized" version number strings */ + +PHP_FUNCTION(version_compare) { - zval **v1, **v2; + zval **v1, **v2, **oper; int compare, argc; + char *op; argc = ZEND_NUM_ARGS(); - if (argc != 2 || zend_get_parameters_ex(argc, &v1, &v2) == FAILURE) { + if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &v1, &v2, &oper) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(v1); convert_to_string_ex(v2); compare = php_version_compare(Z_STRVAL_PP(v1), Z_STRVAL_PP(v2)); - switch (mode) { - case PHP_VC_LT: - RETURN_LONG(compare == -1); - case PHP_VC_LE: - RETURN_LONG(compare != 1); - case PHP_VC_GT: - RETURN_LONG(compare == 1); - case PHP_VC_GE: - RETURN_LONG(compare != -1); - case PHP_VC_EQ: - RETURN_LONG(compare == 0); - case PHP_VC_COMPARE: - default: - RETURN_LONG(compare); + if (argc == 2) { + RETURN_LONG(compare); + } + convert_to_string_ex(oper); + op = Z_STRVAL_PP(oper); + if (!strcmp(op, "<") || !strcmp(op, "lt")) { + RETURN_LONG(compare == -1); + } + if (!strcmp(op, "<=") || !strcmp(op, "le")) { + RETURN_LONG(compare != 1); + } + if (!strcmp(op, ">") || !strcmp(op, "gt")) { + RETURN_LONG(compare == 1); + } + if (!strcmp(op, ">=") || !strcmp(op, "ge")) { + RETURN_LONG(compare != -1); } + if (!strcmp(op, "==") || !strcmp(op, "=") || !strcmp(op, "eq")) { + RETURN_LONG(compare == 0); + } + if (!strcmp(op, "!=") || !strcmp(op, "<>") || !strcmp(op, "ne")) { + RETURN_LONG(compare != 0); + } + RETURN_NULL(); } /* }}} */ -/* {{{ proto int version_compare(string ver1, string ver2) */ - -PHP_VCFUNC(PHP_FN(version_compare), PHP_VC_COMPARE); - -/* }}} */ -/* {{{ proto int version_lt(string ver1, string ver2) */ - -PHP_VCFUNC(PHP_FN(version_lt), PHP_VC_LT); - -/* }}} */ -/* {{{ proto int version_lt(string ver1, string ver2) */ - -PHP_VCFUNC(PHP_FN(version_le), PHP_VC_LE); - -/* }}} */ -/* {{{ proto int version_gt(string ver1, string ver2) */ - -PHP_VCFUNC(PHP_FN(version_gt), PHP_VC_GT); - -/* }}} */ -/* {{{ proto int version_ge(string ver1, string ver2) */ - -PHP_VCFUNC(PHP_FN(version_ge), PHP_VC_GE); - -/* }}} */ -/* {{{ proto int version_eq(string ver1, string ver2) */ - -PHP_VCFUNC(PHP_FN(version_eq), PHP_VC_EQ); - -/* }}} */ - /* * Local variables: * tab-width: 4