summaryrefslogtreecommitdiff
path: root/evutil_rand.c
diff options
context:
space:
mode:
Diffstat (limited to 'evutil_rand.c')
-rw-r--r--evutil_rand.c56
1 files changed, 41 insertions, 15 deletions
diff --git a/evutil_rand.c b/evutil_rand.c
index 3c2c81de..584d9495 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
@@ -55,21 +56,28 @@ 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)
{
-#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
- return arc4random_buf(buf, n);
+#if defined(EVENT__HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
+ arc4random_buf(buf, n);
+ return;
#else
unsigned char *b = buf;
-#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,
@@ -77,7 +85,8 @@ ev_arc4random_buf(void *buf, size_t n)
* trickery.)
*/
if (arc4random_buf != NULL) {
- return arc4random_buf(buf, n);
+ arc4random_buf(buf, n);
+ return;
}
#endif
/* Make sure that we start out with b at a 4-byte alignment; plenty
@@ -101,15 +110,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
@@ -120,7 +129,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)
{
@@ -129,6 +138,18 @@ 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_set_urandom_device_file(char *fname)
{
@@ -145,11 +166,11 @@ 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;
}
@@ -159,7 +180,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)
@@ -174,3 +195,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();
+}