-for ac_func in crypt getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul
+
+for ac_func in crypt erand48 getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul
do
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
;;
esac
-case " $LIBOBJS " in
- *" rand.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS rand.$ac_objext"
- ;;
-esac
-
case " $LIBOBJS " in
*" win32env.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS win32env.$ac_objext"
dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.604 2009/07/02 18:55:40 petere Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.605 2009/07/16 17:43:52 tgl Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
pgac_save_LIBS="$LIBS"
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
-AC_REPLACE_FUNCS([crypt getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul])
+AC_REPLACE_FUNCS([crypt erand48 getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul])
case $host_os in
AC_REPLACE_FUNCS(gettimeofday)
AC_LIBOBJ(kill)
AC_LIBOBJ(open)
-AC_LIBOBJ(rand)
AC_LIBOBJ(win32env)
AC_LIBOBJ(win32error)
AC_DEFINE([HAVE_SYMLINK], 1,
/* Define to 1 if you have the <editline/readline.h> header file. */
#undef HAVE_EDITLINE_READLINE_H
+/* Define to 1 if you have the `erand48' function. */
+#undef HAVE_ERAND48
+
/* Define to 1 if you have the `ERR_set_mark' function. */
#undef HAVE_ERR_SET_MARK
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/port.h,v 1.125 2009/06/11 14:49:08 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/port.h,v 1.126 2009/07/16 17:43:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#define popen(a,b) _popen(a,b)
#define pclose(a) _pclose(a)
-/* Missing rand functions */
-extern long lrand48(void);
-extern void srand48(long seed);
-
/* New versions of MingW have gettimeofday, old mingw and msvc don't */
#ifndef HAVE_GETTIMEOFDAY
/* Last parameter not used */
#endif
#endif
+#ifndef HAVE_ERAND48
+/* we assume all of these are present or missing together */
+extern double erand48(unsigned short xseed[3]);
+extern long lrand48(void);
+extern void srand48(long seed);
+#endif
+
#ifndef HAVE_FSEEKO
#define fseeko(a, b, c) fseek(a, b, c)
#define ftello(a) ftell(a)
-/*
- * $PostgreSQL: pgsql/src/port/rand.c,v 1.6 2009/06/11 14:49:15 momjian Exp $
+/*-------------------------------------------------------------------------
*
- *-------------------------------------------------------------------------
+ * erand48.c
+ *
+ * This file supplies versions of erand48(), lrand48(), and srand48()
+ * for machines that lack them. (These are all the members of the drand48
+ * family that Postgres currently requires. We name the file after erand48
+ * because that is the one that configure tests for.)
*
- * rand.c
- * Missing rand implementations for Win32
*
- *-------------------------------------------------------------------------
- */
-#include "c.h"
-
-/*
* Copyright (c) 1993 Martin Birgmeier
* All rights reserved.
*
* This software is provided ``as is'', and comes with no warranties
* of any kind. I shall in no event be liable for anything that happens
* to anyone/anything when using this software.
+ *
+ * IDENTIFICATION
+ * $PostgreSQL: pgsql/src/port/erand48.c,v 1.1 2009/07/16 17:43:52 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
*/
+
+#include "c.h"
+
+#include <math.h>
+
#define RAND48_SEED_0 (0x330e)
#define RAND48_SEED_1 (0xabcd)
#define RAND48_SEED_2 (0x1234)
#define RAND48_MULT_2 (0x0005)
#define RAND48_ADD (0x000b)
-unsigned short _rand48_seed[3] = {
+static unsigned short _rand48_seed[3] = {
RAND48_SEED_0,
RAND48_SEED_1,
RAND48_SEED_2
};
-unsigned short _rand48_mult[3] = {
+static unsigned short _rand48_mult[3] = {
RAND48_MULT_0,
RAND48_MULT_1,
RAND48_MULT_2
};
-unsigned short _rand48_add = RAND48_ADD;
+static unsigned short _rand48_add = RAND48_ADD;
+
static void
_dorand48(unsigned short xseed[3])
xseed[2] = (unsigned short) accu;
}
+
+double
+erand48(unsigned short xseed[3])
+{
+ _dorand48(xseed);
+ return ldexp((double) xseed[0], -48) +
+ ldexp((double) xseed[1], -32) +
+ ldexp((double) xseed[2], -16);
+}
+
long
lrand48(void)
{
#
# Package that generates build files for msvc build
#
-# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.40 2009/06/05 18:29:56 adunstan Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.41 2009/07/16 17:43:52 tgl Exp $
#
use Carp;
use Win32;
our @pgportfiles = qw(
chklocale.c crypt.c fseeko.c getrusage.c inet_aton.c random.c srandom.c
- getaddrinfo.c gettimeofday.c kill.c open.c rand.c
+ getaddrinfo.c gettimeofday.c kill.c open.c erand48.c
snprintf.c strlcat.c strlcpy.c copydir.c dirmod.c exec.c noblock.c path.c pipe.c
pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c sprompt.c thread.c
getopt.c getopt_long.c dirent.c rint.c win32env.c win32error.c);