31 #if !HAVE_DECL_INET_PTON
50 #if defined(LIBC_SCCS) && !defined(lint)
51 static const char rcsid[] =
"inet_pton.c,v 1.2.206.2 2005/07/28 07:43:18 marka Exp";
55 #include <sys/param.h>
58 #include <sys/types.h>
61 #include <sys/socket.h>
64 #include <netinet/in.h>
67 #include <arpa/inet.h>
69 #if HAVE_ARPA_NAMESER_H
70 #include <arpa/nameser.h>
79 #if ! defined(NS_INADDRSZ)
82 #if ! defined(NS_IN6ADDRSZ)
83 #define NS_IN6ADDRSZ 16
85 #if ! defined(NS_INT16SZ)
94 static int inet_pton4 (
const char *src, u_char *dst);
95 static int inet_pton6 (
const char *src, u_char *dst);
117 errno = EAFNOSUPPORT;
136 static const char digits[] =
"0123456789";
137 int saw_digit, octets, ch;
143 while ((ch = *src++) !=
'\0') {
146 if ((pch = strchr(digits, ch))) {
147 u_int nw = *tp * 10 + (pch - digits);
149 if (saw_digit && *tp == 0)
159 }
else if (ch ==
'.' && saw_digit) {
189 static const char xdigits_l[] =
"0123456789abcdef",
190 xdigits_u[] =
"0123456789ABCDEF";
192 const char *xdigits, *curtok;
193 int ch, seen_xdigits;
206 while ((ch = *src++) !=
'\0') {
209 if (!(pch = strchr((xdigits = xdigits_l), ch)))
210 pch = strchr((xdigits = xdigits_u), ch);
213 val |= (pch - xdigits);
214 if (++seen_xdigits > 4)
225 }
else if (*src ==
'\0') {
230 *tp++ = (u_char) (val >> 8) & 0xff;
231 *tp++ = (u_char) val & 0xff;
247 *tp++ = (u_char) (val >> 8) & 0xff;
248 *tp++ = (u_char) val & 0xff;
255 const int n = tp - colonp;
260 for (i = 1; i <= n; i++) {
261 endp[- i] = colonp[n - i];
static int inet_pton6(const char *src, u_char *dst)
static int inet_pton4(const char *src, u_char *dst)
int xinet_pton(int af, const char *src, void *dst)