From 69e7d8dcd5ccfbd4e46cdf502e7e8b0f3aa339bc Mon Sep 17 00:00:00 2001 From: Leigh Date: Thu, 7 Jul 2016 15:14:06 +0100 Subject: [PATCH] Make mode selection part of mt_srand() The mode of operation is intrinsically linked to seeding, so this makes a lot of sense --- ext/standard/basic_functions.c | 6 +---- ext/standard/mt_rand.c | 30 +++++++-------------- ext/standard/php_math.h | 1 - ext/standard/tests/math/mt_rand_value.phpt | 6 ++--- ext/standard/tests/math/mt_srand_error.phpt | 4 +-- ext/standard/tests/math/srand_error.phpt | 4 +-- 6 files changed, 17 insertions(+), 34 deletions(-) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 4c1321b674..a3ea512aea 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -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) diff --git a/ext/standard/mt_rand.c b/ext/standard/mt_rand.c index 04f4f8ea0c..fa7c004b65 100644 --- a/ext/standard/mt_rand.c +++ b/ext/standard/mt_rand.c @@ -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); diff --git a/ext/standard/php_math.h b/ext/standard/php_math.h index 91cd3e498e..406fd49dcd 100644 --- a/ext/standard/php_math.h +++ b/ext/standard/php_math.h @@ -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); diff --git a/ext/standard/tests/math/mt_rand_value.phpt b/ext/standard/tests/math/mt_rand_value.phpt index c71b61e9b0..cf7b9f00b6 100644 --- a/ext/standard/tests/math/mt_rand_value.phpt +++ b/ext/standard/tests/math/mt_rand_value.phpt @@ -3,8 +3,7 @@ Test mt_rand() output --FILE-- --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 diff --git a/ext/standard/tests/math/srand_error.phpt b/ext/standard/tests/math/srand_error.phpt index 6985af515a..ca9e4b939c 100644 --- a/ext/standard/tests/math/srand_error.phpt +++ b/ext/standard/tests/math/srand_error.phpt @@ -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 -- 2.50.1