mirror of
https://github.com/php/php-src.git
synced 2026-04-28 02:33:17 +02:00
* remove version_{lt,le,gt,ge,eq} functions, added a third optional
parameter to version_compare doing the same thing
This commit is contained in:
@@ -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}
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -3,7 +3,16 @@ version_compare test
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
print "TESTING COMPARE\n";
|
||||
$special_forms = array("-dev", "a1", "b1", "RC1", "", "pl1");
|
||||
$operators = array(
|
||||
"lt", "<",
|
||||
"le", "<=",
|
||||
"gt", ">",
|
||||
"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
|
||||
|
||||
+30
-60
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user