summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--random.c10
2 files changed, 12 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 49492dcef2..7fc333c02e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,7 @@
-Fri Jul 17 13:55:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jul 17 13:58:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (fill_random_seed): /dev/urandom is not available on
+ DOSISH systems.
* random.c (random_equal): new method Random#==.
diff --git a/random.c b/random.c
index caa33babbd..c504ca22c1 100644
--- a/random.c
+++ b/random.c
@@ -375,19 +375,25 @@ random_init(int argc, VALUE *argv, VALUE obj)
#define DEFAULT_SEED_LEN (DEFAULT_SEED_CNT * sizeof(int))
+#if defined(S_ISCHR) && !defined(DOSISH)
+# define USE_DEV_URANDOM 1
+#else
+# define USE_DEV_URANDOM 0
+#endif
+
static void
fill_random_seed(unsigned int seed[DEFAULT_SEED_CNT])
{
static int n = 0;
struct timeval tv;
-#ifdef S_ISCHR
+#if USE_DEV_URANDOM
int fd;
struct stat statbuf;
#endif
memset(seed, 0, DEFAULT_SEED_LEN);
-#ifdef S_ISCHR
+#if USE_DEV_URANDOM
if ((fd = open("/dev/urandom", O_RDONLY
#ifdef O_NONBLOCK
|O_NONBLOCK