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;
}
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;
}
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;
set_port:
set_nport(r, htons(port));
ret:
- freeaddrinfo(result);
+ if (result)
+ freeaddrinfo(result);
return r;
}
#if !ENABLE_FEATURE_IPV6
// hint.ai_flags = AI_CANONNAME;
rc = getaddrinfo(hostname, NULL /*service*/, &hint, &result);
- if (!rc) {
+ if (rc == 0) {
struct addrinfo *cur = result;
unsigned cnt = 0;
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);
}