File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -36,6 +36,7 @@ SRCFILES = \
36
36
nrand48_r.c \
37
37
qsort.c \
38
38
rand.c \
39
+ rand_r.c \
39
40
random.c \
40
41
secure-getenv.c \
41
42
seed48.c \
Original file line number Diff line number Diff line change
1
+ /* Reentrant random function from POSIX.1c.
2
+ Copyright (C) 1996-2023 Free Software Foundation, Inc.
3
+ This file is part of the GNU C Library.
4
+
5
+ The GNU C Library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ The GNU C Library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with the GNU C Library; if not, see
17
+ <https://www.gnu.org/licenses/>. */
18
+
19
+ #include <stdlib.h>
20
+
21
+
22
+ /* This algorithm is mentioned in the ISO C standard, here extended
23
+ for 32 bits. */
24
+ int
25
+ rand_r (unsigned int * seed )
26
+ {
27
+ unsigned long next = * seed ;
28
+ long result ;
29
+
30
+ next *= 1103515245L ;
31
+ next += 12345 ;
32
+ result = (next / 65536 ) % 2048 ;
33
+
34
+ next *= 1103515245L ;
35
+ next += 12345L ;
36
+ result <<= 10 ;
37
+ result ^= (next / 65536 ) % 1024 ;
38
+
39
+ next *= 1103515245L ;
40
+ next += 12345L ;
41
+ result <<= 10 ;
42
+ result ^= (next / 65536 ) % 1024 ;
43
+
44
+ * seed = next ;
45
+
46
+ #ifdef __MSHORT__
47
+ result &= RAND_MAX ;
48
+ #endif
49
+ return (int ) result ;
50
+ }
51
+
You can’t perform that action at this time.
0 commit comments