mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
(__initstate_r): Don't use non-existing state.
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1995, 2005 Free Software Foundation
|
Copyright (C) 1995, 2005 Free Software Foundation
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -32,7 +32,7 @@
|
|||||||
4. Neither the name of the University nor the names of its contributors
|
4. Neither the name of the University nor the names of its contributors
|
||||||
may be used to endorse or promote products derived from this software
|
may be used to endorse or promote products derived from this software
|
||||||
without specific prior written permission.
|
without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@ -236,23 +236,20 @@ __initstate_r (seed, arg_state, n, buf)
|
|||||||
size_t n;
|
size_t n;
|
||||||
struct random_data *buf;
|
struct random_data *buf;
|
||||||
{
|
{
|
||||||
int type;
|
|
||||||
int degree;
|
|
||||||
int separation;
|
|
||||||
int32_t *state;
|
|
||||||
int old_type;
|
|
||||||
int32_t *old_state;
|
|
||||||
|
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
old_type = buf->rand_type;
|
int32_t *old_state = buf->state;
|
||||||
old_state = buf->state;
|
if (old_state != NULL)
|
||||||
if (old_type == TYPE_0)
|
{
|
||||||
old_state[-1] = TYPE_0;
|
int old_type = buf->rand_type;
|
||||||
else
|
if (old_type == TYPE_0)
|
||||||
old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
|
old_state[-1] = TYPE_0;
|
||||||
|
else
|
||||||
|
old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
int type;
|
||||||
if (n >= BREAK_3)
|
if (n >= BREAK_3)
|
||||||
type = n < BREAK_4 ? TYPE_3 : TYPE_4;
|
type = n < BREAK_4 ? TYPE_3 : TYPE_4;
|
||||||
else if (n < BREAK_1)
|
else if (n < BREAK_1)
|
||||||
@ -267,13 +264,13 @@ __initstate_r (seed, arg_state, n, buf)
|
|||||||
else
|
else
|
||||||
type = n < BREAK_2 ? TYPE_1 : TYPE_2;
|
type = n < BREAK_2 ? TYPE_1 : TYPE_2;
|
||||||
|
|
||||||
degree = random_poly_info.degrees[type];
|
int degree = random_poly_info.degrees[type];
|
||||||
separation = random_poly_info.seps[type];
|
int separation = random_poly_info.seps[type];
|
||||||
|
|
||||||
buf->rand_type = type;
|
buf->rand_type = type;
|
||||||
buf->rand_sep = separation;
|
buf->rand_sep = separation;
|
||||||
buf->rand_deg = degree;
|
buf->rand_deg = degree;
|
||||||
state = &((int32_t *) arg_state)[1]; /* First location. */
|
int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */
|
||||||
/* Must set END_PTR before srandom. */
|
/* Must set END_PTR before srandom. */
|
||||||
buf->end_ptr = &state[degree];
|
buf->end_ptr = &state[degree];
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user