-disable uniqid() when required lib functions not available

-emit an error when uniqid() will fail
-make more_entropy parameter default to true for CYGWIN
This commit is contained in:
Marcus Boerger 2002-12-20 16:34:42 +00:00
parent 740ee5df1c
commit 26038795f8
3 changed files with 17 additions and 10 deletions

View File

@ -515,7 +515,10 @@ function_entry basic_functions[] = {
PHP_FE(getrusage, NULL)
#endif
#ifdef HAVE_GETTIMEOFDAY
PHP_FE(uniqid, NULL)
#endif
PHP_FE(quoted_printable_decode, NULL)
PHP_FE(convert_cyr_string, NULL)
PHP_FE(get_current_user, NULL)

View File

@ -40,11 +40,15 @@
/* {{{ proto string uniqid(string prefix [, bool more_entropy])
Generates a unique ID */
#ifdef HAVE_GETTIMEOFDAY
PHP_FUNCTION(uniqid)
{
#ifdef HAVE_GETTIMEOFDAY
char *prefix;
#if defined(__CYGWIN__)
zend_bool more_entropy = 1;
#else
zend_bool more_entropy = 0;
#endif
char uniqid[138];
int sec, usec, argc, prefix_len;
struct timeval tv;
@ -57,17 +61,21 @@ PHP_FUNCTION(uniqid)
/* Do some bounds checking since we are using a char array. */
if (prefix_len > 114) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The prefix to uniqid should not be more than 114 characters.");
php_error_docref(NULL TSRMLS_CC, E_ERROR, "The prefix to uniqid should not be more than 114 characters.");
return;
}
#if HAVE_USLEEP && !defined(PHP_WIN32)
if (!more_entropy) {
#if defined(__CYGWIN__)
php_error_docref(NULL TSRMLS_CC, E_ERROR, "You must use 'more entropy' under CYGWIN.");
return;
#endif
usleep(1);
}
#endif
gettimeofday((struct timeval *) &tv, (struct timezone *) NULL);
sec = (int) tv.tv_sec;
usec = (int) (tv.tv_usec % 1000000);
usec = (int) (tv.tv_usec % 0x100000);
/* The max value usec can have is 0xF423F, so we use only five hex
* digits for usecs.
@ -79,16 +87,10 @@ PHP_FUNCTION(uniqid)
}
RETURN_STRING(uniqid, 1);
#endif
}
#endif
/* }}} */
function_entry uniqid_functions[] = {
PHP_FE(uniqid, NULL)
{NULL, NULL, NULL}
};
/*
* Local variables:
* tab-width: 4

View File

@ -21,6 +21,8 @@
#ifndef UNIQID_H
#define UNIQID_H
#ifdef HAVE_GETTIMEOFDAY
PHP_FUNCTION(uniqid);
#endif
#endif /* UNIQID_H */