Skip to content

Commit 88bd215

Browse files
committed
auto merge of #8558 : kballard/rust/xorshift-seed, r=cmr
Fixes #8359.
2 parents 0a23828 + e7b8524 commit 88bd215

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/libstd/rand.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -875,13 +875,22 @@ impl Rng for XorShiftRng {
875875
}
876876

877877
impl XorShiftRng {
878-
/// Create an xor shift random number generator with a default seed.
878+
/// Create an xor shift random number generator with a random seed.
879879
pub fn new() -> XorShiftRng {
880-
// constants taken from http://en.wikipedia.org/wiki/Xorshift
881-
XorShiftRng::new_seeded(123456789u32,
882-
362436069u32,
883-
521288629u32,
884-
88675123u32)
880+
// generate seeds the same way as seed(), except we have a spceific size
881+
let mut s = [0u8, ..16];
882+
loop {
883+
do s.as_mut_buf |p, sz| {
884+
unsafe {
885+
rustrt::rand_gen_seed(p, sz as size_t);
886+
}
887+
}
888+
if !s.iter().all(|x| *x == 0) {
889+
break;
890+
}
891+
}
892+
let s: &[u32, ..4] = unsafe { cast::transmute(&s) };
893+
XorShiftRng::new_seeded(s[0], s[1], s[2], s[3])
885894
}
886895

887896
/**

0 commit comments

Comments
 (0)