[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
getaddrinfo, netdb, canon-host
From: |
Simon Josefsson |
Subject: |
getaddrinfo, netdb, canon-host |
Date: |
Wed, 15 Oct 2008 15:33:59 +0200 |
User-agent: |
Gnus/5.110011 (No Gnus v0.11) Emacs/22.2 (gnu/linux) |
This moves the getaddrinfo.h declarations to netdb.h. Because this
involves changing canon-host, I haven't pushed this. Jim, what do you
think of this approach?
The patch also fixes some problems with the netdb.h replacement: for
example, netdb.h needs to include sys/socket.h on MinGW to provide
typical netdb.h declarations such as 'struct hostent'.
/Simon
diff --git a/ChangeLog b/ChangeLog
index 721d69e..f0b4cd4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2008-10-15 Simon Josefsson <address@hidden>
+ * lib/netdb.in.h: Add declarations from getaddrinfo.h.
+ * lib/getaddrinfo.h: Remove file.
+ * modules/getaddrinfo: Reflect move from getaddrinfo.h to netdb.h.
+ * modules/netdb: Likewise. Depend on sys_socket for MinGW.
+ * m4/getaddrinfo.m4: Don't check for netdb.h.
+ * lib/canon-host.c: Include netdb.h instead of getaddrinfo.h.
+ * lib/getaddrinfo.c: Likewise.
+ * lib/gai_strerror.c: Likewise. Drop HAVE_NETDB_H check.
+ * NEWS: Mention change.
+
+2008-10-15 Simon Josefsson <address@hidden>
+
* modules/netdb, modules/netdb-tests: New file.
* m4/netdb_h.m4: New file.
* lib/netdb.in.h: Add, currently just an empty file pending
diff --git a/NEWS b/NEWS
index ef04cf4..3ef6642 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,9 @@ User visible incompatible changes
Date Modules Changes
+2008-10-15 getaddrinfo The include file is changed from "getaddrinfo.h"
+ to <netdb.h>.
+
2008-09-28 sockets When using this module, you now need to link with
$(LIBSOCKET).
diff --git a/lib/canon-host.c b/lib/canon-host.c
index b5aa1b7..df9cbbf 100644
--- a/lib/canon-host.c
+++ b/lib/canon-host.c
@@ -1,6 +1,6 @@
/* Host name canonicalization
- Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
Written by Derek Price <address@hidden>.
@@ -22,8 +22,7 @@
#include "canon-host.h"
#include <string.h>
-
-#include "getaddrinfo.h"
+#include <netdb.h>
/* Store the last error for the single-threaded version of this function. */
static int last_cherror;
diff --git a/lib/gai_strerror.c b/lib/gai_strerror.c
index aa733d6..60042e8 100644
--- a/lib/gai_strerror.c
+++ b/lib/gai_strerror.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006 Free Software Foundation,
Inc.
+/* Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006, 2008 Free Software
Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <address@hidden>, 1997.
@@ -18,13 +18,10 @@
#ifndef _LIBC
# include <config.h>
-# include "getaddrinfo.h"
#endif
#include <stdio.h>
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
+#include <netdb.h>
#ifdef _LIBC
# include <libintl.h>
diff --git a/lib/getaddrinfo.c b/lib/getaddrinfo.c
index e4ed821..6a36bf0 100644
--- a/lib/getaddrinfo.c
+++ b/lib/getaddrinfo.c
@@ -19,7 +19,7 @@
#include <config.h>
-#include "getaddrinfo.h"
+#include <netdb.h>
#if HAVE_NETINET_IN_H
# include <netinet/in.h>
diff --git a/lib/netdb.in.h b/lib/netdb.in.h
index 0aa0691..8328411 100644
--- a/lib/netdb.in.h
+++ b/lib/netdb.in.h
@@ -1,5 +1,6 @@
/* Provide a netdb.h header file for systems lacking it (read: MinGW).
- Copyright (C) 2008 Free Software Foundation, Inc.
+ Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2008
+ Free Software Foundation, Inc.
Written by Simon Josefsson.
This program is free software; you can redistribute it and/or modify
@@ -16,9 +17,10 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-/* This file is supposed to be used on platforms that lack <netdb.h>.
- It is intended to provide definitions and prototypes needed by an
- application. */
+/* This file is supposed to be used on platforms that lack <netdb.h>,
+ and on platforms where <sys/socket.h> does not provide all
+ necessary definitions. It is intended to provide definitions and
+ prototypes needed by an application. */
#ifndef _GL_NETDB_H
@@ -34,15 +36,140 @@
#ifndef _GL_NETDB_H
#define _GL_NETDB_H
-#if @HAVE_NETDB_H@
-
-/* Declarations for a platform that has <netdb.h>. */
-
-#else
-
-/* Declarations for a platform that has <netdb.h>. */
-
-#endif /* HAVE_NETDB_H */
+/* Get netdb.h definitions such as struct hostent for MinGW. */
+#include <sys/socket.h>
+
+#if @GNULIB_GETADDRINFO@
+
+# ifndef HAVE_STRUCT_ADDRINFO
+
+/* Structure to contain information about address of a service provider. */
+struct addrinfo
+{
+ int ai_flags; /* Input flags. */
+ int ai_family; /* Protocol family for socket. */
+ int ai_socktype; /* Socket type. */
+ int ai_protocol; /* Protocol for socket. */
+ socklen_t ai_addrlen; /* Length of socket address. */
+ struct sockaddr *ai_addr; /* Socket address for socket. */
+ char *ai_canonname; /* Canonical name for service location. */
+ struct addrinfo *ai_next; /* Pointer to next in list. */
+};
+# endif
+
+/* Possible values for `ai_flags' field in `addrinfo' structure. */
+# ifndef AI_PASSIVE
+# define AI_PASSIVE 0x0001 /* Socket address is intended for `bind'. */
+# endif
+# ifndef AI_CANONNAME
+# define AI_CANONNAME 0x0002 /* Request for canonical name. */
+# endif
+# ifndef AI_NUMERICSERV
+# define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */
+# endif
+
+# if 0
+/* The commented out definitions below are not yet implemented in the
+ GNULIB getaddrinfo() replacement, so are not yet needed and may, in fact,
+ cause conflicts on systems with a getaddrinfo() function which does not
+ define them.
+
+ If they are restored, be sure to protect the definitions with #ifndef. */
+# define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */
+# define AI_V4MAPPED 0x0008 /* IPv4 mapped addresses are acceptable. */
+# define AI_ALL 0x0010 /* Return IPv4 mapped and IPv6
addresses. */
+# define AI_ADDRCONFIG 0x0020 /* Use configuration of this host to
choose
+ returned address type.. */
+# endif /* 0 */
+
+/* Error values for `getaddrinfo' function. */
+# ifndef EAI_BADFLAGS
+# define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */
+# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */
+# define EAI_AGAIN -3 /* Temporary failure in name resolution. */
+# define EAI_FAIL -4 /* Non-recoverable failure in name res. */
+# define EAI_NODATA -5 /* No address associated with NAME. */
+# define EAI_FAMILY -6 /* `ai_family' not supported. */
+# define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */
+# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */
+# define EAI_MEMORY -10 /* Memory allocation failure. */
+# endif
+
+/* Since EAI_NODATA is deprecated by RFC3493, some systems (at least
+ FreeBSD, which does define EAI_BADFLAGS) have removed the definition
+ in favor of EAI_NONAME. */
+# if !defined EAI_NODATA && defined EAI_NONAME
+# define EAI_NODATA EAI_NONAME
+# endif
+
+# ifndef EAI_OVERFLOW
+/* Not defined on mingw32. */
+# define EAI_OVERFLOW -12 /* Argument buffer overflow. */
+# endif
+# ifndef EAI_ADDRFAMILY
+/* Not defined on mingw32. */
+# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
+# endif
+# ifndef EAI_SYSTEM
+/* Not defined on mingw32. */
+# define EAI_SYSTEM -11 /* System error returned in `errno'. */
+# endif
+
+# ifdef __USE_GNU
+# ifndef EAI_INPROGRESS
+# define EAI_INPROGRESS -100 /* Processing request in progress. */
+# define EAI_CANCELED -101 /* Request canceled. */
+# define EAI_NOTCANCELED -102 /* Request not canceled. */
+# define EAI_ALLDONE -103 /* All requests done. */
+# define EAI_INTR -104 /* Interrupted by a signal. */
+# define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
+# endif
+# endif
+
+# if !HAVE_DECL_GETADDRINFO
+/* Translate name of a service location and/or a service name to set of
+ socket addresses.
+ For more details, see the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
+extern int getaddrinfo (const char *restrict nodename,
+ const char *restrict servname,
+ const struct addrinfo *restrict hints,
+ struct addrinfo **restrict res);
+# endif
+
+# if !HAVE_DECL_FREEADDRINFO
+/* Free `addrinfo' structure AI including associated storage.
+ For more details, see the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
+extern void freeaddrinfo (struct addrinfo *ai);
+# endif
+
+# if !HAVE_DECL_GAI_STRERROR
+/* Convert error return from getaddrinfo() to a string.
+ For more details, see the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/gai_strerror.html>. */
+extern const char *gai_strerror (int ecode);
+# endif
+
+# if !HAVE_DECL_GETNAMEINFO
+/* Convert socket address to printable node and service names.
+ For more details, see the POSIX:2001 specification
+ <http://www.opengroup.org/susv3xsh/getnameinfo.html>. */
+extern int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen,
+ char *restrict node, socklen_t nodelen,
+ char *restrict service, socklen_t servicelen,
+ int flags);
+# endif
+
+/* Possible flags for getnameinfo. */
+# ifndef NI_NUMERICHOST
+# define NI_NUMERICHOST 1
+# endif
+# ifndef NI_NUMERICSERV
+# define NI_NUMERICSERV 2
+# endif
+
+#endif /* @GNULIB_GETADDRINFO@ */
#endif /* _GL_NETDB_H */
#endif /* _GL_NETDB_H */
diff --git a/m4/getaddrinfo.m4 b/m4/getaddrinfo.m4
index 52135ba..c184c6f 100644
--- a/m4/getaddrinfo.m4
+++ b/m4/getaddrinfo.m4
@@ -1,5 +1,5 @@
-# getaddrinfo.m4 serial 15
-dnl Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# getaddrinfo.m4 serial 16
+dnl Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -7,10 +7,9 @@ dnl with or without modifications, as long as this notice is
preserved.
AC_DEFUN([gl_GETADDRINFO],
[
AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H
+ AC_REQUIRE([gl_HEADER_NETDB])dnl for HAVE_NETDB_H
AC_MSG_NOTICE([checking how to do getaddrinfo, freeaddrinfo and getnameinfo])
- AC_CHECK_HEADERS_ONCE(netdb.h)
-
AC_SEARCH_LIBS(getaddrinfo, [nsl socket])
AC_CACHE_CHECK([for getaddrinfo], [gl_cv_func_getaddrinfo], [
AC_TRY_LINK([
@@ -72,7 +71,7 @@ AC_DEFUN([gl_GETADDRINFO],
gl_PREREQ_GETADDRINFO
])
-# Prerequisites of lib/getaddrinfo.h and lib/getaddrinfo.c.
+# Prerequisites of lib/getaddrinfo.c.
AC_DEFUN([gl_PREREQ_GETADDRINFO], [
AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H
AC_SEARCH_LIBS(gethostbyname, [inet nsl])
@@ -104,7 +103,7 @@ AC_DEFUN([gl_PREREQ_GETADDRINFO], [
dnl have sa_len so the result is correct anyway.
AC_CHECK_MEMBERS([struct sockaddr.sa_len], , , [#include <sys/socket.h>])
- AC_CHECK_HEADERS_ONCE(netinet/in.h netdb.h)
+ AC_CHECK_HEADERS_ONCE(netinet/in.h)
AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo],,,[
/* sys/types.h is not needed according to POSIX, but the
sys/socket.h in i386-unknown-freebsd4.10 and
diff --git a/m4/netdb_h.m4 b/m4/netdb_h.m4
index d6d729f..f365145 100644
--- a/m4/netdb_h.m4
+++ b/m4/netdb_h.m4
@@ -39,5 +39,5 @@ AC_DEFUN([gl_NETDB_MODULE_INDICATOR],
AC_DEFUN([gl_NETDB_H_DEFAULTS],
[
- :
+ GNULIB_GETADDRINFO=0; AC_SUBST([GNULIB_GETADDRINFO])
])
diff --git a/modules/getaddrinfo b/modules/getaddrinfo
index 84a9a96..1abd4e5 100644
--- a/modules/getaddrinfo
+++ b/modules/getaddrinfo
@@ -2,7 +2,6 @@ Description:
getaddrinfo() function: Get address information.
Files:
-lib/getaddrinfo.h
lib/getaddrinfo.c
lib/gai_strerror.c
m4/getaddrinfo.m4
@@ -15,14 +14,16 @@ snprintf
socklen
stdbool
sys_socket
+netdb
configure.ac:
gl_GETADDRINFO
+gl_NETDB_MODULE_INDICATOR([getaddrinfo])
Makefile.am:
Include:
-"getaddrinfo.h"
+<netdb.h>
License:
LGPLv2+
diff --git a/modules/netdb b/modules/netdb
index 21e4ff4..5165b56 100644
--- a/modules/netdb
+++ b/modules/netdb
@@ -7,6 +7,7 @@ m4/netdb_h.m4
Depends-on:
include_next
+sys_socket
configure.ac:
gl_HEADER_NETDB
@@ -23,6 +24,7 @@ netdb.h: netdb.in.h
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \
-e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \
+ -e 's|@''GNULIB_GETADDRINFO''@|$(GNULIB_GETADDRINFO)|g' \
< $(srcdir)/netdb.in.h; \
} > address@hidden
mv address@hidden $@
diff --git a/tests/test-getaddrinfo.c b/tests/test-getaddrinfo.c
index bfdb9cf..a887cb1 100644
--- a/tests/test-getaddrinfo.c
+++ b/tests/test-getaddrinfo.c
@@ -18,7 +18,7 @@
/* Written by Simon Josefsson. */
#include <config.h>
-#include "getaddrinfo.h"
+#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
- getaddrinfo, netdb, canon-host,
Simon Josefsson <=
- Re: getaddrinfo, netdb, canon-host, Simon Josefsson, 2008/10/16
- Re: getaddrinfo, netdb, canon-host, Paolo Bonzini, 2008/10/16
- Re: getaddrinfo, netdb, canon-host, Simon Josefsson, 2008/10/16
- Re: getaddrinfo, netdb, canon-host, Simon Josefsson, 2008/10/20
- Re: getaddrinfo, netdb, Bruno Haible, 2008/10/20
- Re: getaddrinfo, netdb, Simon Josefsson, 2008/10/20
- Re: getaddrinfo, netdb, canon-host, Simon Josefsson, 2008/10/20
- Re: getaddrinfo, netdb, canon-host, Jim Meyering, 2008/10/20
- Re: getaddrinfo, netdb, canon-host, Jim Meyering, 2008/10/20
- Re: getaddrinfo, netdb, canon-host, Simon Josefsson, 2008/10/20