diff options
author | Jeroen van Wolffelaar <jeroen@php.net> | 2001-09-02 19:42:29 +0000 |
---|---|---|
committer | Jeroen van Wolffelaar <jeroen@php.net> | 2001-09-02 19:42:29 +0000 |
commit | 36f6b63c05f6a605197dd7b0e3a9e908ec5a7ebc (patch) | |
tree | a1371c3a74528d4fe05cc76b34f95a4ddb8d1ec4 | |
parent | a8aed3118d21fdd9d8b556a026f14a114d275841 (diff) | |
download | php-git-36f6b63c05f6a605197dd7b0e3a9e908ec5a7ebc.tar.gz |
Fix build for 95%
-rw-r--r-- | ext/standard/array.c | 5 | ||||
-rw-r--r-- | ext/standard/php_rand.h | 11 | ||||
-rw-r--r-- | ext/standard/rand.c | 27 | ||||
-rw-r--r-- | ext/standard/rand_sys.c | 45 |
4 files changed, 56 insertions, 32 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 0029e9dc2f..8187571e65 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2726,6 +2726,8 @@ PHP_FUNCTION(array_rand) ulong num_key; HashPosition pos; + php_error(E_ERROR, "Function array_rand temporarily disabled"); + if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &num_req) == FAILURE) { WRONG_PARAM_COUNT; @@ -2767,6 +2769,9 @@ PHP_FUNCTION(array_rand) randval = rand(); #endif #endif + + /* TEMPORARY HACK TO GET IT COMPILE */ +#define PHP_RAND_MAX 1 if ((double)(randval/(PHP_RAND_MAX+1.0)) < (double)num_req_val/(double)num_avail) { /* If we are returning a single result, just do it. */ diff --git a/ext/standard/php_rand.h b/ext/standard/php_rand.h index 05c72b8440..8ad83e8e2f 100644 --- a/ext/standard/php_rand.h +++ b/ext/standard/php_rand.h @@ -83,12 +83,13 @@ typedef struct _php_randgen_entry { char *ini_str; } php_randgen_entry; -php_randgen_entry *php_randgen_entries; +extern php_randgen_entry (*php_randgen_entries)[]; -#define PHP_SRAND(which,seed) (php_randgen_entry[which]->srand(seed)) -#define PHP_RAND(which) (php_randgen_entry[which]->rand()) -#define PHP_RANDMAX(which) (php_randgen_entry[which].randmax) -#define PHP_RAND_INISTR(which) (php_randgen_entry[which].ini_str) +#define PHP_HAS_SRAND(which) (php_randgen_entries[which]->srand) +#define PHP_SRAND(which,seed) ((*(php_randgen_entries[which]->srand))(seed)) +#define PHP_RAND(which) ((*(php_randgen_entries[which]->rand))()) +#define PHP_RANDMAX(which) (php_randgen_entries[which]->randmax) +#define PHP_RAND_INISTR(which) (php_randgen_entries[which]->ini_str) /* Define random generator constants */ #define PHP_RAND_SYS 0 diff --git a/ext/standard/rand.c b/ext/standard/rand.c index 4306ac77fb..e5d4a05bfa 100644 --- a/ext/standard/rand.c +++ b/ext/standard/rand.c @@ -42,9 +42,13 @@ }; #endif -#define FOREACH_RANDGEN(var,i) for ( (var) = php_randgen_entry[(i)=0] ; (var) < PHP_RAND_NUMGENS ; (var) = php_randgen_entry[++(i)] ) +php_randgen_entry (*php_randgen_entries)[PHP_RAND_NUMRANDS]; -php_randgen_entry php_randgen_entries[PHP_RAND_NUMGENS]; +/* TODO: make sure this will be called */ +PHP_MINIT_FUNCTION(rand) +{ + /* call: rand_sys, rand_mt, etc */ +} /* TODO: check that this function is called on the start of each script * execution: not more often, not less often. @@ -55,15 +59,14 @@ php_randgen_entry php_randgen_entries[PHP_RAND_NUMGENS]; */ PHP_RINIT_FUNCTION(rand) { - register php_randgen_entry *randgen; register int i; /* seed all number-generators */ /* FIXME: or seed relevant numgen on init/update ini-entry? */ - FOREACH_RANDGEN(randgen,i) { - if (randgen.srand) { + for (i = 0 ; i < PHP_RAND_NUMRANDS ; i++) { + if (PHP_HAS_SRAND(i)) { #define SRAND_A_RANDOM_SEED (time(0) * getpid() * (php_combined_lcg(TSRMLS_C) * 10000.0)) /* something with microtime? */ - randgen->srand(SRAND_A_RANDOM_SEED); + PHP_SRAND(i,SRAND_A_RANDOM_SEED); } } } @@ -71,11 +74,10 @@ PHP_RINIT_FUNCTION(rand) /* INI */ static int randgen_str_to_int(char *str, int strlen) { - register php_randgen_entry *randgen; register int i; - FOREACH_RANDGEN(randgen,i) { - if (!strcasecmp(str, randgen.ini_str)) + for (i = 0 ; i < PHP_RAND_NUMRANDS ; i++) { + if (!strcasecmp(str, PHP_RAND_INISTR(i))) return i; } return -1; @@ -93,7 +95,7 @@ static PHP_INI_MH(OnUpdateRandGen) * ini-parsing at startup? */ php_error(E_WARNING,"Invalid value for random_number_generator: \"%s\"", new_value); /* Fallback: */ - BG(rand_generator) = RAND_DEFAULT; + BG(rand_generator) = PHP_RAND_DEFAULT; } #ifdef DEBUG_RAND printf("\nRAND-INI updated: %d\n",BG(rand_generator)); @@ -102,7 +104,8 @@ static PHP_INI_MH(OnUpdateRandGen) } PHP_INI_BEGIN() - PHP_INI_ENTRY("random_number_generator", PHP_RAND_INISTR(PHP_RAND_DEFAULT), PHP_INI_ALL, OnUpdateRandGen) + /* FIXME: default is hardcoded here, this is the second place */ + PHP_INI_ENTRY("random_number_generator", "mt", PHP_INI_ALL, OnUpdateRandGen) PHP_INI_END() /* srand */ @@ -273,5 +276,5 @@ PHP_FUNCTION(mt_getrandmax) * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 tw=78 fdm=marker - * vim<600: sw=4 ts=4 tw=78 + * vim: sw=4 ts=4 tw=78 */ diff --git a/ext/standard/rand_sys.c b/ext/standard/rand_sys.c index 0d191375dd..3805fe5b1d 100644 --- a/ext/standard/rand_sys.c +++ b/ext/standard/rand_sys.c @@ -38,34 +38,49 @@ static long _php_rand_sys(void) return (long) rand_r(&BG(rand_sys_seed)); } -php_randgen_entries[PHP_RAND_SYS] = { - _php_srand_sys, /* void srand(long seed) */ - _php_rand_sys, /* long rand(void) */ +PHP_MINIT_FUNCTION(rand_sys) +{ + php_randgen_entries[PHP_RAND_SYS] = { + _php_srand_sys, /* void srand(long seed) */ + _php_rand_sys, /* long rand(void) */ #ifdef RAND_MAX - (long)RANDMAX, /* long randmax */ + (long)RANDMAX, /* long randmax */ #else - (long)(1<<15), /* long randmax */ + (long)(1<<15), /* long randmax */ #endif - "system" /* char *ini_str */ -} + "system" /* char *ini_str */ + }; + + /* + php_randgen_entries[PHP_RAND_SYS]->srand = _php_srand_sys; + php_randgen_entries[PHP_RAND_SYS].rand = _php_rand_sys; +#ifdef RAND_MAX + php_randgen_entries[PHP_RAND_SYS].randmax = (long)RAND_MAX; +#else + php_randgen_entries[PHP_RAND_SYS].randmax = (long)(1<<15); +#endif + php_randgen_entries[PHP_RAND_SYS].ini_str = "system"; + */ /* random() is left away, no manual page on my system, no bigger range than * rand() * --jeroen */ -/* lrand48 (_not_ TS) */ + /* lrand48 (_not_ TS) */ #if HAVE_LRAND48 -php_randgen_entries[PHP_RAND_LRAND48] = { - srand48, /* void srand(long seed) */ - lrand48, /* long rand(void) */ - 2147483647L, /* long randmax */ - "lrand48" /* char *ini_str */ -} + php_randgen_entries[PHP_RAND_LRAND48] = { + srand48, /* void srand(long seed) */ + lrand48, /* long rand(void) */ + 2147483647L, /* long randmax */ + "lrand48" /* char *ini_str */ + }; #else -php_randgen_entries[PHP_RAND_LRAND48] = NULL; + php_randgen_entries[PHP_RAND_LRAND48] = NULL; #endif +} + /* * Local variables: * tab-width: 4 |