don't call freeaddinfo(NULL)

Signed-off-by: Vitaly Magerya <vmagerya@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Vitaly Magerya 2011-03-22 20:14:26 +01:00 committed by Denys Vlasenko
parent cf9074b54b
commit 7f4b769c42
3 changed files with 14 additions and 11 deletions

View 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) int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
{ {
struct addrinfo req, *ai; struct addrinfo req, *ai = NULL;
int s; int s;
memset(&req, '\0', sizeof req); memset(&req, 0, sizeof(req));
req.ai_family = AF_INET6; req.ai_family = AF_INET6;
s = getaddrinfo(name, NULL, &req, &ai); s = getaddrinfo(name, NULL, &req, &ai);
if (s) { if (s != 0) {
bb_error_msg("getaddrinfo: %s: %d", name, s); bb_error_msg("getaddrinfo: %s: %d", name, s);
return -1; return -1;
} }
memcpy(sin6, ai->ai_addr, sizeof(struct sockaddr_in6)); memcpy(sin6, ai->ai_addr, sizeof(*sin6));
freeaddrinfo(ai); freeaddrinfo(ai);
return 0; return 0;
} }
@ -209,9 +209,11 @@ char* FAST_FUNC INET6_rresolve(struct sockaddr_in6 *sin6, int numeric)
return xstrdup("*"); return xstrdup("*");
} }
s = getnameinfo((struct sockaddr *) sin6, sizeof(struct sockaddr_in6), s = getnameinfo((struct sockaddr *) sin6, sizeof(*sin6),
name, sizeof(name), NULL, 0, 0); name, sizeof(name),
if (s) { /*serv,servlen:*/ NULL, 0,
0);
if (s != 0) {
bb_error_msg("getnameinfo failed"); bb_error_msg("getnameinfo failed");
return NULL; return NULL;
} }

View File

@ -255,7 +255,7 @@ IF_NOT_FEATURE_IPV6(sa_family_t af = AF_INET;)
memset(&hint, 0 , sizeof(hint)); memset(&hint, 0 , sizeof(hint));
hint.ai_family = af; 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...): */ * for each possible socket type (tcp,udp,raw...): */
hint.ai_socktype = SOCK_STREAM; hint.ai_socktype = SOCK_STREAM;
hint.ai_flags = ai_flags & ~DIE_ON_ERROR; hint.ai_flags = ai_flags & ~DIE_ON_ERROR;
@ -285,6 +285,7 @@ IF_NOT_FEATURE_IPV6(sa_family_t af = AF_INET;)
set_port: set_port:
set_nport(r, htons(port)); set_nport(r, htons(port));
ret: ret:
if (result)
freeaddrinfo(result); freeaddrinfo(result);
return r; return r;
} }

View File

@ -66,7 +66,7 @@ static int print_host(const char *hostname, const char *header)
// hint.ai_flags = AI_CANONNAME; // hint.ai_flags = AI_CANONNAME;
rc = getaddrinfo(hostname, NULL /*service*/, &hint, &result); rc = getaddrinfo(hostname, NULL /*service*/, &hint, &result);
if (!rc) { if (rc == 0) {
struct addrinfo *cur = result; struct addrinfo *cur = result;
unsigned cnt = 0; 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); bb_error_msg("can't resolve '%s'", hostname);
#endif #endif
} }
if (ENABLE_FEATURE_CLEAN_UP) if (ENABLE_FEATURE_CLEAN_UP && result)
freeaddrinfo(result); freeaddrinfo(result);
return (rc != 0); return (rc != 0);
} }