Various small tweaks.
authorBruno Haible <bruno@clisp.org>
Thu, 29 Jun 2006 15:16:56 +0000 (15:16 +0000)
committerBruno Haible <bruno@clisp.org>
Thu, 29 Jun 2006 15:16:56 +0000 (15:16 +0000)
lib/ChangeLog
lib/getaddrinfo.c
lib/getaddrinfo.h

index e2f13308c427023af7caca689e6f4042ee5439d4..8ede6b46ce8654022b9a2be5deeeb1ab6210ab27 100644 (file)
@@ -1,3 +1,12 @@
+2006-06-28  Bruno Haible  <bruno@clisp.org>
+
+       * getaddrinfo.h: Fix POSIX URL.
+       * getaddrinfo.c (WIN32_NATIVE): New macro. Use it instead of _WIN32.
+       (use_win32_p): Make static.
+       (getaddrinfo): Reject service name if it is empty or does not consist
+       solely of decimal digits, or if its value is > 65535.
+       (getnameinfo): Remove useless casts.
+
 2006-06-28  Derek R. Price  <derek@ximbiot.com>
 
        * savedir.c (CLOSEDIR): Remove.  All uses changed to closedir.
index a058949a40d8f061be33c6bb4331f5718837273f..ccc9d2ad558951f5adb95a81d8e794ea87340b2a 100644 (file)
 
 #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;
index 72aa8628be2a301df2e24dcef718dc9d2a56b7cd..bbf71f22e4b76ad59cde27c99b62190a68f20119 100644 (file)
@@ -134,7 +134,7 @@ extern const char *gai_strerror (int ecode);
 # if !HAVE_DECL_GETNAMEINFO
 /* Convert socket address to printable node and service names.
    For more details, see the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/gai_strerror.html>.  */
+   <http://www.opengroup.org/susv3xsh/getnameinfo.html>.  */
 extern int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen,
                       char *restrict node, socklen_t nodelen,
                       char *restrict service, socklen_t servicelen,