18 #if defined(LIBC_SCCS) && !defined(lint)
19 static const char rcsid[] =
"$Id: inet_pton.c,v 1.3.18.2 2005/07/28 07:38:07 marka Exp $";
21 #include <sys/cdefs.h>
24 #include <sys/param.h>
25 #include <sys/socket.h>
26 #include <sys/systm.h>
28 #include <netinet/in.h>
30 #if __FreeBSD_version < 700000
39 static int inet_pton4(
const char *src, u_char *dst);
40 static int inet_pton6(
const char *src, u_char *dst);
80 static const char digits[] =
"0123456789";
81 int saw_digit, octets, ch;
88 while ((ch = *src++) !=
'\0') {
91 if ((pch =
strchr(digits, ch)) != NULL) {
92 u_int
new = *tp * 10 + (pch - digits);
94 if (saw_digit && *tp == 0)
104 }
else if (ch ==
'.' && saw_digit) {
134 static const char xdigits_l[] =
"0123456789abcdef",
135 xdigits_u[] =
"0123456789ABCDEF";
136 #define NS_IN6ADDRSZ 16
139 const char *xdigits, *curtok;
140 int ch, seen_xdigits;
153 while ((ch = *src++) !=
'\0') {
156 if ((pch =
strchr((xdigits = xdigits_l), ch)) == NULL)
157 pch =
strchr((xdigits = xdigits_u), ch);
160 val |= (pch - xdigits);
161 if (++seen_xdigits > 4)
172 }
else if (*src ==
'\0') {
177 *tp++ = (u_char) (val >> 8) & 0xff;
178 *tp++ = (u_char) val & 0xff;
194 *tp++ = (u_char) (val >> 8) & 0xff;
195 *tp++ = (u_char) val & 0xff;
197 if (colonp != NULL) {
202 const int n = tp - colonp;
207 for (i = 1; i <= n; i++) {
208 endp[- i] = colonp[n - i];
215 memcpy(dst, tmp, NS_IN6ADDRSZ);
int inet_pton(int af, const char *src, void *dst)
void * memset(void *b, int c, size_t len)
static int inet_pton6(const char *src, u_char *dst)
static int inet_pton4(const char *src, u_char *dst)