diff options
Diffstat (limited to 'sys/src/ape/lib/bsd/inet_addr.c')
| -rw-r--r-- | sys/src/ape/lib/bsd/inet_addr.c | 40 |
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; } |
