Loading...
--- Libc/Libc-1725.40.4/stdlib/FreeBSD/random.c
+++ Libc/Libc-825.26/stdlib/FreeBSD/random.c
@@ -31,17 +31,16 @@
static char sccsid[] = "@(#)random.c 8.2 (Berkeley) 5/19/95";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#ifdef __APPLE__
-// Always compile with __DARWIN_UNIX03=1 prototypes.
-// Applications using legacy interfaces (i386 only) use types of the same size:
-// sizeof(int) == sizeof(long) == sizeof(size_t)
+__FBSDID("$FreeBSD: src/lib/libc/stdlib/random.c,v 1.25 2007/01/09 00:28:10 imp Exp $");
+
+/*
+ * We always compile with __DARWIN_UNIX03 set to one, relying on the fact that
+ * (for non-LP64) sizeof(int) == sizeof(long) == sizeof(size_t), so that we
+ * don't have to have two different versions of the prototypes. For LP64,
+ * we only support the POSIX-compatible prototypes.
+ */
#undef __DARWIN_UNIX03
#define __DARWIN_UNIX03 1
-#endif // __APPLE__
-
-#include "namespace.h"
#include "namespace.h"
#include <sys/time.h> /* for srandomdev() */
#include <fcntl.h> /* for srandomdev() */
@@ -225,8 +224,10 @@
static int rand_sep = SEP_3;
static uint32_t *end_ptr = &randtbl[DEG_3 + 1];
-static inline uint32_t
-good_rand(int32_t x)
+static inline uint32_t good_rand(int32_t) __attribute__((always_inline));
+
+static inline uint32_t good_rand (x)
+ int32_t x;
{
#ifdef USE_WEAK_SEEDING
/*
@@ -271,11 +272,8 @@
* for default usage relies on values produced by this routine.
*/
void
-#ifdef __APPLE__
-srandom(unsigned int x)
-#else
-srandom(unsigned long x)
-#endif
+srandom(x)
+ unsigned x;
{
int i, lim;
@@ -305,7 +303,7 @@
* a fixed seed.
*/
void
-srandomdev(void)
+srandomdev()
{
int fd, done;
size_t len;
@@ -316,7 +314,7 @@
len = rand_deg * sizeof state[0];
done = 0;
- fd = _open("/dev/random", O_RDONLY | O_CLOEXEC, 0);
+ fd = _open("/dev/random", O_RDONLY, 0);
if (fd >= 0) {
if (_read(fd, (void *) state, len) == (ssize_t) len)
done = 1;
@@ -325,9 +323,10 @@
if (!done) {
struct timeval tv;
+ unsigned long junk;
gettimeofday(&tv, NULL);
- srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec);
+ srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
return;
}
@@ -361,11 +360,10 @@
* complain about mis-alignment, but you should disregard these messages.
*/
char *
-#ifdef __APPLE__
-initstate(unsigned int seed, char *arg_state, size_t n)
-#else
-initstate(unsigned long seed, char *arg_state, long n)
-#endif
+initstate(seed, arg_state, n)
+ unsigned seed; /* seed for R.N.G. */
+ char *arg_state; /* pointer to state array */
+ size_t n; /* # bytes of state info */
{
char *ostate = (char *)(&state[-1]);
uint32_t *int_arg_state = (uint32_t *)arg_state;
@@ -377,7 +375,7 @@
if (n < BREAK_0) {
(void)fprintf(stderr,
"random: not enough state (%ld bytes); ignored.\n", n);
- return (0);
+ return(0);
}
if (n < BREAK_1) {
rand_type = TYPE_0;
@@ -407,7 +405,7 @@
int_arg_state[0] = rand_type;
else
int_arg_state[0] = MAX_TYPES * (rptr - state) + rand_type;
- return (ostate);
+ return(ostate);
}
/*
@@ -430,7 +428,8 @@
* complain about mis-alignment, but you should disregard these messages.
*/
char *
-setstate(const char *arg_state)
+setstate(arg_state)
+ const char *arg_state; /* pointer to state array */
{
uint32_t *new_state = (uint32_t *)arg_state;
uint32_t type = new_state[0] % MAX_TYPES;
@@ -461,7 +460,7 @@
fptr = &state[(rear + rand_sep) % rand_deg];
}
end_ptr = &state[rand_deg]; /* set end_ptr too */
- return (ostate);
+ return(ostate);
}
/*
@@ -482,7 +481,7 @@
* Returns a 31-bit random number.
*/
long
-random(void)
+random()
{
uint32_t i;
uint32_t *f, *r;
@@ -507,5 +506,5 @@
fptr = f; rptr = r;
}
- return ((long)i);
+ return((long)i);
}