|
187 | 187 | #include <time.h> /* POSIX 2001 */ |
188 | 188 | #include <sys/resource.h> /* getrusage() setrlimit() after time.h because of BSD */ |
189 | 189 |
|
| 190 | +/* On systems with random(), RANDOM_MAX may or may not be defined. |
| 191 | + * |
| 192 | + * If RANDOM_MAX isn't defined, we use 0x7FFFFFFF (2^31-1), or 2147483647 |
| 193 | + * since this follows the 4.3BSD and POSIX.1-2001 standards. This of course |
| 194 | + * assumes random() uses a 32 bit long int type per the standards. |
| 195 | + */ |
| 196 | +#ifndef RANDOM_MAX |
| 197 | +# define RANDOM_MAX 0x7FFFFFFF /* random() -- 2^31-1 */ |
| 198 | +#endif |
| 199 | + |
| 200 | +#ifdef HAVE_ARC4RANDOM_UNIFORM |
| 201 | + #define randint arc4random_uniform |
| 202 | +#else |
190 | 203 | /* Yikes...who would have thought finding a usable random() would be so much |
191 | 204 | * trouble? |
192 | 205 | * Note: random() is *not* thread safe. |
|
199 | 212 | # undef HAVE_SRANDOM |
200 | 213 | #endif |
201 | 214 |
|
202 | | -/* On systems with random(), RANDOM_MAX may or may not be defined. |
203 | | - * |
204 | | - * If RANDOM_MAX isn't defined, we use 0x7FFFFFFF (2^31-1), or 2147483647 |
205 | | - * since this follows the 4.3BSD and POSIX.1-2001 standards. This of course |
206 | | - * assumes random() uses a 32 bit long int type per the standards. |
207 | | - */ |
208 | | -#ifndef RANDOM_MAX |
209 | | -# define RANDOM_MAX 0x7FFFFFFF /* random() -- 2^31-1 */ |
210 | | -#endif |
211 | | - |
212 | | - |
213 | 215 | /* Use high-order bits for getting the random integer. With a modern |
214 | 216 | * random() implementation, modulo would probably be sufficient, but on |
215 | 217 | * systems lacking random(), it may just be a macro for an older rand() |
216 | 218 | * function. |
217 | 219 | */ |
218 | | -#define randint(n) (unsigned long) (random() / (RANDOM_MAX + 1.0) * n) |
219 | | - |
| 220 | + #define randint(n) (uint32_t) (random() / (RANDOM_MAX + 1.0) * n) |
| 221 | +#endif /* HAVE_ARC4RANDOM_UNIFORM */ |
220 | 222 |
|
221 | 223 | #ifdef TLS |
222 | 224 | # include <openssl/ssl.h> |
|
0 commit comments