3 #include <sys/socket.h>
4 #include <netinet/in.h>
9 int __ipparse(void *dest, int family, const char *s0)
12 unsigned char *d = dest;
13 unsigned long a[16] = { 0 };
17 if (family == AF_INET6) goto not_v4;
20 a[i] = strtoul(s, (char **)&z, 0);
21 if (z==s || (*z && *z != '.')) goto not_v4;
27 a[1] = a[0] & 0xffffff;
36 ((struct sockaddr_in *)d)->sin_family = AF_INET;
37 d = (void *)&((struct sockaddr_in *)d)->sin_addr;
38 for (i=0; i<4; i++) d[i] = a[i];
43 ((struct sockaddr_in6 *)d)->sin6_family = AF_INET6;
44 return inet_pton(AF_INET6, s, (void *)&((struct sockaddr_in6 *)d)->sin6_addr) <= 0 ? -1 : 0;