/* Extra slots needed for storing canonical name */
#define EXTRA ((256+sizeof(struct aibuf)-1)/sizeof(struct aibuf))
-int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint, struct addrinfo **res)
+int getaddrinfo(const char *restrict host, const char *restrict serv, const struct addrinfo *restrict hint, struct addrinfo **restrict res)
{
int flags = hint ? hint->ai_flags : 0;
int family = hint ? hint->ai_family : AF_UNSPEC;
if (serv) {
if (!*serv) return EAI_SERVICE;
port = strtoul(serv, &z, 10);
- if (!*z && port > 65535) return EAI_SERVICE;
- if (!port) {
+ if (*z) {
size_t servlen = strlen(serv);
char *end = line;
__fclose_ca(f);
if (feof(f)) return EAI_SERVICE;
}
+ if (port > 65535) return EAI_SERVICE;
port = htons(port);
}
while (j--) buf[i++].sa.sin.sin_family = AF_INET6;
}
- if (__dns_get_rr((void *)&buf[cnt], 0, 256, 1, reply, RR_CNAME, 1) < 0)
+ if (__dns_get_rr((void *)&buf[cnt], 0, 256, 1, reply, RR_CNAME, 1) <= 0)
strcpy((void *)&buf[cnt], host);
for (i=0; i<cnt; i++) {