From: Roland McGrath Date: Mon, 18 Jul 2005 02:39:13 +0000 (+0000) Subject: 2005-04-12 Ulrich Drepper X-Git-Tag: cvs/fedora-glibc-2_3-20050718T0425~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0f7a049f2f5bd7a79c589979736ffd0caee88447;p=thirdparty%2Fglibc.git 2005-04-12 Ulrich Drepper [BZ #1090] * stdlib/random_r.c (__initstate_r): Don't use non-existing state. * string/tst-strfry.c: New file. * string/Makefile (tests): Add tst-strfry. --- diff --git a/stdlib/random_r.c b/stdlib/random_r.c index e955ea576a5..404006f2cd3 100644 --- a/stdlib/random_r.c +++ b/stdlib/random_r.c @@ -236,23 +236,20 @@ __initstate_r (seed, arg_state, n, buf) size_t n; struct random_data *buf; { - int type; - int degree; - int separation; - int32_t *state; - int old_type; - int32_t *old_state; - if (buf == NULL) goto fail; - old_type = buf->rand_type; - old_state = buf->state; - if (old_type == TYPE_0) - old_state[-1] = TYPE_0; - else - old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type; + int32_t *old_state = buf->state; + if (old_state != NULL) + { + int old_type = buf->rand_type; + if (old_type == TYPE_0) + old_state[-1] = TYPE_0; + else + old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type; + } + int type; if (n >= BREAK_3) type = n < BREAK_4 ? TYPE_3 : TYPE_4; else if (n < BREAK_1) @@ -267,13 +264,13 @@ __initstate_r (seed, arg_state, n, buf) else type = n < BREAK_2 ? TYPE_1 : TYPE_2; - degree = random_poly_info.degrees[type]; - separation = random_poly_info.seps[type]; + int degree = random_poly_info.degrees[type]; + int separation = random_poly_info.seps[type]; buf->rand_type = type; buf->rand_sep = separation; 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. */ buf->end_ptr = &state[degree]; diff --git a/string/Makefile b/string/Makefile index 66469f586ed..7a77e35732a 100644 --- a/string/Makefile +++ b/string/Makefile @@ -52,7 +52,7 @@ strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \ tests := tester inl-tester noinl-tester testcopy test-ffs \ tst-strlen stratcliff tst-svc tst-inlcall \ bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap \ - tst-strtok tst-strxfrm bug-strcoll1 \ + tst-strtok tst-strxfrm bug-strcoll1 tst-strfry \ $(addprefix test-,$(strop-tests)) distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h diff --git a/string/tst-strfry.c b/string/tst-strfry.c new file mode 100644 index 00000000000..2b40a39b132 --- /dev/null +++ b/string/tst-strfry.c @@ -0,0 +1,15 @@ +#include +#include + +static int +do_test (void) +{ + char str[] = "this is a test"; + + strfry (str); + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c"