From ec471e66ee14d7da06d4d0a22bc3cdb5f615fd6f Mon Sep 17 00:00:00 2001 From: Enno Boland Date: Wed, 7 Aug 2019 16:51:16 +0200 Subject: [PATCH] use jrand48 instead of mrand48_r on non glibc platforms --- shared/n-dhcp4/src/n-dhcp4-c-probe.c | 8 ++++++++ shared/n-dhcp4/src/n-dhcp4-private.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/shared/n-dhcp4/src/n-dhcp4-c-probe.c b/shared/n-dhcp4/src/n-dhcp4-c-probe.c index 308cff8307..9463528b1f 100644 --- a/shared/n-dhcp4/src/n-dhcp4-c-probe.c +++ b/shared/n-dhcp4/src/n-dhcp4-c-probe.c @@ -362,8 +362,12 @@ static void n_dhcp4_client_probe_config_initialize_random_seed(NDhcp4ClientProbe seed16v[1] = (u64 >> 16) ^ (u64 >> 0); seed16v[2] = (u64 >> 32) ^ (u64 >> 16); +#ifdef __GLIBC__ r = seed48_r(seed16v, &config->entropy); c_assert(!r); +#else + memcpy(config->entropy, seed16v, sizeof seed16v); +#endif } /** @@ -377,10 +381,14 @@ static void n_dhcp4_client_probe_config_initialize_random_seed(NDhcp4ClientProbe */ uint32_t n_dhcp4_client_probe_config_get_random(NDhcp4ClientProbeConfig *config) { long int result; +#ifdef __GLIBC__ int r; r = mrand48_r(&config->entropy, &result); c_assert(!r); +#else + result = jrand48(config->entropy); +#endif return result; }; diff --git a/shared/n-dhcp4/src/n-dhcp4-private.h b/shared/n-dhcp4/src/n-dhcp4-private.h index c38ddbfc80..fb48807712 100644 --- a/shared/n-dhcp4/src/n-dhcp4-private.h +++ b/shared/n-dhcp4/src/n-dhcp4-private.h @@ -259,7 +259,11 @@ struct NDhcp4ClientProbeConfig { bool inform_only; bool init_reboot; struct in_addr requested_ip; +#ifdef __GLIBC__ struct drand48_data entropy; /* entropy pool */ +#else + unsigned short entropy[3]; /* entropy pool */ +#endif uint64_t ms_start_delay; /* max ms to wait before starting probe */ NDhcp4ClientProbeOption *options[UINT8_MAX + 1]; int8_t request_parameters[UINT8_MAX + 1];