From 1569f396bb76e9d54f6c4492ed6778e37b87bc70 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Tue, 21 Jan 2014 02:01:35 +0100 Subject: fix initstate to make the state buffer usable in setstate setstate could use the results of previous initstate or setstate calls (they return the old state buffer), but the documentation requires that an initialized state buffer should be possible to use in setstate immediately, which means that initstate should save the generator parameters in it. I also removed the copyright notice since it is present in the copyright file. --- src/prng/random.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'src/prng') diff --git a/src/prng/random.c b/src/prng/random.c index 4ad62058..e250e28e 100644 --- a/src/prng/random.c +++ b/src/prng/random.c @@ -1,10 +1,3 @@ -/* - * random.c - Copyright © 2011 Szabolcs Nagy - * Permission to use, copy, modify, and/or distribute this code - * for any purpose with or without fee is hereby granted. - * There is no warranty. -*/ - #include #include #include "libc.h" @@ -12,11 +5,7 @@ /* this code uses the same lagged fibonacci generator as the original bsd random implementation except for the seeding - -different seeds produce different sequences with long period -(other libcs seed the state with a park-miller generator -when seed=0 some fail to produce good random sequence -others produce the same sequence as another seed) +which was broken in the original */ static uint32_t init[] = { @@ -98,6 +87,7 @@ char *initstate(unsigned seed, char *state, size_t size) { n = 63; x = (uint32_t*)state + 1; __srandom(seed); + savestate(); UNLOCK(lock); return old; } -- cgit v1.2.1