]> err.no Git - varnish/commitdiff
Add a simple srandomdev() implementation inspired by the one in FreeBSD.
authordes <des@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 8 Aug 2006 12:15:22 +0000 (12:15 +0000)
committerdes <des@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 8 Aug 2006 12:15:22 +0000 (12:15 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@766 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/configure.ac
varnish-cache/include/Makefile.am
varnish-cache/include/compat/srandomdev.h [new file with mode: 0644]
varnish-cache/lib/libcompat/Makefile.am
varnish-cache/lib/libcompat/srandomdev.c [new file with mode: 0644]

index 586965ca4394a32af39533f3acee4d6a2b3251b6..a6364955d855f687f7d09fb7c7cea4640de911aa 100644 (file)
@@ -61,6 +61,7 @@ AC_FUNC_VPRINTF
 AC_CHECK_FUNCS([strerror])
 AC_FUNC_STRERROR_R
 AC_CHECK_FUNCS([socket])
+AC_CHECK_FUNCS([srandomdev])
 AC_CHECK_FUNCS([strlcat])
 AC_CHECK_FUNCS([strlcpy])
 
index 36bd3fe99a835227a86912cc48931715b07aa632..7c4f909e316a8fa3ce1428b38902a4b60772d2d0 100644 (file)
@@ -6,6 +6,7 @@ noinst_HEADERS = \
        cli_common.h \
        cli_priv.h \
        compat/asprintf.h \
+       compat/srandomdev.h \
        compat/strlcat.h \
        compat/strlcpy.h \
        compat/vasprintf.h \
diff --git a/varnish-cache/include/compat/srandomdev.h b/varnish-cache/include/compat/srandomdev.h
new file mode 100644 (file)
index 0000000..ef2a637
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * $Id$
+ */
+
+#ifndef COMPAT_SRANDOMDEV_H_INCLUDED
+#define COMPAT_SRANDOMDEV_H_INCLUDED
+
+#ifndef HAVE_SRANDOMDEV
+void srandomdev(void);
+#endif
+
+#endif
index 01f5981586af18c7c66899656ffc8d9e49c7ed2d..dcddb0b566708656fdb10d836ad68fa505e5b14f 100644 (file)
@@ -7,6 +7,7 @@ lib_LIBRARIES = libcompat.a
 libcompat_a_SOURCES = \
        asprintf.c \
        vasprintf.c \
+       srandomdev.c \
        strlcat.c \
        strlcpy.c
 
diff --git a/varnish-cache/lib/libcompat/srandomdev.c b/varnish-cache/lib/libcompat/srandomdev.c
new file mode 100644 (file)
index 0000000..d3ce305
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * $Id$
+ */
+
+#ifndef HAVE_SRANDOMDEV
+
+#include <sys/time.h>
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "compat/srandomdev.h"
+
+void
+srandomdev(void)
+{
+       struct timeval tv;
+       unsigned int seed;
+       int fd;
+
+       if ((fd = open("/dev/random", O_RDONLY)) >= 0) {
+               read(fd, &seed, sizeof seed);
+               close(fd);
+       } else {
+               gettimeofday(&tv, NULL);
+               /* NOTE: intentional use of uninitialized variable */
+               seed ^= (getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec;
+       }
+       srandom(seed);
+}
+#endif