summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2014-02-06 19:40:01 +0900
committerAkira TAGOH <akira@tagoh.org>2014-02-06 19:40:01 +0900
commite310d2fac2d874d5aa76c609df70cc7b871c0b6d (patch)
tree435c8c1e490a824c1a10396e1018a72803a9b5a9
parent7d75653285a3cd67b5f066fe899821462d7f324f (diff)
downloadfontconfig-e310d2fac2d874d5aa76c609df70cc7b871c0b6d.tar.gz
fontconfig-e310d2fac2d874d5aa76c609df70cc7b871c0b6d.tar.bz2
fontconfig-e310d2fac2d874d5aa76c609df70cc7b871c0b6d.zip
Fix incompatible API on AIX with random_r and initstate_r
https://bugs.freedesktop.org/show_bug.cgi?id=74603
-rw-r--r--src/fccompat.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/fccompat.c b/src/fccompat.c
index 1c2ba8be..f4f3f5fd 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