aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--stdlib/Makefile2
-rw-r--r--stdlib/random_r.c14
3 files changed, 19 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index db405c8e94..eaaf34a1b0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,16 @@
+2000-08-22 Ulrich Drepper <drepper@redhat.com>
+
+ * stdlib/random_r.c: Cleanups.
+ * stdlib/tst-random.c: New file.
+ * stdlib/Makefile (tests): Add tst-random.
+ Patches by Michael Fischer <fischer-michael@cs.yale.edu>.
+
2000-08-21 Martin Schwidefsky <schwidefsky@de.ibm.com>
- * sysdeps/unix/sysv/linux/s390/getmsg.c: Remove.
- * sysdeps/unix/sysv/linux/s390/getpmsg.c: Remove.
- * sysdeps/unix/sysv/linux/s390/putmsg.c: Remove.
- * sysdeps/unix/sysv/linux/s390/putpmsg.c: Remove.
+ * sysdeps/unix/sysv/linux/s390/getmsg.c: Remove.
+ * sysdeps/unix/sysv/linux/s390/getpmsg.c: Remove.
+ * sysdeps/unix/sysv/linux/s390/putmsg.c: Remove.
+ * sysdeps/unix/sysv/linux/s390/putpmsg.c: Remove.
2000-08-22 Jakub Jelinek <jakub@redhat.com>
diff --git a/stdlib/Makefile b/stdlib/Makefile
index de6800ae8d..65df53d3cb 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -52,7 +52,7 @@ routines := \
distribute := exit.h grouping.h abort-instr.h isomac.c
tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
test-canon test-canon2 tst-strtoll tst-environ \
- tst-xpg-basename
+ tst-xpg-basename tst-random
# Several mpn functions from GNU MP are used by the strtod function.
diff --git a/stdlib/random_r.c b/stdlib/random_r.c
index 120fceee11..00ba44bfff 100644
--- a/stdlib/random_r.c
+++ b/stdlib/random_r.c
@@ -268,7 +268,7 @@ __setstate_r (arg_state, buf)
char *arg_state;
struct random_data *buf;
{
- int32_t *new_state = (int32_t *) arg_state;
+ int32_t *new_state = 1 + (int32_t *) arg_state;
int type;
int old_type;
int32_t *old_state;
@@ -285,7 +285,7 @@ __setstate_r (arg_state, buf)
else
old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
- type = new_state[0] % MAX_TYPES;
+ type = new_state[-1] % MAX_TYPES;
if (type < TYPE_0 || type > TYPE_4)
goto fail;
@@ -295,13 +295,13 @@ __setstate_r (arg_state, buf)
if (type != TYPE_0)
{
- int rear = new_state[0] / MAX_TYPES;
- buf->rptr = &new_state[1 + rear];
- buf->fptr = &new_state[1 + (rear + separation) % degree];
+ int rear = new_state[-1] / MAX_TYPES;
+ buf->rptr = &new_state[rear];
+ buf->fptr = &new_state[(rear + separation) % degree];
}
- buf->state = &new_state[1];
+ buf->state = new_state;
/* Set end_ptr too. */
- buf->end_ptr = &new_state[1 + degree];
+ buf->end_ptr = &new_state[degree];
return 0;