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:
parent
cf9074b54b
commit
7f4b769c42
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user