use restrict everywhere it's required by c99 and/or posix 2008
[musl] / src / network / getaddrinfo.c
index d16b656..b9e562f 100644 (file)
@@ -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;
                        }