have the much better suited arc4random() family of functions; there's
no reason to not use it if it is available. Make m_rand() just a
wrapper around arc4random_buf() in that case. (There's no need to
ever seed it manually.)
As a bonus, silences some warnings on OpenBSD.
dnl ---------------
dnl CHECK FUNCTIONS
dnl ---------------
-AC_CHECK_FUNCS([wcwidth mbtowc writev lstat nl_langinfo getutxent])
+AC_CHECK_FUNCS([wcwidth mbtowc writev lstat nl_langinfo getutxent arc4random])
dnl Check for multibyte character set support
AS_IF([test "x$ac_cv_header_wchar_h" = "xyes" -a \
* complete copyright information.
*/
-#include <stdlib.h> /* for abs(), srand(), rand() */
+#include <stdlib.h> /* for abs(), srand(), rand(), arc4random() */
#include <stdio.h> /* for fopen(), fread(), fclose() */
#include <unistd.h> /* for getpid() */
#include <time.h> /* for time() */
+#include <config.h>
+
+#if !HAVE_ARC4RANDOM
static int seeded = 0;
+#endif
int
m_rand (unsigned char *buf, size_t n) {
+#if !HAVE_ARC4RANDOM
if (! seeded) {
FILE *devurandom;
unsigned int seed;
*buf++ = *rndp++;
}
}
+#else
+ arc4random_buf(buf, n);
+#endif
return 0;
}