[PATCH] nandtest: seed random generator properly
Jan Weitzel
J.Weitzel at phytec.de
Thu Dec 1 03:23:01 EST 2011
Am Mittwoch, den 30.11.2011, 10:24 -0800 schrieb Brian Norris:
> On Mon, Nov 28, 2011 at 11:30 PM, Jan Weitzel <J.Weitzel at phytec.de> wrote:
> > Brian Norris <computersforpeace at gmail.com> schrieb am 28.11.2011 19:11:52:
> >> + if (seed < 0)
> >> + seed = time(NULL);
> >> + srand(seed);
> >
> > So you loose all negative seeds.
>
> Well, srand() technically takes unsigned ints, so all seeds are
> technically positive. But that just means we're parsing and storing
> seeds wrong (not a big deal, really).
>
> > What is about
> >
> > int seed = time(NULL);
> > ...
> > case 's'
> > seed = atol(optarg);
> > ...
> > }
> > srand(seed);
>
> Not sure if I understand the question perfectly (clarify if I'm
> wrong). My patch was intended to:
> (1) use the user-supplied seed (--seed=X) if supplied
> (2) use a random seed (based on time()) if the seed is left
> uninitialized (i.e., -1)
>
> Anyway, I see a problem with my method. How about the following patch,
> which saves the time first, then overwrites it with the supplied seed
> if provided.
Acked-by: Jan Weitzel <j.weitzel at phytec.de>
Maybe you need to rebase it, because my former patch just got pushed.
> From 4df0643c4819f5de5db54b855406852da0dc6bf1 Mon Sep 17 00:00:00 2001
> From: Brian Norris <computersforpeace at gmail.com>
> Date: Mon, 28 Nov 2011 10:03:30 -0800
> Subject: [PATCH] nandtest: seed random generator properly
>
> This patch fixes two problems in nandtest:
>
> * if a seed is provided it is actually not used. First call is
> "seed = rand()" killing the given seed.
> Credit: Jan Weitzel <j.weitzel at phytec.de>
>
> * if a seed is not provided, we use the default rand() values, which
> produces the same sequence of values every run.r
>
> To solve these problems, we seed the random number generator with either
> the time() or the supplied seed.
>
> Cc: Jan Weitzel <j.weitzel at phytec.de>
> Signed-off-by: Brian Norris <computersforpeace at gmail.com>
> ---
> nandtest.c | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/nandtest.c b/nandtest.c
> index dc28d09..7811be2 100644
> --- a/nandtest.c
> +++ b/nandtest.c
> @@ -140,6 +140,8 @@ int main(int argc, char **argv)
> uint32_t offset = 0;
> uint32_t length = -1;
>
> + seed = time(NULL);
> +
> for (;;) {
> static const char *short_options="hkl:mo:p:s:";
> static const struct option long_options[] = {
> @@ -243,6 +245,8 @@ int main(int argc, char **argv)
> printf("Bad blocks : %d\n", oldstats.badblocks);
> printf("BBT blocks : %d\n", oldstats.bbtblocks);
>
> + srand(seed);
> +
> for (pass = 0; pass < nr_passes; pass++) {
> loff_t test_ofs;
>
More information about the linux-mtd
mailing list