summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Wolffelaar <jeroen@php.net>2001-09-02 19:42:29 +0000
committerJeroen van Wolffelaar <jeroen@php.net>2001-09-02 19:42:29 +0000
commit36f6b63c05f6a605197dd7b0e3a9e908ec5a7ebc (patch)
treea1371c3a74528d4fe05cc76b34f95a4ddb8d1ec4
parenta8aed3118d21fdd9d8b556a026f14a114d275841 (diff)
downloadphp-git-36f6b63c05f6a605197dd7b0e3a9e908ec5a7ebc.tar.gz
Fix build for 95%
-rw-r--r--ext/standard/array.c5
-rw-r--r--ext/standard/php_rand.h11
-rw-r--r--ext/standard/rand.c27
-rw-r--r--ext/standard/rand_sys.c45
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