From: Keith Packard Date: Sun, 17 Sep 2006 21:20:18 +0000 (-0700) Subject: Detect and use available random number generator (bug 8308) X-Git-Tag: 2.4.2~17 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=cc104e6a910427db009be36ec34125962889ecb8;p=fontconfig.git Detect and use available random number generator (bug 8308) Prefer random over lrand48 over rand --- diff --git a/configure.in b/configure.in index 06bdf52..98604c3 100644 --- a/configure.in +++ b/configure.in @@ -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 diff --git a/src/fccache.c b/src/fccache.c index e289c5d..7e2c1be 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -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)