From 78e5c2f3e6999066942f0683e39ca1a026c47b66 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 22 Feb 2023 16:46:31 +0100 Subject: [PATCH] utils: handle random_r fallback musl does not seem to have it so fall back to rand() and srand(). --- meson.build | 1 + src/pipewire/utils.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/meson.build b/meson.build index 6b475b244..e5f813ef7 100644 --- a/meson.build +++ b/meson.build @@ -403,6 +403,7 @@ check_functions = [ ['gettid', '#include ', ['-D_GNU_SOURCE'], []], ['memfd_create', '#include ', ['-D_GNU_SOURCE'], []], ['getrandom', '#include \n#include ', ['-D_GNU_SOURCE'], []], + ['random_r', '#include ', ['-D_GNU_SOURCE'], []], ['reallocarray', '#include ', ['-D_GNU_SOURCE'], []], ['sigabbrev_np', '#include ', ['-D_GNU_SOURCE'], []], ['XSetIOErrorExitHandler', '#include ', [], [x11_dep]], diff --git a/src/pipewire/utils.c b/src/pipewire/utils.c index 7af984ee8..76b9693b2 100644 --- a/src/pipewire/utils.c +++ b/src/pipewire/utils.c @@ -197,8 +197,10 @@ ssize_t pw_getrandom(void *buf, size_t buflen, unsigned int flags) return res; } +#ifdef HAVE_RANDOM_R static char statebuf[256]; static struct random_data random_state; +#endif /** Fill a buffer with random data * \param buf a buffer to fill @@ -215,7 +217,11 @@ void pw_random(void *buf, size_t buflen) uint8_t *p = buf; while (buflen-- > 0) { int32_t val; +#ifdef HAVE_RANDOM_R random_r(&random_state, &val); +#else + val = rand(); +#endif *p++ = (uint8_t) val;; } } @@ -229,7 +235,11 @@ void pw_random_init() clock_gettime(CLOCK_REALTIME, &ts); seed = (unsigned int) SPA_TIMESPEC_TO_NSEC(&ts); } +#ifdef HAVE_RANDOM_R initstate_r(seed, statebuf, sizeof(statebuf), &random_state); +#else + srand(seed); +#endif } SPA_EXPORT