summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/bsd/inet_addr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/src/ape/lib/bsd/inet_addr.c')
-rw-r--r--sys/src/ape/lib/bsd/inet_addr.c40
1 files changed, 4 insertions, 36 deletions
diff --git a/sys/src/ape/lib/bsd/inet_addr.c b/sys/src/ape/lib/bsd/inet_addr.c
index 63cd69cc4..3f6c032e8 100644
--- a/sys/src/ape/lib/bsd/inet_addr.c
+++ b/sys/src/ape/lib/bsd/inet_addr.c
@@ -9,44 +9,12 @@
#include <sys/socket.h>
#include <netinet/in.h>
-#define CLASS(x) (x[0]>>6)
-
unsigned long
inet_addr(char *from)
{
- int i;
- char *p;
- unsigned char to[4];
- unsigned long x;
-
- p = from;
- memset(to, 0, 4);
- for(i = 0; i < 4 && *p; i++){
- to[i] = strtoul(p, &p, 0);
- if(*p == '.')
- p++;
- }
+ struct in_addr in;
- switch(CLASS(to)){
- case 0: /* class A - 1 byte net */
- case 1:
- if(i == 3){
- to[3] = to[2];
- to[2] = to[1];
- to[1] = 0;
- } else if (i == 2){
- to[3] = to[1];
- to[1] = 0;
- }
- break;
- case 2: /* class B - 2 byte net */
- if(i == 3){
- to[3] = to[2];
- to[2] = 0;
- }
- break;
- }
- x = nptohl(to);
- x = htonl(x);
- return x;
+ if(inet_aton(from, &in) == 0)
+ return INADDR_NONE;
+ return in.s_addr;
}