diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-07-22 22:09:45 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-07-22 22:09:45 -0400 | 
| commit | 845a5e69fa33bf49eea81a7b8c80902ab1687f2e (patch) | |
| tree | d8a961f1e8cddba414c0ecd2544f1637ada3e263 | |
| parent | efe72c561925a711d8dbc7894ef27fe823205e21 (diff) | |
| download | musl-845a5e69fa33bf49eea81a7b8c80902ab1687f2e.tar.gz | |
remove scanf dependency from getaddrinfo /etc/services support
| -rw-r--r-- | src/network/getaddrinfo.c | 9 | 
1 files changed, 4 insertions, 5 deletions
| diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c index d16b6561..83862166 100644 --- 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); -			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;  			} | 
