summaryrefslogtreecommitdiff
path: root/src/prng
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2014-01-21 02:01:35 +0100
committerSzabolcs Nagy <nsz@port70.net>2014-01-21 02:01:35 +0100
commit1569f396bb76e9d54f6c4492ed6778e37b87bc70 (patch)
tree7e96d36129e0e78e5aec32d80901264117d2623d /src/prng
parent7cbb6f70c8fe711644ec0dbede1973cc6641a283 (diff)
downloadmusl-1569f396bb76e9d54f6c4492ed6778e37b87bc70.tar.gz
musl-1569f396bb76e9d54f6c4492ed6778e37b87bc70.tar.bz2
musl-1569f396bb76e9d54f6c4492ed6778e37b87bc70.tar.xz
musl-1569f396bb76e9d54f6c4492ed6778e37b87bc70.zip
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.
Diffstat (limited to 'src/prng')
-rw-r--r--src/prng/random.c14
1 files changed, 2 insertions, 12 deletions
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 <stdlib.h>
#include <stdint.h>
#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;
}