Detect and use available random number generator (bug 8308)

Prefer random over lrand48 over rand
This commit is contained in:
Keith Packard 2006-09-17 14:20:18 -07:00
parent 706a1b367a
commit cc104e6a91
2 changed files with 13 additions and 2 deletions

View File

@ -166,7 +166,7 @@ AC_TYPE_PID_T
# Checks for library functions.
AC_FUNC_VPRINTF
AC_FUNC_MMAP
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand_r])
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48])
#
# Checks for iconv

View File

@ -213,6 +213,17 @@ struct _FcCacheSkip {
static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL];
static int fcCacheMaxLevel;
#if HAVE_RANDOM
# define FcRandom() random()
#else
# if HAVE_LRAND48
# define FcRandom() lrand48()
# else
# if HAVE_RAND
# define FcRandom() rand()
# endif
# endif
#endif
/*
* Generate a random level number, distributed
* so that each level is 1/4 as likely as the one before
@ -223,7 +234,7 @@ static int
random_level (void)
{
/* tricky bit -- each bit is '1' 75% of the time */
long int bits = random () | random ();
long int bits = FcRandom () | FcRandom ();
int level = 0;
while (++level < FC_CACHE_MAX_LEVEL)