mirror of
https://github.com/php/php-src.git
synced 2026-03-25 16:52:18 +01:00
Make mode selection part of mt_srand()
The mode of operation is intrinsically linked to seeding, so this makes a lot of sense
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user