changeset 11794:ad491ad80504

Define HOST_NAME_MAX also for the various Unix platforms.
author Bruno Haible <bruno@clisp.org>
date Sat, 08 Aug 2009 11:18:41 +0200
parents d4b2d7a95227
children ab844f6098c1
files ChangeLog doc/posix-headers/limits.texi m4/gethostname.m4
diffstat 3 files changed, 56 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-08-08  Bruno Haible  <bruno@clisp.org>
+
+	* m4/gethostname.m4 (gl_FUNC_GETHOSTNAME): Define HOST_NAME_MAX also
+	for the various Unix platforms.
+	* doc/posix-headers/limits.texi: Update platforms list regarding
+	HOST_NAME_MAX.
+	Reported by Tom G. Christensen <tgc@jupiterrise.com>.
+
 2009-08-07  Jim Meyering  <meyering@redhat.com>
 
 	selinux-at: fix typo in a comment
--- a/doc/posix-headers/limits.texi
+++ b/doc/posix-headers/limits.texi
@@ -8,7 +8,7 @@
 Portability problems fixed by Gnulib:
 @itemize
 The @code{HOST_NAME_MAX} macro is not defined on some platforms:
-mingw.
+MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, Interix 3.5, BeOS.
 @end itemize
 
 Portability problems not fixed by Gnulib:
--- a/m4/gethostname.m4
+++ b/m4/gethostname.m4
@@ -1,4 +1,4 @@
-# gethostname.m4 serial 7
+# gethostname.m4 serial 8
 dnl Copyright (C) 2002, 2008, 2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -43,12 +43,52 @@
   fi
 
   dnl Also provide HOST_NAME_MAX when <limits.h> lacks it.
-  if test "$gl_cv_w32_gethostname" = "yes"; then
-    # <http://msdn.microsoft.com/en-us/library/ms738527.aspx> says:
-    # "if a buffer of 256 bytes is passed in the name parameter and
-    # the namelen parameter is set to 256, the buffer size will always
-    # be adequate."
-    AC_DEFINE([HOST_NAME_MAX], [256],
+  dnl - On most Unix systems, use MAXHOSTNAMELEN from <sys/param.h> instead.
+  dnl - On Solaris, Cygwin, BeOS, use MAXHOSTNAMELEN from <netdb.h> instead.
+  dnl - On mingw, use 256, because
+  dnl   <http://msdn.microsoft.com/en-us/library/ms738527.aspx> says:
+  dnl   "if a buffer of 256 bytes is passed in the name parameter and
+  dnl    the namelen parameter is set to 256, the buffer size will always
+  dnl    be adequate."
+  dnl With this, there is no need to use sysconf (_SC_HOST_NAME_MAX), which
+  dnl is not a compile-time constant.
+  dnl We cannot override <limits.h> using the usual technique, because
+  dnl gl_CHECK_NEXT_HEADERS does not work for <limits.h>. Therefore retrieve
+  dnl the value of HOST_NAME_MAX at configure time.
+  AC_CHECK_HEADERS_ONCE([sys/param.h])
+  AC_CHECK_HEADERS_ONCE([sys/socket.h])
+  AC_CHECK_HEADERS_ONCE([netdb.h])
+  AC_CACHE_CHECK([for HOST_NAME_MAX], [gl_cv_decl_HOST_NAME_MAX], [
+    gl_cv_decl_HOST_NAME_MAX=
+    AC_EGREP_CPP([lucky], [
+#include <limits.h>
+#ifdef HOST_NAME_MAX
+lucky
+#endif
+      ], [gl_cv_decl_HOST_NAME_MAX=yes])
+    if test -z "$gl_cv_decl_HOST_NAME_MAX"; then
+      dnl It's not defined in <limits.h>. Substitute it.
+      if test "$gl_cv_w32_gethostname" = yes; then
+        dnl mingw.
+        gl_cv_decl_HOST_NAME_MAX=256
+      else
+        _AC_COMPUTE_INT([MAXHOSTNAMELEN], [gl_cv_decl_HOST_NAME_MAX], [
+#include <sys/types.h>
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#if HAVE_NETDB_H
+# include <netdb.h>
+#endif
+])
+      fi
+    fi
+  ])
+  if test "$gl_cv_decl_HOST_NAME_MAX" != yes; then
+    AC_DEFINE_UNQUOTED([HOST_NAME_MAX], [$gl_cv_decl_HOST_NAME_MAX],
       [Define HOST_NAME_MAX when <limits.h> does not define it.])
   fi
 ])