don't call freeaddinfo(NULL)
authorVitaly Magerya <vmagerya@gmail.com>
Tue, 22 Mar 2011 19:14:26 +0000 (20:14 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 22 Mar 2011 19:14:26 +0000 (20:14 +0100)
Signed-off-by: Vitaly Magerya <vmagerya@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/inet_common.c
libbb/xconnect.c
networking/nslookup.c

index 6f585ebd901a0995c8673f86787b989436c0e536..207720e96dcf50f89860dde2fa4cd8225796b608 100644 (file)
@@ -164,17 +164,17 @@ char* FAST_FUNC INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t ne
 
 int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
 {
-       struct addrinfo req, *ai;
+       struct addrinfo req, *ai = NULL;
        int s;
 
-       memset(&req, '\0', sizeof req);
+       memset(&req, 0, sizeof(req));
        req.ai_family = AF_INET6;
        s = getaddrinfo(name, NULL, &req, &ai);
-       if (s) {
+       if (s != 0) {
                bb_error_msg("getaddrinfo: %s: %d", name, s);
                return -1;
        }
-       memcpy(sin6, ai->ai_addr, sizeof(struct sockaddr_in6));
+       memcpy(sin6, ai->ai_addr, sizeof(*sin6));
        freeaddrinfo(ai);
        return 0;
 }
@@ -209,9 +209,11 @@ char* FAST_FUNC INET6_rresolve(struct sockaddr_in6 *sin6, int numeric)
                return xstrdup("*");
        }
 
-       s = getnameinfo((struct sockaddr *) sin6, sizeof(struct sockaddr_in6),
-                               name, sizeof(name), NULL, 0, 0);
-       if (s) {
+       s = getnameinfo((struct sockaddr *) sin6, sizeof(*sin6),
+                               name, sizeof(name),
+                               /*serv,servlen:*/ NULL, 0,
+                               0);
+       if (s != 0) {
                bb_error_msg("getnameinfo failed");
                return NULL;
        }
index 3a6585caa8763aeb473ca6c6e4a7d15eff51b1a2..127e2a5fc9af80512e378d2806a127c6c6b60227 100644 (file)
@@ -255,7 +255,7 @@ IF_NOT_FEATURE_IPV6(sa_family_t af = AF_INET;)
 
        memset(&hint, 0 , sizeof(hint));
        hint.ai_family = af;
-       /* Needed. Or else we will get each address thrice (or more)
+       /* Need SOCK_STREAM, or else we get each address thrice (or more)
         * for each possible socket type (tcp,udp,raw...): */
        hint.ai_socktype = SOCK_STREAM;
        hint.ai_flags = ai_flags & ~DIE_ON_ERROR;
@@ -285,7 +285,8 @@ IF_NOT_FEATURE_IPV6(sa_family_t af = AF_INET;)
  set_port:
        set_nport(r, htons(port));
  ret:
-       freeaddrinfo(result);
+       if (result)
+               freeaddrinfo(result);
        return r;
 }
 #if !ENABLE_FEATURE_IPV6
index dcac7379e1ac3dc7f297f6e350d171ad1883f1d3..67fc01547c67d71aeef5c3b01f8b8edc9ca24d2d 100644 (file)
@@ -66,7 +66,7 @@ static int print_host(const char *hostname, const char *header)
        // hint.ai_flags = AI_CANONNAME;
        rc = getaddrinfo(hostname, NULL /*service*/, &hint, &result);
 
-       if (!rc) {
+       if (rc == 0) {
                struct addrinfo *cur = result;
                unsigned cnt = 0;
 
@@ -94,7 +94,7 @@ static int print_host(const char *hostname, const char *header)
                bb_error_msg("can't resolve '%s'", hostname);
 #endif
        }
-       if (ENABLE_FEATURE_CLEAN_UP)
+       if (ENABLE_FEATURE_CLEAN_UP && result)
                freeaddrinfo(result);
        return (rc != 0);
 }