diff options
author | Leigh <leigh@php.net> | 2016-08-10 23:32:32 +0100 |
---|---|---|
committer | Leigh <leigh@php.net> | 2016-08-10 23:32:32 +0100 |
commit | 9a9004318fa3a5b2c2c3c4a4fafed9ad4767df4a (patch) | |
tree | 23a54936a7006cf9c96970d168f1597923621890 /ext/standard/rand.c | |
parent | 24fdffdacbfeaa20e8f08d44c7c61e3fb7ba9ac5 (diff) | |
download | php-git-9a9004318fa3a5b2c2c3c4a4fafed9ad4767df4a.tar.gz |
Preserve BC for rand() AND mt_rand() where min > max
Diffstat (limited to 'ext/standard/rand.c')
-rw-r--r-- | ext/standard/rand.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/ext/standard/rand.c b/ext/standard/rand.c index 2720f55661..e97e0b46f0 100644 --- a/ext/standard/rand.c +++ b/ext/standard/rand.c @@ -45,6 +45,30 @@ PHPAPI zend_long php_rand(void) } /* }}} */ +/* {{{ proto int mt_rand([int min, int max]) + Returns a random number from Mersenne Twister */ +PHP_FUNCTION(rand) +{ + zend_long min; + zend_long max; + int argc = ZEND_NUM_ARGS(); + + if (argc == 0) { + RETURN_LONG(php_mt_rand() >> 1); + } + + if (zend_parse_parameters(argc, "ll", &min, &max) == FAILURE) { + return; + } + + if (max < min) { + RETURN_LONG(php_mt_rand_common(max, min)); + } + + RETURN_LONG(php_mt_rand_common(min, max)); +} +/* }}} */ + /* * Local variables: * tab-width: 4 |