Procházet zdrojové kódy

* Fixed a solaris random() bug

svn: 1426
Bryan Drewery před 21 roky
rodič
revize
279ffa0aec
5 změnil soubory, kde provedl 114 přidání a 17 odebrání
  1. 3 0
      autotools/configure.ac
  2. 16 0
      autotools/includes/acinclude.m4
  3. 3 0
      config.h.in
  4. 91 15
      configure
  5. 1 2
      src/eggdrop.h

+ 3 - 0
autotools/configure.ac

@@ -56,6 +56,9 @@ EGG_CHECK_DNS
 EGG_IPV6_OPTIONS
 EGG_CHECK_SOCKLEN_T
 
+# Check for inconsistent random() functions
+EGG_CHECK_RANDOM_MAX
+
 # Create static binaries
 EGG_CHECK_CCSTATIC
 AC_SUBST(CCDEBUG)dnl

+ 16 - 0
autotools/includes/acinclude.m4

@@ -613,3 +613,19 @@ AC_MSG_RESULT([not found])
 
 ])
 dnl
+
+AC_DEFUN([EGG_CHECK_RANDOM_MAX],
+[
+  AC_MSG_CHECKING([for random limit])
+
+  case "$egg_cv_var_system_type" in
+    SunOS)         RMAX=0x7FFFFFFF
+       ;;
+       *)                      RMAX=RAND_MAX
+       ;;
+  esac
+
+  AC_MSG_RESULT([$RMAX])
+
+  AC_DEFINE_UNQUOTED(RANDOM_MAX, $RMAX, [Define limit of random() function.])
+])

+ 3 - 0
config.h.in

@@ -239,6 +239,9 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
+/* Define limit of random() function. */
+#undef RANDOM_MAX
+
 /* The size of a `int', as computed by sizeof. */
 #undef SIZEOF_INT
 

+ 91 - 15
configure

@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 1.35 .
+# From configure.ac Revision: 1.36 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.59.
 #
@@ -2184,14 +2184,13 @@ fi
 rm -f conftest*
 
 
-
-        echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
-echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
-if test "${ac_cv_lib_cposix_strerror+set}" = set; then
+echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
+if test "${ac_cv_search_strerror+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix  $LIBS"
+  ac_func_search_save_LIBS=$LIBS
+ac_cv_search_strerror=no
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -2235,24 +2234,79 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_lib_cposix_strerror=yes
+  ac_cv_search_strerror="none required"
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_lib_cposix_strerror=no
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+if test "$ac_cv_search_strerror" = no; then
+  for ac_lib in cposix; do
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_strerror="-l$ac_lib"
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  done
 fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6
-if test $ac_cv_lib_cposix_strerror = yes; then
-  LIBS="$LIBS -lcposix"
+LIBS=$ac_func_search_save_LIBS
 fi
+echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6
+if test "$ac_cv_search_strerror" != no; then
+  test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
 
-
+fi
 
 echo "$as_me:$LINENO: checking for ANSI C header files" >&5
 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
@@ -4567,6 +4621,28 @@ echo "${ECHO_T}no" >&6
 fi
 
 
+# Check for inconsistent random() functions
+
+  echo "$as_me:$LINENO: checking for random limit" >&5
+echo $ECHO_N "checking for random limit... $ECHO_C" >&6
+
+  case "$egg_cv_var_system_type" in
+    SunOS)         RMAX=0x7FFFFFFF
+       ;;
+       *)                      RMAX=RAND_MAX
+       ;;
+  esac
+
+  echo "$as_me:$LINENO: result: $RMAX" >&5
+echo "${ECHO_T}$RMAX" >&6
+
+
+cat >>confdefs.h <<_ACEOF
+#define RANDOM_MAX $RMAX
+_ACEOF
+
+
+
 # Create static binaries
 if test -z "$no_static"
 then

+ 1 - 2
src/eggdrop.h

@@ -104,8 +104,7 @@
  * modulo would probably be sufficient but on systems lacking random(),
  * the function will be just renamed rand().
  */
-#define randint(n) (unsigned long) (random() / (RAND_MAX + 1.0) * n)
-
+#define randint(n) (unsigned long) (random() / (RANDOM_MAX + 1.0) * n)
 
 /***********************************************************************/