From b85bae86cd4d46f5f173ce3f8de3547d9a11af6d Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 8 Jul 2007 15:04:34 +0000 Subject: [PATCH] * Makefile.in (DLL_OFILES): Add newly-imported random.o. Eliminate reliance on libiberty. * random.cc: Import from FreeBSD. Modify for Cygwin environment. * include/cygwin/stdlib.h (random): Reflect change in return value to be more linux/freebsd-like. (srandom): Ditto. --- winsup/cygwin/ChangeLog | 9 +++++++ winsup/cygwin/Makefile.in | 20 +++++++------- winsup/cygwin/include/cygwin/stdlib.h | 4 +-- winsup/cygwin/random.cc | 38 ++++++++++++++------------- 4 files changed, 41 insertions(+), 30 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index ebde48d95..3be55cd30 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2007-07-08 Christopher Faylor + + * Makefile.in (DLL_OFILES): Add newly-imported random.o. Eliminate + reliance on libiberty. + * random.cc: Import from FreeBSD. Modify for Cygwin environment. + * include/cygwin/stdlib.h (random): Reflect change in return value to + be more linux/freebsd-like. + (srandom): Ditto. + 2007-07-07 Christopher Faylor * fhandler.h (fhandler_base::write): Remove __stdcall decoration. diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index 48e1e36f9..eb0c85814 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -115,9 +115,9 @@ LIBCOS:=${sort ${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.c}} EXTRA_DLL_OFILES:=${addsuffix .o,${basename ${notdir ${wildcard $(CONFIG_DIR)/*.c}}}} -EXTRA_OFILES=$(bupdir1)/libiberty/random.o +EXTRA_OFILES:= -MALLOC_OFILES=@MALLOC_OFILES@ +MALLOC_OFILES:=@MALLOC_OFILES@ DLL_IMPORTS:=$(w32api_lib)/libkernel32.a $(w32api_lib)/libadvapi32.a $(w32api_lib)/libntdll.a @@ -137,14 +137,14 @@ DLL_OFILES:=assert.o autoload.o bsdlib.o ctype.o cxx.o cygheap.o cygthread.o \ grp.o heap.o hookapi.o inet_addr.o inet_network.o init.o ioctl.o ipc.o \ localtime.o lsearch.o malloc_wrapper.o memmem.o minires-os-if.o \ minires.o miscfuncs.o mktemp.o mmap.o msg.o net.o netdb.o nftw.o \ - passwd.o path.o pinfo.o pipe.o poll.o posix_ipc.o pthread.o regcomp.o \ - regerror.o regexec.o regfree.o registry.o resource.o rexec.o rcmd.o \ - scandir.o sched.o sec_acl.o sec_helper.o security.o select.o sem.o \ - shared.o shm.o sigfe.o signal.o sigproc.o smallprint.o spawn.o strace.o \ - strptime.o strsep.o strsig.o sync.o syscalls.o sysconf.o syslog.o \ - termios.o thread.o timelocal.o timer.o times.o tty.o uinfo.o uname.o \ - v8_regexp.o v8_regerror.o v8_regsub.o wait.o wincap.o window.o winf.o \ - xsique.o \ + passwd.o path.o pinfo.o pipe.o poll.o posix_ipc.o pthread.o random.o \ + regcomp.o regerror.o regexec.o regfree.o registry.o resource.o rexec.o \ + rcmd.o scandir.o sched.o sec_acl.o sec_helper.o security.o select.o \ + sem.o shared.o shm.o sigfe.o signal.o sigproc.o smallprint.o spawn.o \ + strace.o strptime.o strsep.o strsig.o sync.o syscalls.o sysconf.o \ + syslog.o termios.o thread.o timelocal.o timer.o times.o tty.o uinfo.o \ + uname.o v8_regexp.o v8_regerror.o v8_regsub.o wait.o wincap.o window.o \ + winf.o xsique.o \ $(EXTRA_DLL_OFILES) $(EXTRA_OFILES) $(MALLOC_OFILES) $(MT_SAFE_OBJECTS) GMON_OFILES:=gmon.o mcount.o profil.o diff --git a/winsup/cygwin/include/cygwin/stdlib.h b/winsup/cygwin/include/cygwin/stdlib.h index acd1f8afc..07a4ea5a1 100644 --- a/winsup/cygwin/include/cygwin/stdlib.h +++ b/winsup/cygwin/include/cygwin/stdlib.h @@ -24,8 +24,8 @@ void setprogname (const char *); #ifndef __STRICT_ANSI__ char *realpath (const char *, char *); int unsetenv (const char *); -int random (void); -long srandom (unsigned); +long random (void); +void srandom (unsigned); char *ptsname (int); int grantpt (int); int unlockpt (int); diff --git a/winsup/cygwin/random.cc b/winsup/cygwin/random.cc index 693550b23..e1e21eccb 100644 --- a/winsup/cygwin/random.cc +++ b/winsup/cygwin/random.cc @@ -27,20 +27,19 @@ * SUCH DAMAGE. */ +extern "C" { #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)random.c 8.2 (Berkeley) 5/19/95"; #endif /* LIBC_SCCS and not lint */ #include __FBSDID("$FreeBSD: src/lib/libc/stdlib/random.c,v 1.25 2007/01/09 00:28:10 imp Exp $"); -#include "namespace.h" #include /* for srandomdev() */ #include /* for srandomdev() */ #include #include #include #include /* for srandomdev() */ -#include "un-namespace.h" /* * random.c: @@ -216,10 +215,7 @@ static int rand_deg = DEG_3; static int rand_sep = SEP_3; static uint32_t *end_ptr = &randtbl[DEG_3 + 1]; -static inline uint32_t good_rand(int32_t); - -static inline uint32_t good_rand (x) - int32_t x; +static inline uint32_t good_rand (int32_t x) { #ifdef USE_WEAK_SEEDING /* @@ -264,8 +260,7 @@ static inline uint32_t good_rand (x) * for default usage relies on values produced by this routine. */ void -srandom(x) - unsigned long x; +srandom(unsigned x) { int i, lim; @@ -283,6 +278,14 @@ srandom(x) (void)random(); } +/* Avoid a compiler warning when we really want to get at the junk in + an uninitialized variable. */ +static unsigned long +dummy (unsigned long *x) +{ + return *x; +} + /* * srandomdev: * @@ -306,11 +309,11 @@ srandomdev() len = rand_deg * sizeof state[0]; done = 0; - fd = _open("/dev/random", O_RDONLY, 0); + fd = open("/dev/random", O_RDONLY, 0); if (fd >= 0) { - if (_read(fd, (void *) state, len) == (ssize_t) len) + if (read(fd, (void *) state, len) == (ssize_t) len) done = 1; - _close(fd); + close(fd); } if (!done) { @@ -318,7 +321,7 @@ srandomdev() unsigned long junk; gettimeofday(&tv, NULL); - srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk); + srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ dummy(&junk)); return; } @@ -352,10 +355,9 @@ srandomdev() * complain about mis-alignment, but you should disregard these messages. */ char * -initstate(seed, arg_state, n) - unsigned long seed; /* seed for R.N.G. */ - char *arg_state; /* pointer to state array */ - long n; /* # bytes of state info */ +initstate(unsigned long seed, /* seed for R.N.G. */ + char *arg_state, /* pointer to state array */ + long n) /* # bytes of state info */ { char *ostate = (char *)(&state[-1]); uint32_t *int_arg_state = (uint32_t *)arg_state; @@ -420,8 +422,7 @@ initstate(seed, arg_state, n) * complain about mis-alignment, but you should disregard these messages. */ char * -setstate(arg_state) - char *arg_state; /* pointer to state array */ +setstate(char *arg_state /* pointer to state array */) { uint32_t *new_state = (uint32_t *)arg_state; uint32_t type = new_state[0] % MAX_TYPES; @@ -500,3 +501,4 @@ random() } return((long)i); } +}