Browse Source

* remove version_{lt,le,gt,ge,eq} functions, added a third optional

parameter to version_compare doing the same thing
experimental/ZendEngine2
Stig Bakken 25 years ago
parent
commit
925ff7f2b2
  1. 5
      ext/standard/basic_functions.c
  2. 5
      ext/standard/php_versioning.h
  3. 527
      ext/standard/tests/versioning/version_compare.phpt
  4. 90
      ext/standard/versioning.c

5
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}
};

5
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

527
ext/standard/tests/versioning/version_compare.phpt

@ -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

90
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

Loading…
Cancel
Save