]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ipaddr/ng_ipaddr.c
Enable WHOIS command to return information about services
[ngircd-alex.git] / src / ipaddr / ng_ipaddr.c
index b412cc83af6e2789b03b2e34f7b74b4c962f8f1c..af524d091fa569dd874559a3f032f5dcc0cfde6d 100644 (file)
@@ -30,6 +30,9 @@ ng_ipaddr_init(ng_ipaddr_t *addr, const char *ip_str, UINT16 port)
 
        memset(&hints, 0, sizeof(hints));
        hints.ai_flags = AI_NUMERICHOST;
+#ifndef WANT_IPV6      /* do not convert ipv6 addresses */
+       hints.ai_family = AF_INET;
+#endif
 
        /* some getaddrinfo implementations require that ai_socktype is set. */
        hints.ai_socktype = SOCK_STREAM;
@@ -38,7 +41,6 @@ ng_ipaddr_init(ng_ipaddr_t *addr, const char *ip_str, UINT16 port)
        snprintf(portstr, sizeof(portstr), "%u", (unsigned int) port);
 
        ret = getaddrinfo(ip_str, portstr, &hints, &res0);
-       assert(ret == 0);
        if (ret != 0)
                return false;
 
@@ -51,6 +53,10 @@ ng_ipaddr_init(ng_ipaddr_t *addr, const char *ip_str, UINT16 port)
        return ret == 0;
 #else /* HAVE_GETADDRINFO */
        assert(ip_str);
+       memset(addr, 0, sizeof *addr);
+#ifdef HAVE_sockaddr_in_len
+       addr->sin4.sin_len = sizeof(addr->sin4);
+#endif
        addr->sin4.sin_family = AF_INET;
 # ifdef HAVE_INET_ATON
        if (inet_aton(ip_str, &addr->sin4.sin_addr) == 0)
@@ -151,7 +157,8 @@ ng_ipaddr_tostr_r(const ng_ipaddr_t *addr, char *str)
        if (*str == ':') {
                char tmp[NG_INET_ADDRSTRLEN] = "0";
                ret = getnameinfo(sa, ng_ipaddr_salen(addr),
-                               tmp+1, sizeof(tmp) -1, NULL, 0, NI_NUMERICHOST);
+                                 tmp + 1, (socklen_t)sizeof(tmp) - 1,
+                                 NULL, 0, NI_NUMERICHOST);
                if (ret == 0)
                        strlcpy(str, tmp, NG_INET_ADDRSTRLEN);
        }