3 #include <sys/socket.h>
4 #include <netinet/in.h>
8 int __ipparse(void *dest, int family, const char *s0)
11 unsigned char *d = dest;
12 unsigned long a[16] = { 0 };
16 if (family == AF_INET6) goto not_v4;
19 a[i] = strtoul(s, &z, 0);
20 if (z==s || (*z && *z != '.') || !isdigit(*s)) {
21 if (family == AF_INET) return -1;
30 a[1] = a[0] & 0xffffff;
39 ((struct sockaddr_in *)d)->sin_family = AF_INET;
40 d = (void *)&((struct sockaddr_in *)d)->sin_addr;
42 if (a[i] > 255) return -1;
49 ((struct sockaddr_in6 *)d)->sin6_family = AF_INET6;
50 return inet_pton(AF_INET6, s, (void *)&((struct sockaddr_in6 *)d)->sin6_addr) <= 0 ? -1 : 0;