diff options
Diffstat (limited to 'evutil_rand.c')
-rw-r--r-- | evutil_rand.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/evutil_rand.c b/evutil_rand.c index b66d88b4..dd31a8df 100644 --- a/evutil_rand.c +++ b/evutil_rand.c @@ -33,13 +33,14 @@ */ #include "event2/event-config.h" +#include "evconfig-private.h" #include <limits.h> #include "util-internal.h" #include "evthread-internal.h" -#ifdef _EVENT_HAVE_ARC4RANDOM +#ifdef EVENT__HAVE_ARC4RANDOM #include <stdlib.h> #include <string.h> int @@ -49,21 +50,27 @@ evutil_secure_rng_init(void) (void) arc4random(); return 0; } +#ifndef EVENT__DISABLE_THREAD_SUPPORT int evutil_secure_rng_global_setup_locks_(const int enable_locks) { return 0; } +#endif +static void +evutil_free_secure_rng_globals_locks(void) +{ +} static void ev_arc4random_buf(void *buf, size_t n) { unsigned char *b = buf; -#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__) +#if defined(EVENT__HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__) return arc4random_buf(buf, n); #else -#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) +#if defined(EVENT__HAVE_ARC4RANDOM_BUF) /* OSX 10.7 introducd arc4random_buf, so if you build your program * there, you'll get surprised when older versions of OSX fail to run. * To solve this, we can check whether the function pointer is set, @@ -95,15 +102,15 @@ ev_arc4random_buf(void *buf, size_t n) #endif } -#else /* !_EVENT_HAVE_ARC4RANDOM { */ +#else /* !EVENT__HAVE_ARC4RANDOM { */ -#ifdef _EVENT_ssize_t -#define ssize_t _EVENT_SSIZE_t +#ifdef EVENT__ssize_t +#define ssize_t EVENT__ssize_t #endif #define ARC4RANDOM_EXPORT static -#define _ARC4_LOCK() EVLOCK_LOCK(arc4rand_lock, 0) -#define _ARC4_UNLOCK() EVLOCK_UNLOCK(arc4rand_lock, 0) -#ifndef _EVENT_DISABLE_THREAD_SUPPORT +#define ARC4_LOCK_() EVLOCK_LOCK(arc4rand_lock, 0) +#define ARC4_UNLOCK_() EVLOCK_UNLOCK(arc4rand_lock, 0) +#ifndef EVENT__DISABLE_THREAD_SUPPORT static void *arc4rand_lock; #endif @@ -114,7 +121,7 @@ static void *arc4rand_lock; #include "./arc4random.c" -#ifndef _EVENT_DISABLE_THREAD_SUPPORT +#ifndef EVENT__DISABLE_THREAD_SUPPORT int evutil_secure_rng_global_setup_locks_(const int enable_locks) { @@ -123,16 +130,28 @@ evutil_secure_rng_global_setup_locks_(const int enable_locks) } #endif +static void +evutil_free_secure_rng_globals_locks(void) +{ +#ifndef EVENT__DISABLE_THREAD_SUPPORT + if (arc4rand_lock != NULL) { + EVTHREAD_FREE_LOCK(arc4rand_lock, 0); + arc4rand_lock = NULL; + } +#endif + return; +} + int evutil_secure_rng_init(void) { int val; - _ARC4_LOCK(); + ARC4_LOCK_(); if (!arc4_seeded_ok) arc4_stir(); val = arc4_seeded_ok ? 0 : -1; - _ARC4_UNLOCK(); + ARC4_UNLOCK_(); return val; } @@ -142,7 +161,7 @@ ev_arc4random_buf(void *buf, size_t n) arc4random_buf(buf, n); } -#endif /* } !_EVENT_HAVE_ARC4RANDOM */ +#endif /* } !EVENT__HAVE_ARC4RANDOM */ void evutil_secure_rng_get_bytes(void *buf, size_t n) @@ -157,3 +176,8 @@ evutil_secure_rng_add_bytes(const char *buf, size_t n) n>(size_t)INT_MAX ? INT_MAX : (int)n); } +void +evutil_free_secure_rng_globals_(void) +{ + evutil_free_secure_rng_globals_locks(); +} |