From e310d2fac2d874d5aa76c609df70cc7b871c0b6d Mon Sep 17 00:00:00 2001 From: Akira TAGOH Date: Thu, 6 Feb 2014 19:40:01 +0900 Subject: [PATCH] Fix incompatible API on AIX with random_r and initstate_r https://bugs.freedesktop.org/show_bug.cgi?id=74603 --- src/fccompat.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/fccompat.c b/src/fccompat.c index 1c2ba8b..f4f3f5f 100644 --- a/src/fccompat.c +++ b/src/fccompat.c @@ -170,14 +170,27 @@ FcRandom(void) static struct random_data fcrandbuf; static char statebuf[256]; static FcBool initialized = FcFalse; +#ifdef _AIX + static char *retval; + long res; +#endif if (initialized != FcTrue) { - initstate_r(time(NULL), statebuf, 256, &fcrandbuf); +#ifdef _AIX + initstate_r (time (NULL), statebuf, 256, &retval, &fcrandbuf); +#else + initstate_r (time (NULL), statebuf, 256, &fcrandbuf); +#endif initialized = FcTrue; } - random_r(&fcrandbuf, &result); +#ifdef _AIX + random_r (&res, &fcrandbuf); + result = (int32_t)res; +#else + random_r (&fcrandbuf, &result); +#endif #elif HAVE_RANDOM static char statebuf[256]; char *state; @@ -185,30 +198,30 @@ FcRandom(void) if (initialized != FcTrue) { - state = initstate(time(NULL), statebuf, 256); + state = initstate (time (NULL), statebuf, 256); initialized = FcTrue; } else - state = setstate(statebuf); + state = setstate (statebuf); - result = random(); + result = random (); - setstate(state); + setstate (state); #elif HAVE_LRAND48 - result = lrand48(); + result = lrand48 (); #elif HAVE_RAND_R - static unsigned int seed = time(NULL); + static unsigned int seed = time (NULL); - result = rand_r(&seed); + result = rand_r (&seed); #elif HAVE_RAND static FcBool initialized = FcFalse; if (initialized != FcTrue) { - srand(time(NULL)); + srand (time (NULL)); initialized = FcTrue; } - result = rand(); + result = rand (); #else # error no random number generator function available. #endif