Use inet_aton on Windows (Older windows versions do not have enet_ntop).
authorDamien Stuart <dstuart@dstuart.org>
Sun, 5 May 2013 20:37:18 +0000 (16:37 -0400)
committerDamien Stuart <dstuart@dstuart.org>
Sun, 5 May 2013 20:37:18 +0000 (16:37 -0400)
client/utils.c

index cb99e31..446a3b2 100644 (file)
@@ -212,7 +212,12 @@ resolve_dest_adr(const char *dns_str, struct addrinfo *hints, char *ip_str, size
     int                 error;      /* Function error return code */
     struct addrinfo    *result;     /* Result of getaddrinfo() */
     struct addrinfo    *rp;         /* Element of the linked list returned by getaddrinfo() */
+#ifdef WIN32
+       struct sockaddr_in *in;
+       char                       *win_ip;
+#else
     struct sockaddr_in *sai_remote; /* Remote host information as a sockaddr_in structure */
+#endif
 
     /* Try to resolve the host name */
     error = getaddrinfo(dns_str, NULL, hints, &result);
@@ -226,11 +231,20 @@ resolve_dest_adr(const char *dns_str, struct addrinfo *hints, char *ip_str, size
         /* Go through the linked list of addrinfo structures */
         for (rp = result; rp != NULL; rp = rp->ai_next)
         {
-            sai_remote = (struct sockaddr_in *)get_in_addr((struct sockaddr *)(rp->ai_addr));
-
             memset(ip_str, 0, ip_bufsize);
+#ifdef WIN32
+                       /* On older Windows systems (anything before Vista, server 2008),
+                        * we use inet_ntoa for now.
+                       */
+                       in = (struct sockaddr_in*)(rp->ai_addr);
+                       win_ip = inet_ntoa(in->sin_addr);
+
+                       if (win_ip != NULL && (strlcpy(ip_str, win_ip, ip_bufsize) > 0))
+#else
+            sai_remote = (struct sockaddr_in *)get_in_addr((struct sockaddr *)(rp->ai_addr));
             if (inet_ntop(rp->ai_family, sai_remote, ip_str, ip_bufsize) != NULL)
-            {
+#endif
+                       {
                 error = 0;
                 break;
             }