summaryrefslogtreecommitdiff
path: root/lib/getaddrinfo.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2006-06-29 15:16:56 +0000
committerBruno Haible <bruno@clisp.org>2006-06-29 15:16:56 +0000
commit7efb4c68d9c9097953b6403fd4e8439072a4cd75 (patch)
treed51f67a391c1667ebea37c89b6fc178553c1bd29 /lib/getaddrinfo.c
parent370b87a4cf8b440ebcc8535c799ee97fa41c5d6b (diff)
downloadgnulib-7efb4c68d9c9097953b6403fd4e8439072a4cd75.tar.gz
Various small tweaks.
Diffstat (limited to 'lib/getaddrinfo.c')
-rw-r--r--lib/getaddrinfo.c23
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;