]> git.pond.sub.org Git - empserver/commitdiff
(inet_ntop) [_WIN32]: Improve the error checking for getnameinfo().
authorRon Koenderink <rkoenderink@yahoo.ca>
Fri, 24 Aug 2007 21:46:32 +0000 (21:46 +0000)
committerRon Koenderink <rkoenderink@yahoo.ca>
Fri, 24 Aug 2007 21:46:32 +0000 (21:46 +0000)
src/lib/w32/posixio.c
src/lib/w32/unistd.h

index 6af4b9b74798d32719808aae7a6e237575ab24ac..c332b577279e75900ad06c3a7c63e1de04366272 100644 (file)
@@ -322,31 +322,36 @@ posix_socket(int domain, int type, int protocol)
 
 #ifdef HAVE_GETADDRINFO
 const char *
-inet_ntop(int af, const void *source, char *dest, socklen_t len)
+inet_ntop(int af, const void *src, char *dst, socklen_t len)
 {
-    if (af == AF_INET)
-    {
-       struct sockaddr_in in;
-       memset(&in, 0, sizeof(in));
-       in.sin_family = AF_INET;
-       memcpy(&in.sin_addr, source, sizeof(struct in_addr));
-       getnameinfo((struct sockaddr *)&in,
-                   sizeof(struct sockaddr_in), dest, len,
-                   NULL, 0, NI_NUMERICHOST);
-       return dest;
+    struct sockaddr *sa;
+    struct sockaddr_in sin;
+    struct sockaddr_in6 sin6;
+    size_t salen;
+
+    if (af == AF_INET) {
+       memset(&sin, 0, sizeof(sin));
+       sin.sin_family = af;
+       memcpy(&sin.sin_addr, src, sizeof(sin.sin_addr));
+       sa = (struct sockaddr *)&sin;
+       salen = sizeof(sin);
+    } else if (af == AF_INET6) {
+       memset(&sin6, 0, sizeof(sin6));
+       sin6.sin6_family = af;
+       memcpy(&sin6.sin6_addr, src, sizeof(sin6.sin6_addr));
+       sa = (struct sockaddr *)&sin6;
+       salen = sizeof(sin6);
+    } else {
+       errno = EAFNOSUPPORT;
+       return NULL;
     }
-    else if (af == AF_INET6)
-    {
-       struct sockaddr_in6 in;
-       memset(&in, 0, sizeof(in));
-       in.sin6_family = AF_INET6;
-       memcpy(&in.sin6_addr, source, sizeof(struct in_addr6));
-       getnameinfo((struct sockaddr *)&in,
-                   sizeof(struct sockaddr_in6), dest, len,
-                   NULL, 0, NI_NUMERICHOST);
-       return dest;
+
+    if (getnameinfo(sa, salen, dst, len, NULL, 0, NI_NUMERICHOST)) {
+       errno = EAFNOSUPPORT;
+       return NULL;
     }
-    return NULL;
+
+    return dst;
 }
 #endif
 
index 32aeeb6cd0762477a8468088d0335a6b8dcc2c61..65fca5c6079efe6f8f55ca27451abb7d9f2c9029 100644 (file)
@@ -118,6 +118,7 @@ typedef int socklen_t;
 #define F_SETLK            3
 #define EWOULDBLOCK WSAEWOULDBLOCK
 #define ENOTSOCK    WSAENOTSOCK
+#define EAFNOSUPPORT   WSAEAFNOSUPPORT
 
 struct flock
 {