mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
getaddrinfo /etc/services lookup support
This commit is contained in:
parent
b4f632bb27
commit
efe72c5619
1 changed files with 16 additions and 3 deletions
|
@ -58,7 +58,6 @@ int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint,
|
|||
union sa sa = {{0}};
|
||||
unsigned char reply[1024];
|
||||
int i, j;
|
||||
//char hostbuf[256];
|
||||
char line[512];
|
||||
FILE *f, _f;
|
||||
unsigned char _buf[1024];
|
||||
|
@ -79,10 +78,24 @@ int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint,
|
|||
port = strtoul(serv, &z, 10);
|
||||
if (!*z && port > 65535) return EAI_SERVICE;
|
||||
if (!port) {
|
||||
size_t servlen = strlen(serv);
|
||||
char protname[4];
|
||||
|
||||
if (flags & AI_NUMERICSERV) return EAI_SERVICE;
|
||||
|
||||
//f = fopen("/etc/services", "rb");
|
||||
return EAI_SERVICE;
|
||||
f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
|
||||
if (!f) return EAI_SERVICE;
|
||||
while (fgets(line, sizeof line, f)) {
|
||||
if (strncmp(line, serv, servlen))
|
||||
continue;
|
||||
if (sscanf(line+servlen, "%lu/%3s", &port, protname) < 2)
|
||||
continue;
|
||||
if (strcmp(protname, proto==IPPROTO_UDP ? "udp" : "tcp"))
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
__fclose_ca(f);
|
||||
if (feof(f)) return EAI_SERVICE;
|
||||
}
|
||||
port = htons(port);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue