diff options
Diffstat (limited to 'gl/getaddrinfo.c')
-rw-r--r-- | gl/getaddrinfo.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/gl/getaddrinfo.c b/gl/getaddrinfo.c index 04f0ac2..f09cf9e 100644 --- a/gl/getaddrinfo.c +++ b/gl/getaddrinfo.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* Get address information (partial implementation). | 1 | /* Get address information (partial implementation). |
2 | Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006, 2007 Free Software | 2 | Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006, 2007, 2008 Free Software |
3 | Foundation, Inc. | 3 | Foundation, Inc. |
4 | Contributed by Simon Josefsson <simon@josefsson.org>. | 4 | Contributed by Simon Josefsson <simon@josefsson.org>. |
5 | 5 | ||
@@ -19,12 +19,15 @@ | |||
19 | 19 | ||
20 | #include <config.h> | 20 | #include <config.h> |
21 | 21 | ||
22 | #include "getaddrinfo.h" | 22 | #include <netdb.h> |
23 | 23 | ||
24 | #if HAVE_NETINET_IN_H | 24 | #if HAVE_NETINET_IN_H |
25 | # include <netinet/in.h> | 25 | # include <netinet/in.h> |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | /* Get inet_ntop. */ | ||
29 | #include <arpa/inet.h> | ||
30 | |||
28 | /* Get calloc. */ | 31 | /* Get calloc. */ |
29 | #include <stdlib.h> | 32 | #include <stdlib.h> |
30 | 33 | ||
@@ -40,8 +43,6 @@ | |||
40 | #define _(String) gettext (String) | 43 | #define _(String) gettext (String) |
41 | #define N_(String) String | 44 | #define N_(String) String |
42 | 45 | ||
43 | #include "inet_ntop.h" | ||
44 | |||
45 | /* BeOS has AF_INET, but not PF_INET. */ | 46 | /* BeOS has AF_INET, but not PF_INET. */ |
46 | #ifndef PF_INET | 47 | #ifndef PF_INET |
47 | # define PF_INET AF_INET | 48 | # define PF_INET AF_INET |
@@ -300,6 +301,22 @@ getaddrinfo (const char *restrict nodename, | |||
300 | tmp->ai_addr->sa_family = he->h_addrtype; | 301 | tmp->ai_addr->sa_family = he->h_addrtype; |
301 | tmp->ai_family = he->h_addrtype; | 302 | tmp->ai_family = he->h_addrtype; |
302 | 303 | ||
304 | #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN | ||
305 | switch (he->h_addrtype) | ||
306 | { | ||
307 | #if HAVE_IPV4 | ||
308 | case AF_INET: | ||
309 | tmp->ai_addr->sa_len = sizeof (struct sockaddr_in); | ||
310 | break; | ||
311 | #endif | ||
312 | #if HAVE_IPV6 | ||
313 | case AF_INET6: | ||
314 | tmp->ai_addr->sa_len = sizeof (struct sockaddr_in6); | ||
315 | break; | ||
316 | #endif | ||
317 | } | ||
318 | #endif | ||
319 | |||
303 | /* FIXME: If more than one address, create linked list of addrinfo's. */ | 320 | /* FIXME: If more than one address, create linked list of addrinfo's. */ |
304 | 321 | ||
305 | *res = tmp; | 322 | *res = tmp; |
@@ -326,7 +343,7 @@ freeaddrinfo (struct addrinfo *ai) | |||
326 | cur = ai; | 343 | cur = ai; |
327 | ai = ai->ai_next; | 344 | ai = ai->ai_next; |
328 | 345 | ||
329 | if (cur->ai_canonname) free (cur->ai_canonname); | 346 | free (cur->ai_canonname); |
330 | free (cur); | 347 | free (cur); |
331 | } | 348 | } |
332 | } | 349 | } |