]> granicus.if.org Git - php/commitdiff
* remove version_{lt,le,gt,ge,eq} functions, added a third optional
authorStig Bakken <ssb@php.net>
Thu, 11 Oct 2001 10:35:59 +0000 (10:35 +0000)
committerStig Bakken <ssb@php.net>
Thu, 11 Oct 2001 10:35:59 +0000 (10:35 +0000)
  parameter to version_compare doing the same thing

ext/standard/basic_functions.c
ext/standard/php_versioning.h
ext/standard/tests/versioning/version_compare.phpt
ext/standard/versioning.c

index 167ca2cc936614e9af4d82d6b9bbda56954c31ac..e6e136d3ea3edc557d6a056134fc141a4599c07e 100644 (file)
@@ -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}
 };
index 76286d71f686eafec9079293cd113515ae9b1f03..f25a80e5048333ea755a9e9943491f6e8a2dc791 100644 (file)
 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
index 6045c41735d0fcd143cf9c75283269e593a74605..6ef49ba7772cc6c876034b3b51b630d5c4c6fff7 100644 (file)
@@ -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
index 1e3738c6e14a1ab346f7097d446d9875ccb79167..e03c5eaa1bb8e003d6613a888402b7dbb64bd3ae 100644 (file)
 
 #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