Mercurial > hg > octave-nkf > gnulib-hg
changeset 10638:28050ad34088
Fix getaddrinfo emulation for systems with struct sockaddr.sa_len.
2008-10-13 Paolo Bonzini <bonzini@gnu.org>
fix getaddrinfo emulation for systems with struct sockaddr.sa_len
* m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Detect
struct sockaddr.sa_len.
* lib/getaddrinfo.c (getaddrinfo): Set it if appropriate.
author | Paolo Bonzini <bonzini@gnu.org> |
---|---|
date | Mon, 13 Oct 2008 19:49:44 +0200 |
parents | 63a8c3a186b9 |
children | 9a77113994f4 |
files | ChangeLog lib/getaddrinfo.c m4/getaddrinfo.m4 |
diffstat | 3 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-13 Paolo Bonzini <bonzini@gnu.org> + + fix getaddrinfo emulation for systems with struct sockaddr.sa_len + * m4/getaddrinfo.m4 (gl_PREREQ_GETADDRINFO): Detect + struct sockaddr.sa_len. + * lib/getaddrinfo.c (getaddrinfo): Set it if appropriate. + 2008-10-13 Simon Josefsson <simon@josefsson.org> * build-aux/pmccabe2html: Add css and css_url parameters.
--- a/lib/getaddrinfo.c +++ b/lib/getaddrinfo.c @@ -301,6 +301,22 @@ tmp->ai_addr->sa_family = he->h_addrtype; tmp->ai_family = he->h_addrtype; +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN + switch (he->h_addrtype) + { +#if HAVE_IPV4 + case AF_INET: + tmp->ai_addr->sa_len = sizeof (struct sockaddr_in); + break; +#endif +#if HAVE_IPV6 + case AF_INET6: + tmp->ai_addr->sa_len = sizeof (struct sockaddr_in6); + break; +#endif + } +#endif + /* FIXME: If more than one address, create linked list of addrinfo's. */ *res = tmp;
--- a/m4/getaddrinfo.m4 +++ b/m4/getaddrinfo.m4 @@ -99,6 +99,11 @@ AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + dnl Including sys/socket.h is wrong for Windows, but Windows does not + 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_DECLS([getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo],,,[ /* sys/types.h is not needed according to POSIX, but the