diff options
author | Bruno Haible <bruno@clisp.org> | 2006-06-29 15:16:56 +0000 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2006-06-29 15:16:56 +0000 |
commit | 7efb4c68d9c9097953b6403fd4e8439072a4cd75 (patch) | |
tree | d51f67a391c1667ebea37c89b6fc178553c1bd29 /lib/getaddrinfo.c | |
parent | 370b87a4cf8b440ebcc8535c799ee97fa41c5d6b (diff) | |
download | gnulib-7efb4c68d9c9097953b6403fd4e8439072a4cd75.tar.gz |
Various small tweaks.
Diffstat (limited to 'lib/getaddrinfo.c')
-rw-r--r-- | lib/getaddrinfo.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/getaddrinfo.c b/lib/getaddrinfo.c index a058949a40..ccc9d2ad55 100644 --- a/lib/getaddrinfo.c +++ b/lib/getaddrinfo.c @@ -40,11 +40,15 @@ #include "strdup.h" -#ifdef _WIN32 -typedef void WSAAPI (*freeaddrinfo_func) (struct addrinfo*); +#if defined _WIN32 || defined __WIN32__ +# define WIN32_NATIVE +#endif + +#ifdef WIN32_NATIVE typedef int WSAAPI (*getaddrinfo_func) (const char*, const char*, const struct addrinfo*, struct addrinfo**); +typedef void WSAAPI (*freeaddrinfo_func) (struct addrinfo*); typedef int WSAAPI (*getnameinfo_func) (const struct sockaddr*, socklen_t, char*, DWORD, char*, DWORD, int); @@ -53,7 +57,8 @@ static getaddrinfo_func getaddrinfo_ptr = NULL; static freeaddrinfo_func freeaddrinfo_ptr = NULL; static getnameinfo_func getnameinfo_ptr = NULL; -int use_win32_p (void) +static int +use_win32_p (void) { static int done = 0; HMODULE h; @@ -128,7 +133,7 @@ getaddrinfo (const char *restrict nodename, }; #endif -#ifdef _WIN32 +#ifdef WIN32_NATIVE if (use_win32_p ()) return getaddrinfo_ptr (nodename, servname, hints, res); #endif @@ -162,8 +167,10 @@ getaddrinfo (const char *restrict nodename, if (!se) { char *c; + if (!(*servname >= '0' && *servname <= '9)) + return EAI_NONAME; port = strtoul (servname, &c, 10); - if (*c) + if (*c || port > 0xffff) return EAI_NONAME; port = htons (port); } @@ -285,7 +292,7 @@ getaddrinfo (const char *restrict nodename, void freeaddrinfo (struct addrinfo *ai) { -#ifdef _WIN32 +#ifdef WIN32_NATIVE if (use_win32_p ()) return freeaddrinfo_ptr (ai); #endif @@ -307,7 +314,7 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen, char *restrict service, socklen_t servicelen, int flags) { -#if _WIN32 +#if WIN32_NATIVE if (use_win32_p ()) return getnameinfo_ptr (sa, salen, node, nodelen, service, servicelen, flags); @@ -347,7 +354,6 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen, #if HAVE_IPV4 case AF_INET: if (!inet_ntop (AF_INET, - (const void *) &(((const struct sockaddr_in *) sa)->sin_addr), node, nodelen)) return EAI_SYSTEM; @@ -357,7 +363,6 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen, #if HAVE_IPV6 case AF_INET6: if (!inet_ntop (AF_INET6, - (const void *) &(((const struct sockaddr_in6 *) sa)->sin6_addr), node, nodelen)) return EAI_SYSTEM; |