From f15aa3a552022743398a652165d76bf912c715e5 Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Mon, 14 May 2001 13:47:49 +0000 Subject: Initial revision --- mdk-stage1/dietlibc/libcruft/inet_aton.c | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 mdk-stage1/dietlibc/libcruft/inet_aton.c (limited to 'mdk-stage1/dietlibc/libcruft/inet_aton.c') diff --git a/mdk-stage1/dietlibc/libcruft/inet_aton.c b/mdk-stage1/dietlibc/libcruft/inet_aton.c new file mode 100644 index 000000000..ac7d9d007 --- /dev/null +++ b/mdk-stage1/dietlibc/libcruft/inet_aton.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include + +/* inet_aton() converts the Internet host address cp from the standard + * numbers-and-dots notation into binary data and stores it in the + * structure that inp points to. inet_aton returns nonzero if the + * address is valid, zero if not. */ + +/* problem is, inet_aton is historically quite, uh, lenient. + * the following are all acceptable: + * 0x7f000001 == 127.1 == 127.0.0.1.0 == 127.0.0.1 + * btw: 127.0.0.x.y == 127.0.0.(x|y) + * and: 10.1.1 == 10.1.0.1 (huh?!) + * and: 10 == 0.0.0.10 (?!?!?) + * The Berkeley people must have been so stoned that they are still high. + */ + +/* I hereby disclaim that I wrote this code. */ +int inet_aton(const char *cp, struct in_addr *inp) { + int i; + unsigned int ip=0; + char *tmp=(char*)cp; + for (i=24; ;) { + long j; + j=strtol(tmp,&tmp,0); + if (*tmp==0) { + ip|=j; + break; + } + if (*tmp=='.') { + if (j>255) return 0; + ip|=(j<0) i-=8; + ++tmp; + continue; + } + return 0; + } + inp->s_addr=htonl(ip); + return 1; +} -- cgit v1.2.1