LIB_SONAME = $(LIB_SHARED_SO).$(LIB_VERSION_MAJOR)
LIB_SHARED = $(LIB_SONAME).$(LIB_VERSION_MINOR)
-MK_CFLAGS = -Iinclude/ -include bsd/bsd.h -D_GNU_SOURCE
+MK_CFLAGS = -Iinclude/ -include bsd/bsd.h -D_GNU_SOURCE -D__REENTRANT
libs: $(LIB_STATIC) $(LIB_SHARED_SO)
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
+#include <pthread.h>
struct arc4_stream {
u_int8_t i;
};
#define RANDOMDEV "/dev/urandom"
+#ifdef __REENTRANT
+static pthread_mutex_t arc4random_mtx = PTHREAD_MUTEX_INITIALIZER;
+#define THREAD_LOCK() pthread_mutex_lock(&arc4random_mtx)
+#define THREAD_UNLOCK() pthread_mutex_unlock(&arc4random_mtx)
+#else
#define THREAD_LOCK()
#define THREAD_UNLOCK()
+#endif
static struct arc4_stream rs;
static int rs_initialized;
}
}
+void
+arc4random_stir()
+{
+ THREAD_LOCK();
+ arc4_check_init();
+ arc4_stir(&rs);
+ THREAD_UNLOCK();
+}
+
+void
+arc4random_addrandom(dat, datlen)
+ u_char *dat;
+ int datlen;
+{
+ THREAD_LOCK();
+ arc4_check_init();
+ arc4_check_stir();
+ arc4_addrandom(&rs, dat, datlen);
+ THREAD_UNLOCK();
+}
+
u_int32_t
arc4random()
{