{
const unsigned char *s;
if (strlen(host)-1 > 254 || mbstowcs(0, host, 0) > 255) return 0;
- for (s=host; *s>=0x80 || *s=='.' || *s=='-' || isalnum(*s); s++);
+ for (s=(void *)host; *s>=0x80 || *s=='.' || *s=='-' || isalnum(*s); s++);
return !*s;
}
//char hostbuf[256];
char line[512];
FILE *f, _f;
- unsigned char _buf[64];
+ unsigned char _buf[1024];
char *z;
int result;
int cnt;
type = proto==IPPROTO_UDP ? SOCK_DGRAM : SOCK_STREAM;
if (serv) {
- port = strtoul(serv, &z, 0);
+ if (!*serv) return EAI_SERVICE;
+ port = strtoul(serv, &z, 10);
if (!*z && port > 65535) return EAI_SERVICE;
if (!port) {
if (flags & AI_NUMERICSERV) return EAI_SERVICE;
return 0;
}
+ if (!*host) return EAI_NONAME;
+
/* Try as a numeric address */
if (__ipparse(&sa, family, host) >= 0) {
buf = calloc(sizeof *buf, 1+EXTRA);
buf->ai.ai_addr = (void *)&buf->sa;
buf->ai.ai_addrlen = family==AF_INET6 ? sizeof sa.sin6 : sizeof sa.sin;
buf->ai.ai_family = family;
+ buf->ai.ai_canonname = (char *)host;
buf->sa = sa;
buf->sa.sin.sin_port = port;
*res = &buf->ai;