]> granicus.if.org Git - php/commitdiff
Make mode selection part of mt_srand()
authorLeigh <leigh@php.net>
Thu, 7 Jul 2016 14:14:06 +0000 (15:14 +0100)
committerLeigh <leigh@php.net>
Thu, 7 Jul 2016 14:14:06 +0000 (15:14 +0100)
The mode of operation is intrinsically linked to seeding, so this makes a lot of sense

ext/standard/basic_functions.c
ext/standard/mt_rand.c
ext/standard/php_math.h
ext/standard/tests/math/mt_rand_value.phpt
ext/standard/tests/math/mt_srand_error.phpt
ext/standard/tests/math/srand_error.phpt

index 4c1321b674439e14422d4d56c2d3bf6220296024..a3ea512aea497862e285c11e6cdee4d024c3f2eb 100644 (file)
@@ -1886,6 +1886,7 @@ ZEND_END_ARG_INFO()
 /* {{{ mt_rand.c */
 ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_srand, 0, 0, 0)
        ZEND_ARG_INFO(0, seed)
+       ZEND_ARG_INFO(0, mode)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_rand, 0, 0, 0)
@@ -1895,10 +1896,6 @@ ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO(arginfo_mt_getrandmax, 0)
 ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_rand_mode, 0, 0, 1)
-       ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO()
 /* }}} */
 /* {{{ random.c */
 ZEND_BEGIN_ARG_INFO_EX(arginfo_random_bytes, 0, 0, 0)
@@ -2858,7 +2855,6 @@ const zend_function_entry basic_functions[] = { /* {{{ */
        PHP_FE(mt_rand,                                                                                                                 arginfo_mt_rand)
        PHP_FE(mt_srand,                                                                                                                arginfo_mt_srand)
        PHP_FE(mt_getrandmax,                                                                                                   arginfo_mt_getrandmax)
-       PHP_FE(mt_rand_mode,                                                                                                    arginfo_mt_rand_mode)
 
        PHP_FE(random_bytes,                                                                                                    arginfo_random_bytes)
        PHP_FE(random_int,                                                                                                      arginfo_random_int)
index 04f4f8ea0c69507588fffdf8e676010b65a7abfd..fa7c004b65dd38f33602261961be6f62989be93a 100644 (file)
@@ -189,13 +189,22 @@ PHPAPI uint32_t php_mt_rand(void)
 PHP_FUNCTION(mt_srand)
 {
        zend_long seed = 0;
+       zend_long mode = MT_RAND_MT19937;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &seed) == FAILURE)
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "|ll", &seed, &mode) == FAILURE)
                return;
 
        if (ZEND_NUM_ARGS() == 0)
                seed = GENERATE_SEED();
 
+       switch (mode) {
+               case MT_RAND_PHP:
+                       BG(mt_rand_mode) = MT_RAND_PHP;
+                       break;
+               default:
+                       BG(mt_rand_mode) = MT_RAND_MT19937;
+       }
+       
        php_mt_srand(seed);
 }
 /* }}} */
@@ -283,25 +292,6 @@ PHP_FUNCTION(mt_getrandmax)
 }
 /* }}} */
 
-/* {{{ proto int mt_rand_mode(int)
-   Switch mt_rand between standard and legacy modes */
-PHP_FUNCTION(mt_rand_mode)
-{
-       zend_long mode;
-
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &mode) == FAILURE) {
-               return;
-       }
-
-       switch (mode) {
-               case MT_RAND_PHP:
-                       BG(mt_rand_mode) = MT_RAND_PHP;
-                       break;
-               default:
-                       BG(mt_rand_mode) = MT_RAND_MT19937;
-       }
-}
-/* }}} */
 PHP_MINIT_FUNCTION(mt_rand)
 {
        REGISTER_LONG_CONSTANT("MT_RAND_MT19937", MT_RAND_MT19937, CONST_CS | CONST_PERSISTENT);
index 91cd3e498e3517a6f4932876725aa52fc55a0838..406fd49dcd9c02166f0ac7a9bdf53d149afc026d 100644 (file)
@@ -51,7 +51,6 @@ PHP_FUNCTION(getrandmax);
 PHP_FUNCTION(mt_srand);
 PHP_FUNCTION(mt_rand);
 PHP_FUNCTION(mt_getrandmax);
-PHP_FUNCTION(mt_rand_mode);
 PHP_FUNCTION(abs);
 PHP_FUNCTION(ceil);
 PHP_FUNCTION(floor);
index c71b61e9b00496b427a0823d30e3bcbf576cbcdd..cf7b9f00b6ea9d3f66c9d881938bbc205ce4bfdc 100644 (file)
@@ -3,8 +3,7 @@ Test mt_rand() output
 --FILE--
 <?php
 
-mt_rand_mode(MT_RAND_PHP);
-mt_srand(12345678);
+mt_srand(12345678, MT_RAND_PHP);
 
 for ($i=0; $i<16; $i++) {
     echo mt_rand().PHP_EOL;
@@ -18,8 +17,7 @@ for ($i=0; $i<1024; $i++) {
 echo $x.PHP_EOL;
 echo PHP_EOL;
 
-mt_rand_mode(MT_RAND_MT19937);
-mt_srand(12345678);
+mt_srand(12345678 /*, MT_RAND_MT19937 */);
 
 for ($i=0; $i<16; $i++) {
     echo mt_rand().PHP_EOL;
index 537727c9bb49e37b9313aa3a564ce12fc46aa74b..aa2fc75b749a0b22e7965e557f673b9b636aa78d 100644 (file)
@@ -2,12 +2,12 @@
 Test mt_srand() - wrong params test mt_srand()
 --FILE--
 <?php
-var_dump(mt_srand(500, true));
+var_dump(mt_srand(500, 0, true));
 var_dump(mt_srand("fivehundred"));
 var_dump(mt_srand("500ABC"));
 ?>
 --EXPECTF--
-Warning: mt_srand() expects at most 1 parameter, 2 given in %s on line 2
+Warning: mt_srand() expects at most 2 parameters, 3 given in %s on line 2
 NULL
 
 Warning: mt_srand() expects parameter 1 to be integer, string given in %s on line 3
index 6985af515af2804badc9caac5cb5c1e6ce197a92..ca9e4b939cd1614b644883f9f246e5837a5c5187 100644 (file)
@@ -13,7 +13,7 @@ Test srand() function :  error conditions - incorrect number of args
  
 echo "*** Testing srand() : error conditions ***\n";
 
-var_dump(srand(500, true));
+var_dump(srand(500, 0, true));
 var_dump(srand("fivehundred"));
 var_dump(srand("500ABC"));
 ?>
@@ -21,7 +21,7 @@ var_dump(srand("500ABC"));
 --EXPECTF--
 *** Testing srand() : error conditions ***
 
-Warning: srand() expects at most 1 parameter, 2 given in %s on line %d
+Warning: srand() expects at most 2 parameters, 3 given in %s on line %d
 NULL
 
 Warning: srand() expects parameter 1 to be integer, string given in %s on line %d