From 8cc45616dc646bd4b5301ee32695d2a48013642c Mon Sep 17 00:00:00 2001 From: Heikki Lindholm Date: Fri, 9 Apr 2010 15:18:42 +0000 Subject: [PATCH] better: sysconf seems to be the preferred way --- configure.ac | 2 +- src/hostlist/hostlist-server.c | 19 +++++++++++++++++-- src/include/platform.h | 6 ------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 9a86199bd..d02d03896 100644 --- a/configure.ac +++ b/configure.ac @@ -573,7 +573,7 @@ AC_FUNC_VPRINTF AC_HEADER_SYS_WAIT AC_TYPE_OFF_T AC_TYPE_UID_T -AC_CHECK_FUNCS([floor gethostname memmove rmdir strncasecmp strrchr strtol atoll dup2 fdatasync ftruncate gettimeofday memset mkdir mkfifo select socket strcasecmp strchr strdup strerror strstr clock_gettime getrusage rand uname setlocale getcwd mktime gmtime_r gmtime strlcpy strlcat ftruncate stat64 sbrk mmap mremap setrlimit gethostbyaddr initgroups getifaddrs freeifaddrs getnameinfo getaddrinfo inet_ntoa localtime_r nl_langinfo putenv realpath strndup gethostbyname2 gethostbyname]) +AC_CHECK_FUNCS([floor gethostname memmove rmdir strncasecmp strrchr strtol atoll dup2 fdatasync ftruncate gettimeofday memset mkdir mkfifo select socket strcasecmp strchr strdup strerror strstr clock_gettime getrusage rand uname setlocale getcwd mktime gmtime_r gmtime strlcpy strlcat ftruncate stat64 sbrk mmap mremap setrlimit sysconf gethostbyaddr initgroups getifaddrs freeifaddrs getnameinfo getaddrinfo inet_ntoa localtime_r nl_langinfo putenv realpath strndup gethostbyname2 gethostbyname]) # restore LIBS LIBS=$SAVE_LIBS diff --git a/src/hostlist/hostlist-server.c b/src/hostlist/hostlist-server.c index 9e0307ec0..f3f92e9fb 100644 --- a/src/hostlist/hostlist-server.c +++ b/src/hostlist/hostlist-server.c @@ -104,6 +104,11 @@ struct HostSet char *data; }; +/** + * Local max hostname length (some platforms use sysconf() for it) + */ +static int max_hostname_length; + /** * Task that will produce a new response object. */ @@ -400,11 +405,11 @@ adv_create_message ( const struct GNUNET_PeerIdentity * peer, unsigned long long port; char *uri; - char hostname[HOST_NAME_MAX]; + char hostname[max_hostname_length + 1]; char *protocol = "http://"; char *port_s = GNUNET_malloc(6 * sizeof(char)); - if (0 != gethostname (hostname, sizeof (hostname) - 1)) + if (0 != gethostname (hostname, sizeof (hostname))) { GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "Could not get system's hostname, unable to create advertisement message"); @@ -613,6 +618,16 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, { unsigned long long port; +#if HAVE_SYSCONF && defined(_SC_HOST_NAME_MAX) + max_hostname_length = sysconf(_SC_HOST_NAME_MAX); + if (-1 == max_hostname_length) + return GNUNET_SYSERR; +#elif defined(HOST_NAME_MAX) + max_hostname_length = HOST_NAME_MAX; +#else + max_hostname_length = 255; /* sensible default? */ +#endif + sched = s; cfg = c; stats = st; diff --git a/src/include/platform.h b/src/include/platform.h index 7a31f4fa7..7bf2b2f8f 100644 --- a/src/include/platform.h +++ b/src/include/platform.h @@ -191,17 +191,11 @@ #endif #ifdef FREEBSD -#ifndef HOST_NAME_MAX -#define HOST_NAME_MAX MAXHOSTNAMELEN -#endif #define __BYTE_ORDER BYTE_ORDER #define __BIG_ENDIAN BIG_ENDIAN #endif #ifdef DARWIN -#ifndef HOST_NAME_MAX -#define HOST_NAME_MAX MAXHOSTNAMELEN -#endif #define __BYTE_ORDER BYTE_ORDER #define __BIG_ENDIAN BIG_ENDIAN /* not available on darwin, override configure */ -- 2.25.1