| int __inet_aton(const char*, struct in_addr*); |
| int __lookup_ipliteral(struct address buf[static 1], |
| if (__inet_aton(name, &a4) > 0) { |
| if (family == AF_INET6) /* wrong family */ |
| memcpy(&buf[0].addr, &a4, sizeof a4); |
| char *p = strchr(name, '%'), *z; |
| unsigned long long scopeid = 0; |
| if (p && p - name < 64) { |
| memcpy(tmp, name, p - name); |
| if (inet_pton(AF_INET6, name, &a6) <= 0) |
| if (family == AF_INET) /* wrong family */ |
| memcpy(&buf[0].addr, &a6, sizeof a6); |
| buf[0].family = AF_INET6; |
| scopeid = strtoull(p, &z, 10); |
| if (!IN6_IS_ADDR_LINKLOCAL(&a6) && !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) |
| scopeid = if_nametoindex(p); |
| buf[0].scopeid = scopeid; |