projects
/
musl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
efe72c5
)
remove scanf dependency from getaddrinfo /etc/services support
author
Rich Felker
<dalias@aerifal.cx>
Mon, 23 Jul 2012 02:09:45 +0000
(22:09 -0400)
committer
Rich Felker
<dalias@aerifal.cx>
Mon, 23 Jul 2012 02:09:45 +0000
(22:09 -0400)
src/network/getaddrinfo.c
patch
|
blob
|
history
diff --git
a/src/network/getaddrinfo.c
b/src/network/getaddrinfo.c
index
d16b656
..
8386216
100644
(file)
--- a/
src/network/getaddrinfo.c
+++ b/
src/network/getaddrinfo.c
@@
-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);
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 (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;
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;
}
continue;
break;
}