X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fnetwork%2Fgetaddrinfo.c;h=b9e562f7cdaae41287847d942cc18e59acd8269f;hb=400c5e5c8307a2ebe44ef1f203f5a15669f20347;hp=d16b6561a51f9f1828340c7146efd74ca5731e2c;hpb=efe72c561925a711d8dbc7894ef27fe823205e21;p=musl diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c index d16b6561..b9e562f7 100644 --- a/src/network/getaddrinfo.c +++ b/src/network/getaddrinfo.c @@ -47,7 +47,7 @@ struct aibuf { /* 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; @@ -79,18 +79,17 @@ int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint, if (!*z && port > 65535) return EAI_SERVICE; if (!port) { size_t servlen = strlen(serv); - char protname[4]; + char *end = line; if (flags & AI_NUMERICSERV) 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)) + if (strncmp(line, serv, servlen) || !isspace(line[servlen])) continue; - if (sscanf(line+servlen, "%lu/%3s", &port, protname) < 2) - continue; - if (strcmp(protname, proto==IPPROTO_UDP ? "udp" : "tcp")) + port = strtoul(line+servlen, &end, 10); + if (strncmp(end, proto==IPPROTO_UDP ? "/udp" : "/tcp", 4)) continue; break; }